More Related Content Similar to JavaScript на сервере, 1ms на трансформацию (Андрей Сумин) Similar to JavaScript на сервере, 1ms на трансформацию (Андрей Сумин) (20) JavaScript на сервере, 1ms на трансформацию (Андрей Сумин)9. XSLT
/head.xml
<title><fest:get name="title"/></title>
<fest:set name="title">Mail.ru</fest:set>
10. XSLT
/head.xml
<title><fest:get name="title"/></title>
<fest:set name="title">Mail.ru</fest:set>
/mail.xml
<fest:include src="head.xml"/>
<fest:set name="title">Почта</fest:set>
23. Структура vs функция
[ {action:"template"},
"<html>....”,
{action:"if"},
"json.value",
"<span>true</span>",
"<span>false</span>"]
30. Структура vs функция
<span> html += "<span>";
mail.ru html += "mail.ru";
</span> html += "</span>";
html += "<span>mail.ru</span>";
38. Интеграция
—С fest_log
— Perl fest_file
— Python fest_dirname
— NodeJS
39. Интеграция
—С fest_log
— Perl fest_file
— Python fest_dirname
— NodeJS
— Браузер
53. Реальные пользователи
30 часов одно ядро 2.2 ГГц Xeon
10 000 000+ хитов
1.6ms среднее время трансформации
992 422 10% между 2 и 5ms
208 464 2% между 5 и 10ms
396 49 0,4% больше 10ms
59. Почти продакшен
html += "foo"; push_string("foo");
html += rb(id); push_rb(id);
html += "bar"; push_string("bar");
64. Данные на сегодня
Размер HTML, который генерирует v8 65кб.
Время, работы v8 на запрос 1ms.
В среднем v8 требует 40MB на контекст.
74. fest:choose
<fest:choose>
<fest:when test="json.condition">…</fest:when>
<fest:when test="false">…</fest:when>
<fest:otherwise>…</fest:otherwise>
</fest:choose>
75. fest:choose
try{ condition = json.condition } catch(e) { log(e) }
If (condition){…}
else{
try{ condition = false } catch(e) { log(e) }
if (condition){}
else {} }