Почему доступ к документу DOM быстрее через Javascript, чем Java? - PullRequest
2 голосов
/ 17 октября 2011

Самым очевидным различием в скорости был рекурсивный обход элементов dom в Javascript, который всегда намного быстрее, чем тот же метод, реализованный в Java.

Почему это так?Почему я могу проходить через документ dom намного быстрее, чем Java, особенно если они используют один и тот же метод (рекурсия).

Ответы [ 3 ]

2 голосов
/ 17 октября 2011

Это потому, что браузеры не имеют интерпретаторов для Java. Они интерпретируют JavaScript. DOM - это модель, которую можно использовать где угодно, но в основном она используется в браузерной среде, и браузеры оптимизировали синтаксический анализ DOM на протяжении многих лет ... для javascript.

Причина, по которой браузеры оптимизировали синтаксический анализ DOM, заключается в том, что анализ DOM является краеугольным камнем динамической веб-разработки. Рассмотрим обычный способ сделать страницу более динамичной:

1.) Listen for some events fired on the page.
2.) When those events are fired, modify some number of DOM objects, 
    e.g., by changing their visibility, geometry, or actually moving
    them to other portions of the DOM.

Причина, по которой DOM важен в этом, заключается в том, что он предоставляет спецификацию для хранения документа в памяти браузера, так что не нужно перерисовывать всю страницу путем изменения небольших частей разметки. И эти объекты DOM, хранящиеся в памяти браузера, структурированы так же, как нативные объекты JavaScript; следовательно, для них проще оптимизировать их под javascript.

И с тех пор, как динамические веб-страницы стали необходимостью, браузеры боролись друг с другом изо всех сил, чтобы иметь самый быстрый пользовательский интерпретатор javascript, и в динамичной веб-среде, главном месте, где вы сможете увидеть большинство наград за оптимизацию - это анализ DOM.

Я не вижу насущной необходимости в Java-среде использовать DOM, но это абсолютно необходимо в браузерной среде. Это наиболее вероятная причина, по которой вы видели лучшую оптимизацию в javascript для анализа DOM, чем в java. Все больше людей заинтересованы в том, чтобы это работало в браузере. Однако, для пояснения, я не уверен в точных технических причинах на уровне кода, почему это на самом деле быстрее.

1 голос
/ 17 октября 2011

Ваш Java-код вероятнее всего использует универсальный синтаксический анализатор XML, такой как Xerces, с исправлением ошибок для не совместимых с XML частей HTML. Ваш Javascript, вероятно, использует высокооптимизированный HTML-специфический парсер, чья интенсивная загрузка ЦП почти наверняка реализована в нативном коде.

1 голос
/ 17 октября 2011

Я думаю, что ответ можно резюмировать так: «Это тот тип доступа, к которому разработчики браузера приложили больше усилий».

Если в альтернативной вселенной все используют Java для обеспечения богатой интерактивности ввеб-страницы и Javascript использовались только для раздражающей прокрутки баннеров, тогда вы вполне могли бы задать противоположный вопрос.В такой вселенной производители браузеров сделали бы доступ к DOM из Java максимально быстрым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...