SlideShare a Scribd company logo
1 of 81
JavaScript на сервере,
1ms на трансформацию

   Андрей Сумин, Mail.ru
Зачем?
Зачем?
— Пишут одни, а используют другие
Зачем?
— Пишут одни, а используют другие
— JavaScript специалисты
Зачем?
— Пишут одни, а используют другие
— JavaScript специалисты
— Шаблонизация на клиенте
Что нужно
XSLT JS
XSLT JS
XSLT
/head.xml
   <title><fest:get name="title"/></title>
   <fest:set name="title">Mail.ru</fest:set>
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>
JavaScript
<fest:script>
   var text = "mail.ru"
</fest:script>
<fest:value>text</fest:value>
JavaScript
<fest:script>
   var text = "mail.ru"
</fest:script>
<fest:value>text</fest:value>

mail.ru
XML
XML
— IDE
XML
— IDE
— Валидация из коробки
XML
— IDE
— Валидация из коробки
— Name spaces
XML
— IDE
— Валидация из коробки
— Name spaces
— SAX, XSLT, XSD, DTD …
XML
— IDE
— Валидация из коробки
— Name spaces
— SAX, XSLT, XSD, DTD ...
— XML to XML
Реализация
Ковбойство
Структура
    vs
Функция
Структура vs функция
[ {action:"template"},
  "<html>...",
  {action:"value"},
  "json.value"]
Структура vs функция
[ {action:"template"},
  "<html>....”,
  {action:"if"},
  "json.value",
  "<span>true</span>",
  "<span>false</span>"]
Структура vs функция
function template(json){
   var html = "";
   html += "<html>…";
   html += json.value;
   return html;
}
Структура vs функция
200ms
3ms
Структура vs функция
fest:forearch   for(i = 0; i < l; i++) {}
fest:if         if(value) {}
fest:choose     if(value) {} else {}

fest:set        set[name] = function
                set[name] = function
Структура vs функция
<span>        html += "<span>";
    mail.ru   html += "mail.ru";
</span>       html += "</span>";
Структура vs функция
<span>        html += "<span>";
    mail.ru   html += "mail.ru";
</span>       html += "</span>";

html += "<span>mail.ru</span>";
30%
Безопасность
try catch
try catch
 escape
Безопасность
<fest:value>json.name</fest:value>
try {
    html += escape(json.name);
} catch(e) {
    log(e.message);
}
Интеграция
Интеграция
—С
— Perl
— Python
— NodeJS
Интеграция
—С         fest_log
— Perl     fest_file
— Python   fest_dirname
— NodeJS
Интеграция
—С          fest_log
— Perl      fest_file
— Python    fest_dirname
— NodeJS

— Браузер
Реальные
пользователи
4ms
Реальные пользователи
msg_length = 5
msg_1_title = "letter"
msg_1_Unread = 1
Реальные пользователи
msg_length = 5
msg_1_title = "letter"
msg_1_Unread = 1

msg = [ {title: "letter", Unread: true} ]
Реальные пользователи
hash -> v8 api -> JavaScript
hash -> string -> JSON.parse -> JavaScript
hash -> string -> compile -> Javascript
Реальные пользователи
Local<String> script = String::new(
   "template("{value:'mail.ru'}")"
);
Local<Script> cs = Script::Compile( script );
Local<Value> result = cs->Run();
2 + 4 = 6ms
67%
NodeJS
NodeJS 4ms
Реальные пользователи
msg_length = 5
msg_1_title = "letter"
msg_1_Unread = 1
Реальные пользователи
msg_length = 5
msg_1_title = "letter"
msg_1_Unread = 1


get('msg_' + i + '_title')
3ms
Реальные пользователи
30 часов одно ядро 2.2 ГГц Xeon
10 000 000+ хитов
1.6ms среднее время трансформации
992 422 10% между       2 и 5ms
208 464 2% между        5 и 10ms
396 49 0,4% больше 10ms
Продакшен,
  главная
