web-dev-qa-db-ja.com

JavaScriptの軽量ルールエンジン

Javascriptで実装された軽量ルールエンジンの提案を探しています。

このような実装の理由は、小さなルールセット(20未満)を使用して、非常に軽量で高速なブラウザベースのシミュレーションを構築することです。シミュレーションには、6個のパラメーターを使用し、ルールを実行して、サーバーに戻る必要なくブラウザーに結果を表示します。パラメーターを制御するための、いくつかのラジオボタン、チェックボックス、テキストボックス、スライダーを備えたUIを考えてください。シミュレーションは、パラメータの変更に基づいてすばやく再実行されます。

48
Philippe Monnet

C#で記述しているものの(より複雑な)バージョンを実装し、コードを振り返ってみると、すべてJavaScriptで実行できます。私は、あなた自身のものを書くことが実行可能なオプションであるという投稿されたコメントに同意します。必要に応じて、単純または複雑にすることができます。

このタイプのルールエンジンの一般的な観察結果(順不同):

  1. 非線形ルックアップはあなたの友達です。 JavaScriptでは、obj[key] = val構文を使用すると簡単です。特定のパラメータセットのルールの出力を決定したら、その結果をキャッシュして、ルールを再度実行せずに再び使用できるようにします。

  2. 入力の一意の組み合わせを処理する必要があるかどうかを判断します。たとえば、ユーザーが複数の名前を入力し、XYZで提案を求められるようにするとします。実際には、各入力値に対してすべてのルールを実行する必要があります。これは、無関係、単純、または非常に複雑な場合があります(複数の日付、時刻、場所、基準を取り、提案を行うホテル予約システムを想像してください)。

  3. setTimeout()を使用してUIの動作を滑らかにすることができますが、記述するルールは数ミリ秒以下で実行されるため、パフォーマンスを最後に心配する必要があります。パフォーマンスは、基本的なルールエンジンで考えるよりも懸念事項ではありません。

  4. ルール定義は、オブジェクト(または単純なオブジェクトツリー)である場合に最も簡単に操作できます。

  5. UI要素を出力結果に結び付けないでください。つまり、ルールの実行結果を柔軟なオブジェクトリストに入れて、必要な視覚的出力を作成できるようにします。

  6. カスタマイズされた出力メッセージは、ユーザーにとって非常に便利です。つまり、条件が満たされたときに一般的なメッセージをトリガーするのではなく、「クレジットスコアは550のみです。続行するには最低600が必要です」などの出力メッセージに実際の値を挿入してみてください。

それは私の頭の上のそれです。幸運を。

13
Tim Medora

Node.js用の純粋なJavaScriptで実装されている nools ルールエンジンをチェックアウトします。ルール定義の構文は非常に単純です。

13
dearwish

Rule Reactor( https://github.com/anywhichway/rule-reactor )は、JavaScript内部、レイジーなクロスプロダクト、および関数としての機能を活用した、軽量で高速で表現力豊かなフォワードチェーンビジネスルールエンジンです。むしろ。ブラウザまたはサーバーで使用できます。

5
AnyWhichWay

これは非常に単純なルールエンジンであり、サーバー側のjavascript(MozillaのRhinoエンジン)を使用します(おそらく役立つでしょう) http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic- rule.html

2
John

製品コンフィギュレーター用のhtml/javascriptルールエンジンの例を作成しました。ルールエンジンはif thenステートメントに基づいています。 if thenステートメントは配列でチェックされます。この配列には、オプションが変更されるたびに、可能なすべてのオプションが入力されます。例については、私のブログをご覧ください。 私のブログ「Forward chaining javascript rule engine」へのリンク

「obj [key] = val」はjavascriptルールエンジンのキーだと思います。 Jqueryはjavascriptの処理に役立ちます。

1
Alwin

チェックアウト(JSL) https://www.npmjs.com/package/lib-jsl .

概要ドキュメントから、JSLはJSプログラムでの組み込み使用を目的としたJSONベースのロジックプログラミングライブラリです。構文およびI/OメソッドとしてJSONを使用し、ホスト環境にコールバックを提供してパフォーマンスを最適化します。

1
Ruchir Walia