Repository logo
 
No Thumbnail Available
Publication

Highly Performant JavaScript Rules Engine

Use this identifier to reference this record.
Name:Description:Size:Format: 
Tese_5131.pdf4.34 MBAdobe PDF Download

Abstract(s)

Jscrambler offers a product named Webpage Integrity, which actively monitors and blocks client-side behaviors of third-party scripts running in web applications. The product core is an agent that runs in the webpage, with a rules engine built into it, dictating actions the agent takes based on rules defined by the customer. Both the agent and its engine are built with JavaScript. JavaScript is a weakly-typed scripting language used all over the internet, running in almost all websites. Being a weakly-typed and extremely flexible language presents some difficulties, mainly lack of compilation-time optimization. To tackle this, it has a built-in Just-in-time compiler, which does runtime optimizations based on several heuristics, such as the number of functions executions, or the data type in its arguments. JavaScript rules engines are a tricky case of performance. Being a very flexible tool makes the code also be very flexible, accepting a multitude of arguments and data types, which leads to the Just-in-time compiler not optimizing the code to its fullest potential. This work creates a rules engine different from the ones that are freely available for JavaScript. Instead of interpreting the rules in real time by a very flexible engine, the rules are compiled into Just-in-time compilation friendly JavaScript code, which has the same functionality. Based on a realistic test model created from one of Jscrambler’s biggest customers, results show that compiling rules into JavaScript source code brings a performance boost of up to 60 times. Lastly, results show that the Just-in-time compiler does not bring any significant performance gains in a pure JavaScript rules engine with Just-in-time compilation friendly code.
A Jscrambler tem um produto chamado Webpage Integrity, que monitoriza e bloqueia ati vamente comportamentos client-side de scripts de terceiros que executam numa aplicação web. O núcleo do produto é um agente que corre diretamente na aplicação web, com um motor de regras integrado, que dita ações baseado em regras definidas pelo cliente. Tanto o agente como o motor de regras são em JavaScript. JavaScript é uma linguagem de scripting fracamente tipada usada em toda a internet, em quase todos os websites. O facto de ser uma linguagem fracamente tipada e extremamente flexível traz algumas dificuldades, principalmente a falta de otimização em tempo de com pilação. Para combater isto, o JavaScript tem um compilador Just-in-time integrado, que faz otimizações em tempo de execução baseado em várias heurísticas, como o número de execuções de uma função, ou o tipo de dados nos seus argumentos. Os motores de regras em JavaScript trazem algumas dificuldades de performance. Ser uma ferramenta flexível faz também com que o seu código seja flexível, aceitando vários argumentos com tipos de dados diversos, o que leva a que o compilador Just-in-time não otimize o código para o seu potential máximo. Este trabalho cria um motor de regras diferente dos que existem atualmente para uso livre em JavaScript. Em vez de interpretar as regras em tempo real, as regras são compiladas em código JavaScript otimizado para compilação Just-in-time, mantendo a mesma funcionali dade. Baseado num modelo de testes realístico, criado a partir de um dos maiores clientes da Jscrambler, os resultados mostram que compilar as regras para JavaScript trazem uma melhoria de desempenho numa ordem de magnitude de até 60 vezes. Os resultados também demonstram que, num motor de regras compilado para JavaScript com código otimizado para um compilador Just-in-time, o mesmo não traz melhorias de desempenho significativas.

Description

Keywords

JavaScript Performance Rules Engine

Citation

Research Projects

Organizational Units

Journal Issue

Publisher

CC License