Столкнувшись с проблемой выбора js-шаблонизатора, я решил провести небольшое исследование.
Были рассмотрены 16 шаблонизаторов, и проведена оценка каждого из них по нескольким критериям.
Но сегодня я хочу поделиться с Вами лишь частью своего исследования, касающейся скорости работы шиблонизаторов.
Для справедливости нужно отметить, что каркас теста и код для 7 из указанных выше шаблонизаторов написан не мной, а взят из репозитария jQote2.
Как известно, большинство шаблонизаторов сначала компилируют шаблон, а потом позволяют на его основе многократно строить верстку по различным данным.
В тесте учитывается только время построения верстки, а компиляция шаблонов происходит до его начала.
Другой важный аспект — это сложность шаблона, ведь одни шаблонизаторы могут иметь преимущество при простой подстановке значений в шаблон, а другие при наличии в шаблоне циклов и условных операторов.
По этой причине, при тестировании присутствует возможность, оценить каждый из этих случаев, выбрав тип шаблона «Простой» или «Цикл».
Не сложно догадаться, что на результаты тестирования влияют технические характеристики компьютера, установленная операционная система, тип и версия браузера, активные процессы компьютера и множество других факторов.
Влияет на результаты тестирования некоторых шаблонизаторов и версия jQuery. Я использовал 2.0.3 (последнюю на момент написания статьи).
Скачать тесты Вы можете с github. Ниже приведены результаты запуска в Chrome 28 на моей локальной машине. Все значения указаны в миллисекундах.
Были рассмотрены 16 шаблонизаторов, и проведена оценка каждого из них по нескольким критериям.
Но сегодня я хочу поделиться с Вами лишь частью своего исследования, касающейся скорости работы шиблонизаторов.
Список тестируемых шаблонизаторов
- Mustache
- JQuery Mustache
- Handlebars
- UnderscoreJS Template
- Twitter's HoganJS
- jQote2
- doT.js
- jQuery Nano (не путать с Nano.js)
- EJS
- Pure
- DustJS (форк от LinkedIn)
- Srender
- jQuery Templates
- Wayneeseguin jQuery Templates
- jTemplates
- jsRender
В список не вошли
- Tempest — не работает в современных браузерах;
- jQote1 — проигрывает во всем второй версии;
- оригинальный DustJS — уже 3 года как не поддерживается и во всем проигрывает форку от LinkedIn.
Для справедливости нужно отметить, что каркас теста и код для 7 из указанных выше шаблонизаторов написан не мной, а взят из репозитария jQote2.
Особенности тестирования
Как известно, большинство шаблонизаторов сначала компилируют шаблон, а потом позволяют на его основе многократно строить верстку по различным данным.
В тесте учитывается только время построения верстки, а компиляция шаблонов происходит до его начала.
Другой важный аспект — это сложность шаблона, ведь одни шаблонизаторы могут иметь преимущество при простой подстановке значений в шаблон, а другие при наличии в шаблоне циклов и условных операторов.
По этой причине, при тестировании присутствует возможность, оценить каждый из этих случаев, выбрав тип шаблона «Простой» или «Цикл».
Не сложно догадаться, что на результаты тестирования влияют технические характеристики компьютера, установленная операционная система, тип и версия браузера, активные процессы компьютера и множество других факторов.
Влияет на результаты тестирования некоторых шаблонизаторов и версия jQuery. Я использовал 2.0.3 (последнюю на момент написания статьи).
Результаты
Скачать тесты Вы можете с github. Ниже приведены результаты запуска в Chrome 28 на моей локальной машине. Все значения указаны в миллисекундах.
Для шаблона «Простой»
Для шаблона «Цикл»
В табличном виде
Среднее время работы (мс) | ||
---|---|---|
Шаблонизатор | Простой | Цикл |
doT.js | 11 | 12 |
jQote2 | 14 | 25 |
Dust | 15 | 22 |
Underscore | 23 | 25 |
Hogan | 14 | 22 |
Handlebars | 14 | 33 |
Pure | 32 | 50 |
Mustache | 40 | 51 |
JQuery Mustache | 39 | 47 |
jsRender | 20 | 56 |
Srender | 46 | 77 |
EJS | 41 | 77 |
jQuery Nano | 33 | 80 |
jQuery Templates | 37 | 91 |
jTemplates | 41 | 160 |
Wayneeseguin | 460 | 540 |