Javascript中的轻量级规则引擎

我正在寻找在Javascript中实现的轻量级规则引擎的build议。

这种实现的原因是使用一小套规则(小于20)build立一个非常轻量级但快速的基于浏览器的模拟。 模拟将需要六个参数,并运行规则并在浏览器中显示结果,而无需返回到服务器。 想象一个带有几个单选button,checkbox,文本框和滑块的UI来控制参数。 仿真将根据任何参数变化快速重新运行。

检查在纯JavaScript中为node.js实现的nools规则引擎。 它有一个非常简单的规则定义语法。

我已经实现了一个在C#中描述的(更复杂的)版本,并且通过代码思考,所有这些都可以通过JavaScript来实现。 我同意所发表的评论,写你自己是一个可行的select。 它可以像你想要的那样简单或复杂。

这种types的规则引擎的一般观察(没有特定的顺序):

  1. 非线性查询是你的朋友。 在JavaScript中,使用obj[key] = val语法很容易。 一旦您确定了给定参数集的规则输出,请caching其结果,以便您可以再次使用它,而无需再次执行规则。

  2. 确定您是否需要处理input的唯一组合。 例如,假设您允许用户input多个名称并在XYZ上寻求build议。 实际上,您现在需要针对每个input值运行所有规则。 这可能是不相关的,简单的或非常复杂的(想像一个酒店预订系统需要多个date,时间,地点和标准,并提出build议)。

  3. 可以使用setTimeout()来消除UI行为,但是您所描述的规则应该在几毫秒或更短的时间内执行,所以最后担心性能。 性能不如您使用基本规则引擎时想象的那样担心。

  4. 如果规则定义是对象(甚至简单的对象树),则规则定义将是最容易操作的。

  5. 不要绑定UI元素来输出结果; 意思是把规则执行的结果放到一个灵活的对象列表中,这样就可以创build你想要的任何可视输出。

  6. 定制的输出消息对用户非常有用。 意思是,当条件满足时,不要触发通用消息,而是尝试在输出消息中插入实际值,如“您的信用评分仅为550.您至less需要600才能继续。

这是我的头顶。 祝你好运。

规则反应堆( https://github.com/anywhichway/rule-reactor )是一个轻量级,快速,富有performance力的前向链式业务规则引擎,利用JavaScript内部,懒惰的交叉产品以及作为对象而不是Rete的函数。 它可以在浏览器或服务器上使用。

这是非常简单的规则引擎,它使用服务器端JavaScript(Mozilla的犀牛引擎)(也许它会对你有帮助) http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic-rule.html

我已经为一个产品configuration器做了一个html / javascript规则引擎的例子。 规则引擎基于if语句。 if语句将被数组检查。 每当选项改变时,这个数组就被填充所有可能的选项。 看看我的博客的例子。 链接到我的博客“前进链接JavaScript规则引擎”

我认为“obj [key] = val”是javascript规则引擎的关键。 JQuery的帮助与JavaScript处理。

请检查(JSL) https://www.npmjs.com/package/lib-jsl

从概述文档中,JSL是一个基于JSON的逻辑编程库,用于JS程序中的embedded式应用。 它使用JSON作为其语法以及I / O方法,并在主机环境中提供callback以进行性能优化。