50% x3
65+100=165кб
RB lite v8 lite
Почти продакшен
html += "foo";
html += rb(id);
html += "bar";
Почти продакшен
html += "foo";    push_string("foo");
html += rb(id);   push_rb(id);
html += "bar";    push_string("bar");
50% x2
440 000 000
440 000 000
110 000 000
Данные на февраль 2012 года
Размер HTML, который генерирует v8 65кб.

Время, работы v8 на запрос 1ms.

В среднем v8 требует 40MB на контекст.
Пол года спустя
Ни одной утечки памяти

Ни одного падения v8

Touch главная

Touch почта
Проблемы v8
http://sysoev.ru/prog/v8.html
Полезные ссылки
— http://code.google.com/p/v8/
— https://github.com/mailru/fest
— http://sysoev.ru/prog/v8.html

Андрей Сумин, andrewsumin@corp.mail.ru
Возможности
    fest
fest:value
<fest:value>json.name</fest:value>
try {
    html += escape(json.name);
} catch(e) {
    log(e.message);
}
fest:value
<fest:value output="text">json.name</fest:value>
try {
    html += json.name;
} catch(e) {
    log(e.message);
}
fest:value
<fest:value safe="true">json.name</fest:value>

html += json.name;
fest:if
<fest:if test="json.condition">…</fest:if>

try{ condition = json.condition } catch(e) { log(e) }

If (condition){ … }
fest:choose
<fest:choose>
   <fest:when test="json.condition">…</fest:when>
   <fest:when test="false">…</fest:when>
   <fest:otherwise>…</fest:otherwise>
</fest:choose>
fest:choose
try{ condition = json.condition } catch(e) { log(e) }
If (condition){…}
else{
    try{ condition = false } catch(e) { log(e) }
    if (condition){}
    else {} }
fest:foreach
<fest:foreach iterate="list" index="i"></fest:foreach>
var i;
try{ foreach = list } catch(e) { foreach=[]; log(e) }
var l = list.length;
for(i = 0; i < l ; i++) { … }
fest:for
<fest:for iterate="hash" index="i"></fest:for>
var i;
try{ for = hash } catch(e) { for={}; log(e) }
for(i in for) { … }
fest:space
<fest:space/>

html += " ";
fest:script
<fest:script> … </fest:script>

try{ … } catch (e) { log(e) }
fest:insert
<script>
   <fest:insert src="script.js"/>
</script>

html += "<script>…</script>";

More Related Content

What's hot

"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Встроенная система профилирования в клиенте «Аллодов Онлайн»
Встроенная система профилирования в клиенте «Аллодов Онлайн»Встроенная система профилирования в клиенте «Аллодов Онлайн»
Встроенная система профилирования в клиенте «Аллодов Онлайн»Андрей Бростовский
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemKazHackStan
 
Битва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовБитва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовindex.art
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsrit2010
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...KazHackStan
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1barcamplv09
 
Drupal 6 performance
Drupal 6 performanceDrupal 6 performance
Drupal 6 performanceAnton Ivanov
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...KazHackStan
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplantit-people
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Yandex
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Provectus
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 

What's hot (20)

Perl in practice
Perl in practicePerl in practice
Perl in practice
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Встроенная система профилирования в клиенте «Аллодов Онлайн»
Встроенная система профилирования в клиенте «Аллодов Онлайн»Встроенная система профилирования в клиенте «Аллодов Онлайн»
Встроенная система профилирования в клиенте «Аллодов Онлайн»
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
 
KazHackStan 2017 | Tracking
KazHackStan 2017 | TrackingKazHackStan 2017 | Tracking
KazHackStan 2017 | Tracking
 
Битва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтовБитва за миллисекунды: практика ускорения веб сайтов
Битва за миллисекунды: практика ускорения веб сайтов
 
Web sockets
Web socketsWeb sockets
Web sockets
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
Иван Чалыкин (Россия), Digital Security. Легальный SOP Bypass. Проблемы внедр...
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1
 
