Exomler - быстрый XML-парсер

185 views
Skip to first unread message

Сергій Костюшкін

unread,
Aug 16, 2013, 4:16:56 PM8/16/13
to
Я форкнул XML-парсер Макса Лапшина работающий на бинарниках и продолжил его разработку.

Получается неплохо. 
По результатам бенчмарков парсер обогнал родителя и всех конкурентов написаных на чистом erlang, как по потреблению памяти так и по скорости работы.

В планах:
  • функции по быстрому доступу к нужному элементу/атрибуту
  • SAX-парсер

Сергей Прохоров

unread,
Aug 17, 2013, 7:23:37 AM8/17/13
to erlang-i...@googlegroups.com
mochiweb_html видели https://github.com/mochi/mochiweb/blob/master/src/mochiweb_html.erl ?
У меня на нём (с парой патчей) в продакшне довольно нагруженный веб-паук работает.
Для быстрого доступа к нужному элементу / аттрибуту не надо ничего изобретать пожалуйста! Есть реализация XPath именно для такого формата дерева как у вас и у mochiweb

Ну и буду рад, если добавите ваш парсер в бенчмарк https://github.com/seriyps/html-parsers-benchmark

пятница, 16 августа 2013 г., 17:17:36 UTC+4 пользователь Сергій Костюшкін написал:

Сергій Костюшкін

unread,
Aug 18, 2013, 6:28:35 PM8/18/13
to
Видел. Оба парсера не поддерживают спицификацию XML на 100%, и  соответсвенно созданы для несколько разных задач.
 
Для быстрого доступа к нужному элементу / аттрибуту не надо ничего изобретать пожалуйста! Есть реализация XPath именно для такого формата дерева как у вас и у mochiweb

XPath есть не только там. Тем не менее, вероятнее всего я откажусь от него, потому что я делаю быстрый парсер. Вы же не обидетесь на меня за это? )
 
Ну и буду рад, если добавите ваш парсер в бенчмарк https://github.com/seriyps/html-parsers-benchmark

На досуге добавлю.
 

Сергій Костюшкін

unread,
Aug 19, 2013, 5:11:55 AM8/19/13
to erlang-i...@googlegroups.com
Добавил mochiweb_html в свой бенчмарк, а результаты замеров в README exomler-а.


Понеділок, 19 серпня 2013 р. 00:20:34 UTC+3 користувач Сергій Костюшкін написав:

Видел. Оба парсера не поддерживают спицификацию XML на 100%, и  соответсвенно созданы для несколько разных задач.
 
Для быстрого доступа к нужному элементу / аттрибуту не надо ничего изобретать пожалуйста! Есть реализация XPath именно для такого формата дерева как у вас и у mochiweb

XPath есть не только там. Тем не менее, вероятнее всего я откажусь от него, потому что я делаю быстрый парсер. Вы же не обидетесь на меня за это? )
 
Ну и буду рад, если добавите ваш парсер в бенчмарк https://github.com/seriyps/html-parsers-benchmark

На досуге добавлю.
 

Сергій Костюшкін

unread,
Aug 19, 2013, 5:30:52 PM8/19/13
to
Кстати есть еще несколько интересных моментов о которых я забыл упомянуть:

1. Exomler в отличие от parsexml не будет падать на валидных XML-ках, и умеет делать unescape.
2. Exomler по наследству от parsexml получил очень маленькуя кодовою базу, и поэтому код обеих парсеров можно использовать как пример для обучения.


Понеділок, 19 серпня 2013 р. 12:11:55 UTC+3 користувач Сергій Костюшкін написав:

Сергій Костюшкін

unread,
Aug 19, 2013, 6:46:08 PM8/19/13
to erlang-i...@googlegroups.com
Ну и буду рад, если добавите ваш парсер в бенчмарк https://github.com/seriyps/html-parsers-benchmark

Отправил pull-request. 
Но учтите что на сегодня это все же XML-парсер, поддержка нестрогого html хотя и планируется но будет добавлена только после того как будет написан SAX-парсер для XML.

Сергей Прохоров

unread,
Aug 19, 2013, 7:38:42 PM8/19/13
to erlang-i...@googlegroups.com
Спасибо.
Ваш патч добавил. На выходных померяю.
Насчет скорости XPath в какой то степени согласен (там перед непосредственно выполнением XPath всё DOM дерево рекурсивно обходится и строится как бы индекс, который необходим для некоторых осей, но по  факту редко используется). Парсер строки XPath, если верить профайлеру, тоже довольно медленно работал, я распарсенный XPath запрос кешировал в process dictionary.
Но сам по себе XPath с вполне приемлемой скоростью работает.
А вы какой способ доступа хотите использовать?

Насчёт SAX, просто для информации, лексер mochiweb_xpath:tokens() можно использовать в качестве подобия SAX парсера - он генерирует поток токенов tag_start, text, pi, comment tag_end... Единственный минус - на выходе список сразу всех токенов, а не вызовы callback модуля.

вторник, 20 августа 2013 г., 2:46:08 UTC+4 пользователь Сергій Костюшкін написал:

Сергій Костюшкін

unread,
Aug 20, 2013, 2:15:38 PM8/20/13
to erlang-i...@googlegroups.com
А вы какой способ доступа хотите использовать?

Пока ничего конкретного, буду выбирать на основании эксперементов.
 
Насчёт SAX, просто для информации, лексер mochiweb_xpath:tokens() можно использовать в качестве подобия SAX парсера - он генерирует поток токенов tag_start, text, pi, comment tag_end... Единственный минус - на выходе список сразу всех токенов, а не вызовы callback модуля.

Спасибо. Перед реализацией буду просматривать все существующие реализации, на эту тоже посмотрю.
Reply all
Reply to author
Forward
0 new messages