16 мая 2012 года RReverser во блогозаписи «Javascript BMP Parser» рассказал об употреблении
На следующий же день (17 мая 2012 года) во блогозаписи «jParser: анализ двоичных файлов работает просто» я перевёл документацию по jParser, а чуть позже (22 мая 2012 года во блогозаписи «Node.js на узле Фидонета: читаем джаваскриптом заголовки эхопочты, хранимой в формате JAM») поделился собственным опытом употребления этого модуля.
Прошло примерно 1⅓ года.
12 сентября нынешнего (2013) года во блогозаписи «Недоволен скоростью
А сегодня события совершили полный круг — я напрочь отказался от употребления jParser. И достигнутый результат (как неприятная, так и радостная сторона его) оказался заслуживающим внимания.
Позвольте же поделиться с вами как впечатлениями, так и исходниками.
Неприятная сторона вот какова: отказ от jParser в пользу работы напрямую с буферами
nextHeader.MSGIDcrc = _JAM.JHR.readUInt32LE(offsetJHR); offsetJHR += 4; //ulong
И вот такою писаниною приходится заниматься для каждого, для каждого из полей объекта, считываемого из двоичных данных!
(Мой код занимается чтением заголовков фидонетовской почты, хранимой в формате JAM. Всякий,
Радостная же новость заключается в том, что отказ от jParser существенно ускоряет работу скрипта. Сравнив при помощи сервиса Travis CI время работы теста до правок, мною внесённых,
- на Node.js
версии 0.6 тест шёл6526 миллисекунд, а после изменений кода проходитза 296 миллисекунд;
- на Node.js
версии 0.8 тест шёл3682 миллисекунды, а после изменений кода проходитза 349 миллисекунд;
- на Node.js
версии 0.10 тест шёл2147 миллисекунд, а после изменений кода проходитза 233 миллисекунды.
Ускорение примерно на порядок!
Достигнув такого результата, уместно заодно посмотреть и на табличку «Is It Worth the Time?» в комиксе XKCD №1205. Там рассказывается, например, что если Вы потратили два часа усилий (переменяя некоторый код) и выиграли одну секунду во времени работы такой функции, которая станет выполняться реже пяти раз в сутки, то это время потрачено зря (потому что окупаться оно будет больше пяти лет — а после пяти лет, чего доброго, и актуальность кода окажется под вопросом).
Если скорость набора кода важнее, то используйте jParser: это позволит экономить усилия.
Если скорость работы кода важнее, то откажитеся от jParser: это позволит ускорить скрипт.
Для моего-то модуля ускорение на секунду при чтении заголовков даже одной эхоконференции весьма существенно, потому что на типичном узле Фидонета таких эхоконференций бывает несколько десятков.
Прощай, jParser.
ссылка на оригинал статьи http://habrahabr.ru/post/194852/
Добавить комментарий