Drupal 6 performance
Drupal 6 performanceDrupal 6 performance
Drupal 6 performance
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
Андрей Абакумов (Россия). Yandex.ru. Соавтор: Эльдар Заитов. Автоматизация ск...
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"
 
REST
RESTREST
REST
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"
 
HTTP протокол
HTTP протоколHTTP протокол
HTTP протокол
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 

Similar to Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference

ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеровMedia Gorod
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Web весна 2013 лекция 8
Web весна 2013 лекция 8Web весна 2013 лекция 8
Web весна 2013 лекция 8Technopark
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Igor Khotin - Domain Specific Languages
Igor Khotin - Domain Specific LanguagesIgor Khotin - Domain Specific Languages
Igor Khotin - Domain Specific LanguagesIgor Khotin
 
Django шахрай. версия 4
Django шахрай. версия 4Django шахрай. версия 4
Django шахрай. версия 4smikler
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10Technopark
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
Семинар-практикум по Drupal
Семинар-практикум по DrupalСеминар-практикум по Drupal
Семинар-практикум по Drupalit-people
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 

Similar to Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference (20)

ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
Js Http Request дмитрий котеров
Js Http Request   дмитрий котеровJs Http Request   дмитрий котеров
Js Http Request дмитрий котеров
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
бегун
бегунбегун
бегун
 
Web весна 2013 лекция 8
Web весна 2013 лекция 8Web весна 2013 лекция 8
Web весна 2013 лекция 8
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Igor Khotin - Domain Specific Languages
Igor Khotin - Domain Specific LanguagesIgor Khotin - Domain Specific Languages
Igor Khotin - Domain Specific Languages
 
Django шахрай. версия 4
Django шахрай. версия 4Django шахрай. версия 4
Django шахрай. версия 4
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
176023
176023176023
176023
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Web весна 2013 лекция 10
Web весна 2013 лекция 10Web весна 2013 лекция 10
Web весна 2013 лекция 10
 
бегун
бегунбегун
бегун
 
Введение в Django
Введение в DjangoВведение в Django
Введение в Django
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
L10N
L10NL10N
L10N
 
Internet Explorer 8
Internet Explorer 8Internet Explorer 8
Internet Explorer 8
 
Семинар-практикум по Drupal
Семинар-практикум по DrupalСеминар-практикум по Drupal
Семинар-практикум по Drupal
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 

More from EYevseyeva

Программа развития менеджерских компетенций IT-руководителей QIWI
Программа развития менеджерских компетенций IT-руководителей QIWIПрограмма развития менеджерских компетенций IT-руководителей QIWI
Программа развития менеджерских компетенций IT-руководителей QIWIEYevseyeva
 
Образовательный проект как способ подготовки молодых специалистов
Образовательный проект как способ подготовки молодых специалистовОбразовательный проект как способ подготовки молодых специалистов
Образовательный проект как способ подготовки молодых специалистовEYevseyeva
 
Чему и как учить IT специалистов?
Чему и как учить IT специалистов?Чему и как учить IT специалистов?
Чему и как учить IT специалистов?EYevseyeva
 
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceВыступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceEYevseyeva
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
Артем Кумпель, Кому лучше работается?
Артем Кумпель, Кому лучше работается?Артем Кумпель, Кому лучше работается?
Артем Кумпель, Кому лучше работается?EYevseyeva
 
EMC2, Владимир Суворов
EMC2, Владимир СуворовEMC2, Владимир Суворов
EMC2, Владимир СуворовEYevseyeva
 
LiveLournal, Михаил Вавилов
LiveLournal, Михаил ВавиловLiveLournal, Михаил Вавилов
LiveLournal, Михаил ВавиловEYevseyeva
 
Фотострана, Дмитрий Смирнов
Фотострана, Дмитрий СмирновФотострана, Дмитрий Смирнов
Фотострана, Дмитрий СмирновEYevseyeva
 
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей ПаньгинПроект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей ПаньгинEYevseyeva
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
 

