Phi*_*net 48 javascript rule-engine
我正在寻找在Javascript中实现的轻量级规则引擎的建议.
这种实现的原因是使用一小组规则(少于20个)构建一个非常轻量但快速的基于浏览器的模拟.模拟将需要六个参数并运行规则并在浏览器中显示结果,而无需返回服务器.想象一下带有几个单选按钮,复选框,文本框和滑块的UI来控制参数.模拟将根据任何参数更改快速重新运行.
Tim*_*ora 13
我已经实现了你在c#中描述的(更复杂)版本,并回顾了代码,所有这些都可以用JavaScript来实现.我同意发表的评论,写你自己是一个可行的选择.它可以像你想要的那样简单或复杂.
此类规则引擎的一般观察(无特定顺序):
非线性查找是你的朋友.在JavaScript中,使用obj[key] = val语法很容易.确定给定参数集的规则输出后,请缓存其结果,以便您可以再次使用它而无需再次执行规则.
确定是否需要处理唯一的输入组合.例如,假设您允许用户输入多个名称并询问有关XYZ的建议.实际上,您现在需要针对每个输入值运行所有规则.这可能是无关紧要的,简单的或非常复杂的(想象一下酒店预订系统需要多个日期,时间,地点和标准,并提出建议).
setTimeout()可用于平滑UI行为,但您描述的规则应在几毫秒或更短的时间内执行,因此最后担心性能.与基本规则引擎相比,性能不像您想象的那么令人担忧.
如果规则定义是对象(甚至是简单的对象树),则它们最容易操作.
不要将UI元素绑定到输出结果; 意思是,将规则执行的结果放入一个灵活的对象列表中,以便您可以从中创建所需的任何视觉输出.
自定义输出消息对用户非常有用.这意味着,不是在满足条件时触发通用消息,而是尝试在输出消息中插入一个实际值,例如"您的信用评分仅为550.您需要至少600才能继续".
这是我的头脑.祝好运.
规则反应堆(https://github.com/anywhichway/rule-reactor)是一种重量轻,速度快,表现正向推理业务规则引擎利用JavaScript的内部,懒惰的交叉产品,并作为对象,而不是Rete算法.它可以在浏览器或服务器上使用.