CacheControl / CacheControl/json-rules-engine

Slow performance while having large array of facts.

Ouverte
#324 10 commentaires 6 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
JavaScript
Étoiles
3.1k
Forks
507
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I have integrated json-rules-engine with a project I am working on and the performance seems much slower than I would expect. I'm using the package to do a simple lookup at another set of facts.

```
const lookupFacts = [
{ col1: '', col2: '', col3: ''},
{ col1: '', col2: '', col3: ''},
{ col1: '', col2: '', col3: ''}
]

const filterRule = {
conditions: {
all: [
{
path: "$.col1",
fact: "fact",
value: {
path: "$.col1",
fact: "lookup"
},
operator: "equal"
},
{
path: "$.col2",
fact: "data",
value: {
path: "$.col2",
fact: "lookup"
},
operator: "equal"
},
{
path: "$.col3",
fact: "data",
value: {
path: "$.col3",
fact: "lookup"
},
operator: "equal"
}
],
event: {
type: 'filter-event'
}
}
}

const engine = new require('json-rules-engine').Engine()

let filteredMatchs = await Promise.all(lookupFacts.map((lookup) => {
return engine.run({ lookup, data })
.then(({ events }) => events.length > 0 ? lookup : false)
.catch((err) => false)
}))
.then((values) => values.filter((value) => value))
```

In my case, the lookupfacts array seems to contain about 80000 entries and it takes around 30000 ms to complete. Whereas doing the same comparison using simple javascript code takes about 10-15 ms only.

I will only be not be having any dynamic data in the flow. Is there a way to improve performance?

Thanks

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Aucun fichier du dépôt ni aucun test n’est indiqué. Commencez par reproduire le benchmark fourni autour de Engine.run avec 80 000 entrées et comparez-le avec la recherche JavaScript simple ; le travail doit aboutir à une amélioration mesurée et exploitable des performances, ou à une limitation clairement documentée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript
Domaine
backend, performance
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.