Pull to refresh
37
0
Дмитрий Карпич @meettya

User

Send message
LiveReload for Sublime Text 2 рабочий
1. Ставим через Package Control — LiveReload
2. Ставим расширение версии 2.0.8 на свой браузер

проверенно на FF 15 и Chrome 22 работает.
Для получения того самого типа — внутреннего свойства [[Class]] можно использовать особенность работы Object.prototype.toString и написать вот такой код
var allowedTypes = ["Object", "Undefined", "Null", "Boolean", "Number", "String"];
/**
 * @param {Mixed} x
 *
 * @return {String}
 */
function Type(x) {
    var type = Object.prototype.toString.call(x).replace(/^\[object\s|\]$/g, '');
    return ~allowedTypes.indexOf(type) && type || "Object";
}

Еще есть интересная особенность оператора new — он не может вызвать функцию у которой нет свойства prototype — все нативные функции и функции () => из ES6
new Array.prototype.slice
// TypeError: Array.prototype.slice is not a constructor

// VS

var A = function () {};

Object.getOwnPropertyDescriptor(A, "prototype");
// {"configurable":false,"enumerable":false,"value":{},"writable":true}

// Убить prototype у пользовательской функции нельзя
delete A.prototype; // false - "configurable":false

new A(); // ok
По моим подсчётам он остаёт от всех остальных. Я тестирую не в браузере, а в node.js.

Вот код бенчмарка: https://github.com/baryshev/template-benchmark.

А вот результаты на моей виртуалке с Ubuntu 12.04 и Node.js 0.8.9:

Rendering 100000 templates:

ECT
  Escaped   : 559ms
  Unescaped : 134ms
  Total     : 693ms

Eco
  Escaped   : 2625ms
  Unescaped : 491ms
  Total     : 3116ms

EJS
  Escaped   : 4621ms
  Unescaped : 2786ms
  Total     : 7407ms

Handlebars.js
  Escaped   : 521ms
  Unescaped : 275ms
  Total     : 796ms

Hogan.js
  Escaped   : 889ms
  Unescaped : 720ms
  Total     : 1609ms

Swig
  Escaped   : 2052ms
  Unescaped : 369ms
  Total     : 2421ms

Dust
  Escaped   : 553ms
  Unescaped : 363ms
  Total     : 916ms

doT
  Escaped   : 1699ms
  Unescaped : 100ms
  Total     : 1799ms

Fest
  Escaped   : 418ms
  Unescaped : 202ms
  Total     : 620ms

Jade without `with`
  Escaped   : 4134ms
  Unescaped : 3255ms
  Total     : 7389ms

Jade
  Escaped   : 13495ms
  Unescaped : 12210ms
  Total     : 25705ms


Такие вещи предпочитаю перепроверять. Кстати, шаблон doT по Вашей ссылке вообще не валиден. Это можно проверить, вставив его и данные в демо-редактор на сайте разработчика. Даже если бы он был валиден, такое сравнение не приемлемо, т.к. в doT по умолчанию отключено экранирование данных, а во всех остальных оно по умолчанию включено. Отсюда его «хвалёная» скорость. Экранирование — самая тяжёлая операция для js-шаблонизаторов и использовать её стоит с умом. Не стоит экранировать все данные подряд.
В своём тесте я сравниваю для всех шаблонизаторов скорость с экранированием и без неё.

Information

Rating
3,908-th
Location
Россия
Date of birth
Registered
Activity