More from EYevseyeva (11)

Программа развития менеджерских компетенций IT-руководителей QIWI
Программа развития менеджерских компетенций IT-руководителей QIWIПрограмма развития менеджерских компетенций IT-руководителей QIWI
Программа развития менеджерских компетенций IT-руководителей QIWI
 
Образовательный проект как способ подготовки молодых специалистов
Образовательный проект как способ подготовки молодых специалистовОбразовательный проект как способ подготовки молодых специалистов
Образовательный проект как способ подготовки молодых специалистов
 
Чему и как учить IT специалистов?
Чему и как учить IT специалистов?Чему и как учить IT специалистов?
Чему и как учить IT специалистов?
 
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance ConferenceВыступление Юрия Насретдинова, Badoo, на High Performance Conference
Выступление Юрия Насретдинова, Badoo, на High Performance Conference
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Артем Кумпель, Кому лучше работается?
Артем Кумпель, Кому лучше работается?Артем Кумпель, Кому лучше работается?
Артем Кумпель, Кому лучше работается?
 
EMC2, Владимир Суворов
EMC2, Владимир СуворовEMC2, Владимир Суворов
EMC2, Владимир Суворов
 
LiveLournal, Михаил Вавилов
LiveLournal, Михаил ВавиловLiveLournal, Михаил Вавилов
LiveLournal, Михаил Вавилов
 
Фотострана, Дмитрий Смирнов
Фотострана, Дмитрий СмирновФотострана, Дмитрий Смирнов
Фотострана, Дмитрий Смирнов
 
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей ПаньгинПроект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
 

Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference

