![]() |
Модераторы: Vitalik |
![]() ![]() ![]() |
|
||
|
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Вот возникла проблема в выборе xml-парсера для считывания файлов подсветки.
В самой первой версии (1.0 которая), использовался xml-парсер, написанный собственноручно. Но минусами такого подхода были: - нагромождение кода в компоненте; - неудобность (сравнительно) добавления новых тегов в формат файла; - не полная поддержка стандарта xml (например, кодировки). Поэтому в версии 1.8 (текущая) было принято решение использовать сторонний xml-парсер TXmlParser. Плюсы: - код компонента изрядно разгрузился; - работать с файлом подсветки стало проще; - более полная поддержка стандарта xml (UTF-8, ISO-8859-1, Windows-1252). Минусы: - это всё-таки сторонний компонент (но легко встраивается); - компонент перестал обновляться два года назад. Совсем недавно Quadr0 предпринял попытку переписать компонент с использованием стандартного делфийского парсера TXmlDocument. Плюсами являются: - полная поддержка стандарта xml; - вроде бы более простое использование; - возможность сохранения; - обновляемость компонента вместе с Delphi. Минусы: - класс создаёт DOM-объект (минус?); - парсер вроде бы считается медленным (?). Вопрос: Как Вы думаете, какой xml-парсер лучше предпочесть для компонента и почему? Это сообщение отредактировал(а) Vitalik - 25.7.2005, 17:12 |
|||
|
||||
Quadr0 |
|
|||
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 00:49 |
|||
|
||||
Vitalik |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Позволь с тобой не согласиться! ![]() Подсветки с парсёром TXmlDocument грузятся также быстро, потому, что в новом формате все теги ключевых слов объединены в один. То есть не надо каждое из тысячи ключевых слов загружать по отдельности. (Замечу, что реально заметить скорость работы парсера в обоих случаях можно только на больших файлах, а значит, с большим количеством ключевых слов) А тегов для новых возможностей не на столько больше, чем было количество тегов ключевых слов. А именно: их несравнимо меньше! Поэтому, ИМХО, скорость работы у TXmlDocument никак не выше, чем у TXmlParser.
А это немного спорный вопрос. Несомненным преимуществом прошлого способа была возможность разместить содержимое xml-файла так, чтобы в случае необходимости его можно было удобно просматривать вручную (как текстовый файл) ![]() Замечу, что часть пользователей компонента принципиально не использует дизайнер, поэтому красивость xml-файла это немаловажный показатель. P.S. Я пока никак не проголосовал. |
||||
|
|||||
Sagara |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.7.2005 Репутация: нет Всего: нет |
Вопрос в скорости.
Медленная загрузка никому не нужна, тогда компонент просто перестанут использовать Я бы сгенерил 10 xml-файлов (по полмега) и сравнил скорости 2х парсеров. Если одинаковые - то TXmlDocument без сомнений - как намного более удобный для разработчика. ![]() Иначе TXmlParser ![]() |
|||
|
||||
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
А TXmlDocument, кстати, действительно довольно удобен в обращении!
![]() Загружаешь xml из файла/потока одной процедурой и потом работаешь с xml-документом просто как с деревом ![]() Удобно! Я даже начал склоняться ко второму варианту... ![]() |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
На сорсах в разделе Дельфи s-mike (у него кстати можно и у нас спросить) месяца 3-4 назад делал сравнительный обзор парсеров и сравнение их скоростей работы. Парсер от MS (тот который в Дельфи) на основе DOM был самый тормознутый, по моему janXML (или как-то так) - самый быстрый парсер XML с открытым исходным кодом... Я бы его брал, тем более это позволит избавиться от DOM (то есть парсер будет работать и под Linux и под Win95/NT4), завязываясь на MS парсеры мы отрезаем возможность использования win ниже 98 и не MS операционных систем. Сейчас SynEdit работает на Kylix/Linux/CLX - дык вот, наш текущий парсер не позволит работать на этих платформах.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Quadr0 |
|
|||
Unregistered |
...
Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 00:50 |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
А что трудно посмотреть результаты тестов парсеров?
Не понизилась по сравнению с чем? С тем парсером что я писал? Конечно не понизилась, но это не значит что её нельзя увеличить -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
DOM однозначно через чур громоздок для этой задачи. Всего-то нужны две операции: загрузка и выгрузка. Динамическая работа (чтение/запись) с XML вести не нужно, а следовательно древовидная структура, которую строит DOM парсер излишне и просто отнимает ресурсы. Для этой задачи лучше всего подходят SAX парсеры.
Для интересующихся: http://www.saxproject.org/event.html Конкретные реализации для Делфи: http://jeffrafter.com/sax/aelfred2/ http://saxforpascal.sourceforge.net/ -------------------- Волны гасят ветер... |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Fantasist - вот-вот, именно то что я и хотел сказать... Мало того, структура XML достаточно жёсткая, поэтому возможно ускорение парсинга привязкой к конкретной структуре...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Vitalik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Да... DOM действительно не подходит для нашей задачи...
Следующая версия компонента выйдет пока что с парсером TXmlDocument, но после этого надо будет найти ему достойную замену среди SAX-парсеров ![]() |
|||
|
||||
s-mike |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: нет Всего: 16 |
TXMLPaser я еще не смотрел (хотя по беглому взгляду на код могу предположить, что он кривоват). Но все парсеры, которые мне доводилось до этого видеть парсили документ при загрузке (впрочем, как и TXMLDocument, насколько я понимаю). Поэтому последующее обращение к узлам занимало очень малое количество времени. Я даже проводил тесты. TXMLDocument был позади всех. Причем во много раз.
Встроенный в код или сторонний парсер как раз является гарантией того, что все файлы подсветки будут между собой совместимы независимо от амбиций микрософт.
Vitalik, ты все парсеры в моем сравнении смотрел? Все они позволяют обращаться к документу, как к дереву. Но вызовы имхо более простые, чем через TXmlDocument.
Ну а зачем, если можно обойтись без, но дополнительными 50 Кб кода?
Не знал о таких. В общем, я так понимаю пора начинать новый виток тестирования парсеров. Добавлю к минусам TXmlDocument: - низкая скорость; - большой объем (причем совершенно лишний) используемой памяти. |
||||||||||
|
|||||||||||
Vitalik |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Координатор проекта Сообщений: 653 Регистрация: 8.11.2004 Где: Ukraine, Kharkov Репутация: 9 Всего: 12 |
Нет, еще не смотрел... Всё никак не решусь ![]() А надо бы...
Ага! Это было бы очень полезно! Буду тебе очень признателен! И спасибо за такое подробное описание всех минусов TXmlDocument! Ты меня окончательно убедил в необходимости выбора другого парсера для компонента! ![]() |
||||
|
|||||
s-mike |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: нет Всего: 16 |
Тоже не лучшее решение. Оказывается он не поддерживает самой распространенной кодировки - windows-1251:
Да и объем самих компонентов большой - более 500 Кб в несжатом виде. Кроме того не уверен, что event-based api будет удобнее (20 мегабайт файлов тут ведь не будет?). Кроме того SAX - это тоже COM. Пока тестов производительности не проводил, но думаю, что он все равно не подойдет для этой задачи. Это сообщение отредактировал(а) s-mike - 6.8.2005, 17:21 |
||||
|
|||||
Fantasist |
|
||||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
1) В этой цитате не указанно, что она не поддерживается. Говориться, что "поддерживаются также и другие 8-битные кодировки (такие как US-ASCII иISO-8859-1)", но нет упоминания, что это все. 2) SAX - это технология, а не конкретная реализация в этом компоненте. Вряд ли официально декларируется, что SAX не должен поддерживать кодировки кроме таких-то.
Это все детали реализации. Не нравится компонент - можно найти другой. Опять же парачка вопросов, насколько полная нужна поддержка стандарта XML? Например, кодировки, если они не поддерживаются SynEdit-ом highlighter'у не помогут. Опять же вряд ли нужны поддержки тегов СData. -------------------- Волны гасят ветер... |
||||||
|
|||||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |