Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/itsarnaud/template-engine-bench

This project is a benchmark designed to evaluate the performance of various JavaScript template engines. It allows developers to compare rendering performance of several popular template engines in various scenarios
https://github.com/itsarnaud/template-engine-bench

benchmark ejs eta handlebars igodust js liquid pug template-engine

Last synced: about 2 months ago
JSON representation

This project is a benchmark designed to evaluate the performance of various JavaScript template engines. It allows developers to compare rendering performance of several popular template engines in various scenarios

Awesome Lists containing this project

README

        

# Template Engine Benchmark

This project is a benchmark designed to evaluate the performance of various JavaScript template engines. It allows developers to compare rendering performance of several popular template engines in various scenarios.

## How to use ?

**1. Clone this repo on your machine:**
```bash
git clone https://github.com/itsarnaud/templating-engine-bench.git
```

**2. Install dependencies:**
```bash
npm install
```

**3. Launch the benchmark by executing:**
```bash
node main.js
```

**4. Results:
**
Once the benchmark is completed, the results will be automatically updated in the readme file.

## Current results

The tests were carried out on:
- Node v21.7.2
- MacBook Air M2, 15-inch with 16GB of RAM (2023)

## RENDER

### friends (runned 5000 times)
`pug` => **504ms**

`igodust` => **603ms**

`eta` => **610ms**

`handlebars` => **1181ms**

`ejs` => **3618ms**

`liquidjs` => **14825ms**

### if-expression (runned 5000 times)
`pug` => **6ms**

`igodust` => **7ms**

`liquidjs` => **82ms**

`eta` => **88ms**

`ejs` => **130ms**

### projects-escaped (runned 5000 times)
`handlebars` => **38ms**

`igodust` => **42ms**

`eta` => **109ms**

`liquidjs` => **145ms**

`pug` => **157ms**

`ejs` => **185ms**

### projects-unescaped (runned 5000 times)
`igodust` => **8ms**

`handlebars` => **36ms**

`eta` => **106ms**

`liquidjs` => **141ms**

`pug` => **156ms**

`ejs` => **179ms**

### search-results (runned 5000 times)
`igodust` => **16ms**

`pug` => **57ms**

`handlebars` => **146ms**

`eta` => **164ms**

`ejs` => **585ms**

`liquidjs` => **1328ms**

### simple-0 (runned 5000 times)
`pug` => **1ms**

`igodust` => **5ms**

`liquidjs` => **7ms**

`handlebars` => **11ms**

`ejs` => **59ms**

`eta` => **64ms**

### simple-1 (runned 5000 times)
`pug` => **7ms**

`igodust` => **10ms**

`handlebars` => **19ms**

`eta` => **88ms**

`liquidjs` => **94ms**

`ejs` => **166ms**

### simple-2 (runned 5000 times)
`pug` => **6ms**

`igodust` => **9ms**

`handlebars` => **14ms**

`eta` => **89ms**

`liquidjs` => **91ms**

`ejs` => **149ms**

## Adding a new Template Engine

To add a new template engine to this project, follow these simple steps:

**1. Create a file for the template engine:
**
In the `engines` directory, create a new file named after your template engine, for example `my-engine.js`. Take a look at the files already created for the syntax.

```
engines
├── igodust.js
├── my-engine.js
└── ...
```
**⚠️ WARNING: Asynchronous rendering methods, such as those returning Promises, are not supported by the benchmarking tool at the moment. Ensure that your rendering method is synchronous to work with the benchmarking tool effectively. ⚠️**

**2. Add test templates:
**
Place your template files in the templates directory, following the existing structure. Each test group should have a data file (.js or .json) and template files for each template engine you want to include in the benchmark.

```
templates
├── group1
│ ├── data.js (or json)
│ ├── template.dust
│ ├── template.my-engine
│ └── ...
└── ...
```

And that's it, all you have to do is launch the benchmark!

PRs are welcome 😃❤️