Editor's Notes

  1. Зачем?
  2. — Пишут одни, а используют другие
  3. — Пишут одни, а используют другие — JavaScript специалисты
  4. — Пишут одни, а используют другие — JavaScript специалисты — Шаблонизация на клиенте
  5. Что нужно
  6. XSLT
  7. XSLT JS
  8. XSLT /head.xml &lt;title&gt;&lt; fest:get name=&quot; title &quot;/&gt;&lt;/title&gt; &lt; fest:set name=&quot; title &quot;&gt;Mail.ru&lt;/fest:set&gt;
  9. XSLT /head.xml &lt;title&gt;&lt; fest:get name=&quot; title &quot;/&gt;&lt;/title&gt; &lt; fest:set name=&quot; title &quot;&gt;Mail.ru&lt;/fest:set&gt; /mail.xml &lt;fest:include src=&quot; head.xml &quot;/&gt; &lt; fest:set name=&quot; title &quot;&gt;Почта&lt;/fest:set&gt;
  10. JavaScript &lt;fest:script&gt; var text = &quot; mail.ru &quot; &lt;/fest:script&gt; &lt;fest:value&gt; text &lt;/fest:value&gt;
  11. JavaScript &lt;fest:script&gt; var text = &quot; mail.ru &quot; &lt;/fest:script&gt; &lt;fest:value&gt; text &lt;/fest:value&gt; mail.ru
  12. XML
  13. — IDE
  14. — IDE — Валидация из коробки
  15. — IDE — Валидация из коробки — Name spaces
  16. — IDE — Валидация из коробки — Name spaces — SAX, XSLT, XSD, DTD …
  17. — IDE — Валидация из коробки — Name spaces — SAX, XSLT, XSD, DTD ... — XML to XML
  18. Реализация
  19. Картинка про ковбоев
  20. Структура vs Функция
  21. [ {action:&quot;template&quot;}, &quot;&lt;html&gt;...&quot;, {action:&quot;value&quot;}, &quot;json.value&quot;]
  22. [ {action:&quot;template&quot;}, &quot;&lt;html&gt;....”, {action:&quot; if &quot;}, &quot; json.value &quot;, &quot; &lt;span&gt;true&lt;/span&gt; &quot;, &quot; &lt;span&gt;false&lt;/span&gt; &quot;]
  23. function template(json){ var html = &quot;&quot;; html += &quot;&lt;html&gt;…&quot;; html += json.value; return html; }
  24. Картинка со списком писем
  25. 200 ms
  26. 3 ms
  27. fest:forearch for(i = 0; i &lt; l; i++) {} fest:if if(value) {} fest:choose if(value) {} else {} fest:set set[name] = function set[name] = function
  28. &lt;span&gt; html += &quot;&lt;span&gt;&quot;; mail.ru html += &quot;mail.ru&quot;; &lt;/span&gt; html += &quot;&lt;/span&gt;&quot;;
  29. &lt;span&gt; html += &quot;&lt;span&gt;&quot;; mail.ru html += &quot;mail.ru&quot;; &lt;/span&gt; html += &quot;&lt;/span&gt;&quot;; html += &quot;&lt;span&gt;mail.ru&lt;/span&gt;&quot;;
  30. 30%
  31. Безопасность
  32. try catch
  33. try catch escape
  34. &lt;fest:value&gt; json.name &lt;/fest:value&gt; try { html += escape( json.name ); } catch(e) { log(e.message) ; }
  35. Интеграция
  36. — С — Perl — Python — NodeJS
  37. — С fest_log — Perl fest_file — Python fest_dirname — NodeJS
  38. — С fest_log — Perl fest_file — Python fest_dirname — NodeJS — Браузер
  39. Реальные пользователи
  40. 4 ms
  41. msg_length = 5 msg_1_title = &quot;letter&quot; msg_1_Unread = 1
  42. msg_length = 5 msg_1_title = &quot;letter&quot; msg_1_Unread = 1 msg = [ {title: &quot;letter&quot;, Unread: true} ]
  43. hash -&gt; v8 api -&gt; JavaScript hash -&gt; string -&gt; JSON.parse -&gt; JavaScript hash -&gt; string -&gt; compile -&gt; Javascript
  44. Local&lt;String&gt; script = String::new( &quot;template(\\&quot;{value:&apos;mail.ru&apos;}\\&quot;)&quot; ); Local&lt;Script&gt; cs = Script::Compile( script ); Local&lt;Value&gt; result = cs-&gt;Run();
  45. 2 + 4 = 6ms
  46. 67 %
  47. NodeJS
  48. Картинка про 004 и 006
  49. msg_length = 5 msg_1_title = &quot;letter&quot; msg_1_Unread = 1
  50. msg_length = 5 msg_1_title = &quot;letter&quot; msg_1_Unread = 1 get(&apos;msg_&apos; + i + &apos;_title&apos;)
  51. Рисунок про 004 и 003
  52. 30 часов одно ядро 2.2 ГГц Xeon 10 000 000+ хитов 1.6ms среднее время трансформации 992 422 10% между 2 и 5ms 208 464 2% между 5 и 10ms 396 49 0,4% больше 10ms
  53. Продакшен, главная
  54. 50% x3
  55. 65+100=165кб
  56. RB lite v8 lite
  57. html += &quot;foo&quot;; html += rb(id); html += &quot;bar&quot;;
  58. html += &quot;foo&quot;; push_string(&quot;foo&quot;); html += rb(id); push_rb(id); html += &quot;bar&quot;; push_string(&quot;bar&quot;);
  59. 50% x2
  60. 440 000 000
  61. 440 000 000 110 000 000
  62. Графики с rss и la
  63. Данные на февраль 2012 года Размер HTML, который генерирует v8 65кб . Время, работы v8 на запрос 1ms . В среднем v8 требует 40MB на контекст.
  64. Пол года спустя Ни одной утечки памяти Ни одного падения v8 Touch главная Touch почта
  65. Проблемы v8
  66. http://sysoev.ru/prog/v8.html
  67. График утечек памяти
  68. — http://code.google.com/p/v8/ — https://github.com/mailru/fest — http://sysoev.ru/prog/v8.html Андрей Сумин, [email_address]