- PVSM.RU - https://www.pvsm.ru -
Перелистнём несколько страниц недавнего прошлого.
16 мая 2012 года RReverser [1] во блогозаписи «Javascript BMP Parser [2]» рассказал об употреблении модуля jParser [3] для анализа двоичных данных, на движке Node.js совершаемого.
На следующий же день (17 мая 2012 года) во блогозаписи «jParser: анализ двоичных файлов работает просто [4]» я перевёл документацию по jParser, а чуть позже (22 мая 2012 года во блогозаписи «Node.js на узле Фидонета: читаем джаваскриптом заголовки эхопочты, хранимой в формате JAM [5]») поделился собственным опытом употребления этого модуля.
Прошло ≈1⅓ года…
12 сентября нынешнего (2013) года во блогозаписи «Недоволен скоростью джаваскриптов? — Подожди год-полтора, и это пройдёт! [6]» я выразил неудовольствие от скорости работы модуля, прежде мною сочинённого, и указал на один только повод для оптимизма: поступательное развитие Node.js от версии 0.6 до версии 0.10 привело к росту скорости моего кода в три раза.
А сегодня события совершили полный круг — я напрочь отказался от употребления jParser. И достигнутый результат (как неприятная, так и радостная сторона его) оказался заслуживающим внимания.
Позвольте же поделиться с вами как впечатлениями, так и исходниками.
Вы можете посмотреть на Гитхабе [7] внесённые мною правки и судить о том самостоятельно. Всюду в коде, где для jParser хватало одного свойства в объекте (например, «'MSGIDcrc': ulong»), там работа с буфером занимает две строки:
nextHeader.MSGIDcrc = _JAM.JHR.readUInt32LE(offsetJHR);
offsetJHR += 4; //ulong
И вот такою писаниною приходится заниматься для каждого, для каждого из полей объекта, считываемого из двоичных данных!
(Мой код занимается чтением заголовков фидонетовской почты, хранимой в формате JAM. Всякий, кто когда-либо читал документацию по этому формату [8], уж знает, что в таком заголовке — два десятка полей.)
Ускорение примерно на порядок!
Достигнув такого результата, уместно заодно посмотреть и на табличку «Is It Worth the Time? [18]» в комиксе XKCD №1205. Там рассказывается, например, что если Вы потратили два часа усилий (переменив некоторый код) и выиграли одну секунду во времени работы такой функции, которая станет выполняться реже пяти раз в сутки, то это время потрачено зря (потому что окупаться оно будет больше пяти лет — а после пяти лет, чего доброго, и актуальность кода окажется под вопросом).
Если скорость набора кода важнее для вас, то используйте jParser: это позволит экономить усилия.
Если скорость работы кода важнее для вас, то откажитеся от jParser: это позволит ускорить скрипт.
Для моего-то модуля ускорение на секунду при чтении заголовков даже одной эхоконференции весьма существенно, потому что на типичном узле Фидонета таких эхоконференций бывает несколько десятков, а на сколько-нибудь крупном — даже несколько сотен (пример [19]).
Прощай, jParser.
Автор: Mithgol
Источник [20]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/44056
Ссылки в тексте:
[1] RReverser: http://habrahabr.ru/users/rreverser/
[2] Javascript BMP Parser: http://habrahabr.ru/post/143985/
[3] jParser: https://github.com/vjeux/jParser
[4] jParser: анализ двоичных файлов работает просто: http://habrahabr.ru/post/144008/
[5] Node.js на узле Фидонета: читаем джаваскриптом заголовки эхопочты, хранимой в формате JAM: http://habrahabr.ru/post/144268/
[6] Недоволен скоростью джаваскриптов? — Подожди год-полтора, и это пройдёт!: http://habrahabr.ru/post/193482/
[7] посмотреть на Гитхабе: https://github.com/Mithgol/node-fidonet-jam/compare/82e6188cfa1a...a5194793221a
[8] документацию по этому формату: https://groups.google.com/forum/#!msg/fido7.ru.ftn.develop/XMCgUkozMkE/GEQ5gG9I9eIJ
[9] Travis CI: http://about.travis-ci.org/docs/user/getting-started/
[10] до правок: https://travis-ci.org/Mithgol/node-fidonet-jam/builds/11675850
[11] после правок: https://travis-ci.org/Mithgol/node-fidonet-jam/builds/11683748
[12] 6526 миллисекунд: https://travis-ci.org/Mithgol/node-fidonet-jam/jobs/11675851
[13] 296 миллисекунд: https://travis-ci.org/Mithgol/node-fidonet-jam/jobs/11683749
[14] 3682 миллисекунды: https://travis-ci.org/Mithgol/node-fidonet-jam/jobs/11675852
[15] 349 миллисекунд: https://travis-ci.org/Mithgol/node-fidonet-jam/jobs/11683750
[16] 2147 миллисекунд: https://travis-ci.org/Mithgol/node-fidonet-jam/jobs/11675853
[17] 233 миллисекунды: https://travis-ci.org/Mithgol/node-fidonet-jam/jobs/11683751
[18] Is It Worth the Time?: http://xkcd.com/1205/
[19] пример: http://ftn.su/
[20] Источник: http://habrahabr.ru/post/194852/
Нажмите здесь для печати.