# Benchmarks

In this section we will run simple, easy to understand, mini benchmarks to find out which template parser renders faster. Keep in mind that speed is not always the case, you have to choose wisely the template parser to use because their features varies and depending your application's needs you may be forced to use an under-performant parser instead.

We will compare the following 7 template engines/parsers:

* [Ace](https://github.com/yosssi/ace)
* [Blocks](https://github.com/kataras/blocks)
* [Django](https://github.com/flosch/pongo2)
* [Handlebars](https://github.com/aymerick/raymond)
* [HTML (standard html/template)](https://pkg.go.dev/html/template)
* [Jet](https://github.com/CloudyKit/jet)
* [Pug](https://github.com/Joker/jade)

Each benchmark test consists of a template + layout + partial + template data (map). They all have the **same response amount of total bytes**. Ace and Pug parsers minifies the template before render, therefore, all other template file's contents are minified too (no new lines and spaces between html blocks).

The Benchmark Code for each one of the template engines can be found at: <https://github.com/kataras/iris/tree/main/\\_benchmarks/view>.

## System

|                                                         |                                      |
| ------------------------------------------------------- | ------------------------------------ |
| Processor                                               | 12th Gen Intel(R) Core(TM) i7-12700H |
| RAM                                                     | 15.68 GB                             |
| OS                                                      | Microsoft Windows 11 Pro             |
| [Bombardier](https://github.com/codesenberg/bombardier) | v1.2.4                               |
| [Go](https://golang.org)                                | go1.20.2                             |
| [Node.js](https://nodejs.org/)                          | v19.5.0                              |

## Terminology

**Name** is the name of the framework(or router) used under a particular test.

**Reqs/sec** is the avg number of total requests could be processed per second (the higher the better).

**Latency** is the amount of time it takes from when a request is made by the client to the time it takes for the response to get back to that client (the smaller the better).

**Throughput** is the rate of production or the rate at which data are transferred (the higher the better, it depends from response length (body + headers).

**Time To Complete** is the total time (in seconds) the test completed (the smaller the better).

## Results

### Test:Template Layout, Partial and Data

📖 Fires 1000000 requests with 125 concurrent clients. It receives HTML response. The server handler sets some template **data** and renders a template file which consists of a **layout** and a **partial** footer.

| Name                                                                                     | Language | Reqs/sec | Latency  | Throughput | Time To Complete |
| ---------------------------------------------------------------------------------------- | -------- | -------- | -------- | ---------- | ---------------- |
| [Jet](https://github.com/kataras/iris-book/blob/master/view/jet/README.md)               | Go       | 248957   | 500.81us | 88.26MB    | 4.02s            |
| [Blocks](https://github.com/kataras/iris-book/blob/master/view/blocks/README.md)         | Go       | 238854   | 521.76us | 84.74MB    | 4.19s            |
| [Pug](https://github.com/kataras/iris-book/blob/master/view/pug/README.md)               | Go       | 238153   | 523.74us | 85.07MB    | 4.20s            |
| [Django](https://github.com/kataras/iris-book/blob/master/view/django/README.md)         | Go       | 224448   | 555.40us | 79.61MB    | 4.46s            |
| [Handlebars](https://github.com/kataras/iris-book/blob/master/view/handlebars/README.md) | Go       | 197267   | 631.99us | 69.96MB    | 5.07s            |
| [Ace](https://github.com/kataras/iris-book/blob/master/view/ace/README.md)               | Go       | 157415   | 792.53us | 55.83MB    | 6.35s            |
| [HTML](https://github.com/kataras/iris-book/blob/master/view/html/README.md)             | Go       | 120811   | 1.03ms   | 42.82MB    | 8.29s            |
| And for those who like graphs, here you are:                                             |          |          |          |            |                  |

![](https://github.com/kataras/iris/raw/main/_benchmarks/view/chart.png)

> Last updated: Mar 17, 2023 at 10:31am (UTC)

As we've seen above, Jet is the fastest and HTML is the slowest one.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://iris-go.gitbook.io/iris/view-templates/benchmarks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
