54

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

这种实现的原因是使用一小组规则(少于 20 条)构建一个非常轻量但快速的基于浏览器的模拟。模拟将采用六个参数并运行规则并在浏览器中显示结果,而无需返回服务器。想象一个带有几个单选按钮、复选框、文本框和滑块来控制参数的 UI。模拟将根据任何参数变化快速重新运行。

4

6 回答 6

15

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

于 2012-10-25T10:51:19.143 回答
15

我已经实现了您在 c# 中描述的(更复杂的)版本,并且回想代码,所有这些都可以使用 JavaScript。我同意发表的评论,即自己编写是一个可行的选择。它可以像您想要的那样简单或复杂。

对此类规则引擎的一般观察(无特定顺序):

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

  2. 确定您是否需要处理输入的唯一组合。例如,假设您允许用户输入多个名称并询问有关 XYZ 的建议。实际上,您现在需要针对每个输入值运行所有规则。这可能是无关紧要的、简单的或极其复杂的(想象一个酒店预订系统,它需要多个日期、时间、地点和标准,并提出建议)。

  3. setTimeout() 可以用来平滑 UI 行为,但是你描述的规则应该在几毫秒或更短的时间内执行,所以最后担心性能。使用基本规则引擎时,性能问题并不像您想象的那么重要。

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

  5. 不要将 UI 元素与输出结果绑定;意思是,将规则执行的结果放入一个灵活的对象列表中,以便您可以从中创建任何您想要的视觉输出。

  6. 定制的输出消息对用户非常有用。这意味着,与其在满足条件时触发通用消息,不如尝试在输出消息中插入一个实际值,例如“您的信用评分只有 550。您至少需要 600 才能继续。”

这就是我的想法。祝你好运。

于 2010-12-27T05:16:07.943 回答
6

Rule Reactor ( https://github.com/anywhichway/rule-reactor ) 是一个轻量级、快速、富有表现力的正向链接业务规则引擎,它利用 JavaScript 内部、惰性交叉产品和作为对象而不是 Rete 的函数。它可以在浏览器或服务器上使用。

于 2016-06-17T09:04:38.550 回答
3

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

于 2010-12-29T18:36:36.290 回答
1

我为产品配置器制作了一个示例 html / javascript 规则引擎。规则引擎基于 if then 语句。if then 语句将使用数组进行检查。每次更改选项时,此数组都会填充所有可能的选项。查看我的博客以获取示例。 链接到我的博客“转发链接 javascript 规则引擎”

我认为“obj[key] = val”是 javascript 规则引擎的关键。Jquery 有助于处理 javascript。

于 2012-02-17T16:05:52.800 回答
1

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

从概述文档中可以看出,JSL 是一个基于 JSON 的逻辑编程库,旨在嵌入到 JS 程序中。它使用 JSON 作为其语法以及 I/O 方法,并为主机环境提供回调以优化性能。

于 2016-05-16T06:27:01.000 回答