48 votes

Moteur de règles léger en Javascript

Je suis à la recherche de suggestions pour un moteur de règles léger implémenté en Javascript.

La raison d'une telle mise en œuvre est de construire une simulation par navigateur très légère mais rapide, utilisant un petit ensemble de règles (moins de 20). La simulation prendrait une demi-douzaine de paramètres, exécuterait les règles et afficherait les résultats dans le navigateur sans avoir besoin de retourner au serveur. Pensez à une interface utilisateur avec quelques boutons radio, cases à cocher, zones de texte et curseurs pour contrôler les paramètres. La simulation serait rapidement ré-exécutée en fonction de tout changement de paramètre.

13voto

Tim Medora Points 30969

J'ai implémenté une version (plus compliquée) de ce que vous décrivez en C#, et en repensant au code, tout cela serait faisable avec JavaScript. Je suis d'accord avec les commentaires postés selon lesquels écrire son propre code est une option viable. Il peut être aussi simple ou complexe que vous le souhaitez.

Observations générales pour ce type de moteur de règles (sans ordre particulier) :

  1. Les recherches non linéaires sont vos amies. En JavaScript, cela serait facile en utilisant la fonction obj[key] = val syntaxe. Une fois que vous avez déterminé la sortie d'une règle pour un ensemble donné de paramètres, mettez ses résultats en cache afin de pouvoir les réutiliser sans avoir à exécuter à nouveau la règle.

  2. Déterminez si vous devez ou non traiter des combinaisons uniques d'entrées. Par exemple, supposons que vous autorisiez l'utilisateur à saisir plusieurs noms et à demander des suggestions sur XYZ. En réalité, vous devez maintenant exécuter toutes les règles par rapport à chaque valeur d'entrée. Cela peut être sans intérêt, simple ou extrêmement compliqué (imaginez un système de réservation d'hôtel qui prend plusieurs dates, heures, lieux et critères, et fait des suggestions).

  3. setTimeout() peut être utilisé pour adoucir le comportement de l'interface utilisateur, mais les règles que vous décrivez devraient s'exécuter en quelques millisecondes ou moins, alors ne vous préoccupez que des performances. Les performances sont moins préoccupantes que vous ne le pensez avec un moteur de règles de base.

  4. Les définitions de règles seront plus faciles à manipuler si elles sont des objets (ou même de simples arbres d'objets).

  5. Ne liez pas les éléments de l'interface utilisateur aux résultats de sortie ; autrement dit, placez les résultats de l'exécution de la règle dans une liste d'objets flexible afin de pouvoir créer la sortie visuelle que vous souhaitez.

  6. Les messages de sortie personnalisés sont très utiles pour l'utilisateur. Ainsi, plutôt que de déclencher un message générique lorsqu'une condition est remplie, essayez d'insérer une valeur réelle dans le message de sortie, par exemple : "Votre score de crédit n'est que de 550. Vous avez besoin d'un minimum de 600 pour continuer."

C'est tout ce qui me vient à l'esprit. Bonne chance.

13voto

dearwish Points 61

Consultez le nools moteur de règles implémenté en JavaScript pur pour node.js. Il possède une syntaxe assez simple pour la définition des règles.

2voto

John Points 473

Il s'agit d'un moteur de règles très simple, qui utilise le javascript côté serveur (moteur Rhino de Mozilla) (il vous sera peut-être utile). http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic-rule.html

1voto

Alwin Points 11

J'ai réalisé un exemple de moteur de règles html / javascript pour un configurateur de produits. Le moteur de règles est basé sur des instructions if then. Les instructions if then seront vérifiées avec un tableau. Ce tableau est rempli avec toutes les options possibles à chaque fois qu'une option est changée. Consultez mon blog pour l'exemple. Lien vers mon blog "Forward chaining javascript rule engine" (en anglais)

Je pense que le "obj[key] = val" est la clé d'un moteur de règles en javascript. Jquery aide à la manipulation de javascript.

-17voto

Assaf Moldavsky Points 349

Il semble que vous allez faire quelque chose qui nécessite une structure solide, êtes-vous sûr de vouloir utiliser Javascript ? Javascript est très peu structuré et n'oubliez pas qu'il est assez coûteux pour le processeur de l'utilisateur lorsque votre structure devient un peu plus compliquée. Pourquoi ne pas essayer les applets Java ? ou même Flash ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X