Layout Engine #2
От: adontz Грузия http://adontz.wordpress.com/
Дата: 28.04.10 23:31
Оценка: 23 (3)
Нарисовались набросок архитектуры и план работ

Особенности архитектуры:
  • DOM основан на XmlElement и может использоваться везде вместо XML, например в XML сериализации (такой план).
  • CSS поддерживает не только CSS селекторы, но и XPath.
  • В качестве скриптового движка будет использоваться Jint.
  • CSS Rule это два скомпилированных на лету DynamicMethod-а. Первый — проверяет условия, второй — модифицирует DOM. В мобильной версии (когда руки дойдут), будет два Jint-метода, если в .Net CF так и не появится компилятор.

    Особенности плана работ:
  • Полезность проекта на любой стадии разработки приоритетна. После третьей стадии проект должен стать конкурентом HtmlAgilityPack.
  • Потенциальная возможность параллельной разработки зависимых модулей.
  • MONO поддерживать собираемся.

    В данный момент мы заняты тем что:
  • Настраиваем рабочее окружение. Пока остановили выбор на VS2010 (C#/.Net 4.0), RedMine, Mercurial, xUnit (TestDriven.Net).
  • Пишем первый набросок парсера HTML, читаем спецификации. Умнеем.
  • По мере возможности, стандартизируем классы касающиеся HTML DOM и CSS Rules.

    Ну и если кто-то ещё захочет участвовать, ничего кроме радости это не вызовет

    Data Flow


    Development Stages

  • A journey of a thousand miles must begin with a single step © Lau Tsu
    Re: Layout Engine #2
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.04.10 12:50
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>
  • DOM основан на XmlElement и может использоваться везде вместо XML, например в XML сериализации (такой план).

    Почему не XElement?

    A>
  • CSS Rule это два скомпилированных на лету DynamicMethod-а.

    Компиляция должна быть опциональной, иначе на ряде сценариев получишь немаленькие тормоза.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
  • AVK Blog
    Re[2]: Layout Engine #2
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 29.04.10 16:13
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    A>>
  • DOM основан на XmlElement и может использоваться везде вместо XML, например в XML сериализации (такой план).
    AVK>Почему не XElement?

    А в чём плюсы по сравнению с XmlElement исходя из сценариаев использования?

    A>>
  • CSS Rule это два скомпилированных на лету DynamicMethod-а.
    AVK>Компиляция должна быть опциональной, иначе на ряде сценариев получишь немаленькие тормоза.

    Вариант с Jint-скриптом я описал, а без результатов профайлинга оптимизировать нет смысла.
  • A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[3]: Layout Engine #2
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 30.04.10 05:46
    Оценка: +1
    Здравствуйте, adontz, Вы писали:

    A>А в чём плюсы по сравнению с XmlElement исходя из сценариаев использования?


    Легче, удобнее, лучше продуман интерфейс.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[4]: Layout Engine #2
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 30.04.10 12:03
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    A>>А в чём плюсы по сравнению с XmlElement исходя из сценариаев использования?

    AVK>Легче, удобнее, лучше продуман интерфейс.

    Это не сценарий использования. Концертация в объекты и обратно XML сериализацией — сценарий, а то что ты описал личное мнение. Я отдаю предпочтение не абстрактной крутости, а удобству интеграции.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[5]: Layout Engine #2
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 30.04.10 13:54
    Оценка:
    Здравствуйте, adontz, Вы писали:

    AVK>>Легче, удобнее, лучше продуман интерфейс.


    A>Это не сценарий использования.


    Естественно не сценарий.

    A> Концертация в объекты и обратно XML сериализацией — сценарий, а то что ты описал личное мнение. Я отдаю предпочтение не абстрактной крутости, а удобству интеграции.


    Ну вот и поясни тогда, чем XmlElement лучше XElement. На конкретных примерах.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[6]: Layout Engine #2
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 30.04.10 16:08
    Оценка: :)
    Здравствуйте, AndrewVK, Вы писали:

    A>> Концертация в объекты и обратно XML сериализацией — сценарий, а то что ты описал личное мнение. Я отдаю предпочтение не абстрактной крутости, а удобству интеграции.

    AVK>Ну вот и поясни тогда, чем XmlElement лучше XElement. На конкретных примерах.

    XmlElement, наследник XmlNode, можно передать в конструктор XmlNodeReader. Следовательно, для конвертации из DOM в дерево типизированных объектов и обратно, из объектов в DOM, можно использовать XmlSerializer. Кроме того, хотя XmlElement и класс, он фактически не содержит непереопределяемых реализаций и не навязывает их.

    XElement/XNode напротив содержит много непереопределяемых реализаций. Простая задача, предоставление механизма оповещения об изменении атрибутов, не представляется простой в реализации.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Layout Engine #2
    От: fddima  
    Дата: 30.04.10 16:55
    Оценка: 36 (1)
    Здравствуйте, adontz, Вы писали:

    XmlNodeReader — есть XmlReader, реализовать аналогичный, который обходит ту или иную реализацию дерева вообще не проблема.

    Если смотреть на XmlDocument vs XDocument и прочие, то XmlDocument безусловно много ближе по своей сути, т.к. он реализует W3C DOM Level 2 Core. Например XmlAttribute есть XmlNode, в то время как XAttribute — нет. За одно это этого в принципе достаточно, что бы к чертям выкинуть XDocument.

    Впрочем, лично я пока ни к одному из них не склонился. Работы хватает пока без этого.
    Re[7]: Layout Engine #2
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 30.04.10 19:01
    Оценка: +1
    Здравствуйте, adontz, Вы писали:

    A>XmlElement, наследник XmlNode, можно передать в конструктор XmlNodeReader.


    Аналогичный ридер есть и для XElement

    A>Кроме того, хотя XmlElement и класс, он фактически не содержит непереопределяемых реализаций и не навязывает их.


    XElement намного более легковесен.

    A>XElement/XNode напротив содержит много непереопределяемых реализаций.


    Ты что то путаешь.

    P.S. Написание собственного XmlReader для собственной структуры — совсем несложная задача.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[8]: Layout Engine #2
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 30.04.10 19:04
    Оценка:
    Здравствуйте, fddima, Вы писали:

    F>Если смотреть на XmlDocument vs XDocument и прочие, то XmlDocument безусловно много ближе по своей сути


    Ближе к чему?

    F>, т.к. он реализует W3C DOM Level 2 Core


    Который сам по себе — уродство то еще.

    F>Например XmlAttribute есть XmlNode, в то время как XAttribute — нет.


    И чем это плохо?
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[8]: Layout Engine #2
    От: fddima  
    Дата: 30.04.10 19:10
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    A>>XElement/XNode напротив содержит много непереопределяемых реализаций.

    AVK>Ты что то путаешь.
    XAttribute.Value — зачем далеко ходить.
    Re[9]: Layout Engine #2
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 30.04.10 19:26
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    F>>, т.к. он реализует W3C DOM Level 2 Core

    AVK>Который сам по себе — уродство то еще.

    Но скриптам надо отдавать именно его, как ни крути
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[8]: Layout Engine #2
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 30.04.10 19:26
    Оценка:
    Здравствуйте, fddima, Вы писали:

    F>XmlDocument безусловно много ближе по своей сути, т.к. он реализует W3C DOM Level 2 Core.


    О, а я даже не обратил внимания. Очень здорово.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[9]: Layout Engine #2
    От: fddima  
    Дата: 30.04.10 19:34
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    F>>Если смотреть на XmlDocument vs XDocument и прочие, то XmlDocument безусловно много ближе по своей сути

    AVK>Ближе к чему?
    К W3C DOM.

    F>>, т.к. он реализует W3C DOM Level 2 Core

    AVK>Который сам по себе — уродство то еще.
    Вопрос спорный. Каким бы он не был — его интерфейс является стандартным и должен быть реализован.

    F>>Например XmlAttribute есть XmlNode, в то время как XAttribute — нет.

    AVK>И чем это плохо?
    Тем, что аттрибуты в W3C DOM устроены не так.
    Re[9]: Layout Engine #2
    От: fddima  
    Дата: 30.04.10 19:36
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>О, а я даже не обратил внимания. Очень здорово.

    Имеет смысл ориентироваться на Level 3 — сходу впишется он или нет — пока что тоже не знаю.
    Re[8]: Layout Engine #2
    От: vdimas Россия  
    Дата: 01.05.10 11:42
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>P.S. Написание собственного XmlReader для собственной структуры — совсем несложная задача.


    Ну, мы для HTML писали свой reader и пользовались своими "совсем легковесными объектами" для формирования структуры. Легковесность еще в том, что известные таги и аттрибуты в этой модели представлены кодами enum — гораздо быстрее идет оперирование. И там действительно ничего сложного, разработка всей модели — 3 дня максимум.
    Re[9]: Layout Engine #2
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 01.05.10 18:53
    Оценка:
    Здравствуйте, vdimas, Вы писали:

    V>Легковесность еще в том, что известные таги и аттрибуты в этой модели представлены кодами enum — гораздо быстрее идет оперирование.


    Мне как то для одной узкой задачи понадобилось ускорить XML DOM (XElement тогда еще не было). Просто переписывание узлов без каких либо изысков ускорило чтение дерева раз в 20.
    ... << RSDN@Home 1.2.0 alpha 4 rev. 1471 on Windows 7 6.1.7600.0>>
    AVK Blog
    Re[10]: Layout Engine #2
    От: vdimas Россия  
    Дата: 03.05.10 15:28
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Мне как то для одной узкой задачи понадобилось ускорить XML DOM (XElement тогда еще не было). Просто переписывание узлов без каких либо изысков ускорило чтение дерева раз в 20.


    Да, похожий порядок. Конкретно ускорение чтения не замерял, но общее время, где было чтение + обработка "нашего DOM" HTML, ускорилось 30-50 раз (чем больше страница, тем больше разница).
    Re: Layout Engine #2
    От: Visor2004  
    Дата: 11.11.10 16:44
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Нарисовались набросок архитектуры и план работ


    А в качестве рендерера, что собираетесь использовать?
    Помните!!! ваш говнокод кому-то предстоит разгребать.
    Re[2]: Layout Engine #2
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 11.11.10 16:45
    Оценка:
    Здравствуйте, Visor2004, Вы писали:

    A>>Нарисовались набросок архитектуры и план работ

    V>А в качестве рендерера, что собираетесь использовать?

    OpenGL
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.