- ОЧЕНЬ высокая скорость (за счет полной переделки архитектуры)
- Добавлена возможность не только читать, но и записывать YAML-файлы
- Поддержка спецификаций YAML 1.1 проапгрейжена до YAML 1.2
Основной целью переделки было улучшить скорость парсинга. Чтобы не возникало потребности в биндингах к внешним библиотекам вроде libyaml. Ведь в ямле удобно хранить не только конфиги, но и переводы, которых может быть довольно много. Желающие могут скачать бенчмарк и проверить на собственных файлах:
github.com/dervus/js-yaml-benchmark
С образцами на 200К (и вырезанными комментариями) на мелком macbook air получилась скорость парсинга 2мб/сек. Это не предел, просто быстрее пока не надо :).
Самое большое ускорении было достигнуто за счет переделки архитектуры. Изначально это был порт PyYAML, который не столько быстрый, сколько референсный. Поэтому там была многопроходная обработка, со всякими странными штуками вроде событий. В новом варианте парсинг делается в 1 проход.
Вторая часть оптимизаций была связана с v8. Если кратко, она заключается в том, чтобы не использовать this и не переприсваивать одной переменной разные типы. Там еще есть что улучшать, но получилось и так быстро. А поскольку лишнего времени не бывает, пока остановились на том, что есть. Всем, кто интересуется нюансами, очень рекомендую лекцию Вячеслава Егорова http://youtu.be/tCG0aPNvkTs о работе оптимизатора и инлайновых кешах v8.
ссылка на оригинал статьи http://habrahabr.ru/post/168821/
Добавить комментарий