Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Сейчас эта тема очень популярна. Очень интересно, как именно работает это виртуальное дерево. Из статей на хабре и кратких упоминаний в интеренете предпологаю следующее. Мы вносим изменения в виртуальный дом, затем эти изменения, по нашей команде, применяются в реальный дом через innerHTML. или там всё намного хитрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 12:21 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Ichisenприменяются в реальный дом через innerHTMLда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 13:03 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Antonariy, в чём тогда фишка этого фреймворка. типа вводится новый объект абстракции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 13:35 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
типа того. тут про фишки: https://habrahabr.ru/post/249107/ я для тех же целей использую свой велосипед: 18547207 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 14:11 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Ichisenили там всё намного хитрее? всё намного хитрее, тк апдэйт через innerHTML будет убивать внутреннее состояние элементов, и будет оч тормозно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 15:00 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoidIchisenили там всё намного хитрее? всё намного хитрее, тк апдэйт через innerHTML будет убивать внутреннее состояние элементов, и будет оч тормозно работать. Код: javascript 1. надо уметь правильно готовить, ситуации разные бывают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:23 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоццинадо уметь правильно готовить, ситуации разные бывают. в любой ситуации будет значительно медленнее во всех браузерах кроме старых IE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:48 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoidбухалтер фантоццинадо уметь правильно готовить, ситуации разные бывают. в любой ситуации будет значительно медленнее во всех браузерах кроме старых IE.1. Почему? 2. Где можно посмотреть сравнительные тесты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 16:53 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoidIchisenили там всё намного хитрее? всё намного хитрее, тк апдэйт через innerHTML будет убивать внутреннее состояние элементов, и будет оч тормозно работать.смотрел исходник, нашел манипуляции с innerHTML, манипуляций через DOM не нашел. впрочем, смотрел не особо внимательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 17:10 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоцци1. Почему? 2. Где можно посмотреть сравнительные тесты? 1. Потомучто будет происходить гораздо больше работы для того чтобы прийти почти к тому же результату (innerHTML убьёт внутренее состояние элементов). 2. Не знаю, можете написать какие-нибудь тесты. Например реализовать https://github.com/mathieuancelin/js-repaint-perfs с использованием innerHTML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 17:12 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Antonariyсмотрел исходник, нашел манипуляции с innerHTML, манипуляций через DOM не нашел. впрочем, смотрел не особо внимательно. разработал одну из самых быстрых реализаций виртуального дома, отлично знаю исходники реакта :) Все апдэйты без какого-либо innerHTML, изначальный рендер в 0.15 так же будет без innerHTML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 17:16 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoid в любой ситуации будет значительно медленнее во всех браузерах кроме старых IE. localvoidПотомучто будет происходить гораздо больше работы для того чтобы прийти почти к тому же результату ( innerHTML убьёт внутренее состояние элементов ) а если нужно заменить полностью все элементы или создать новые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 17:25 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоцциа если нужно заменить полностью все элементы или создать новые? в случае с innerHTML придётся ещё распарсить html со всеми проверками. Во времена тормозного взаимодействия с домом из жаваскрипта это было эффективно, это ещё называли батчингом, но сейчас все оптимизируют под андроид/хром, а не под старые ie, тк теперь это самая массовая и тормозная платформа, поэтому никакого innerHTML, тк во всех браузерах уже давно быстрое взаимодействие с домом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 17:33 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoid, какие-то категоричные выводы, "все оптимизируют под андроид/хром", я стараюсь оптимизировать под Chrome, FireFox, IE11, Opera12, формально ИЕ8 (чтобы в нём хотя-бы запускалось и открывалось). Очень много тонких моментов, которые выявляются только тестами, причём очередное обновление версии браузера может значительно скорректировать результаты тестов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 17:41 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоцци, да, очень много тонких моментов, и большинство разработчиков популярных фрэймворков/библиотек общаются, делятся опытом, обмениваются идеями и уже не используют innerHTML в своих библиотеках. Вобщем тут тема про виртуальный дом, я отлично знаю как работают все библиотеки с реализацией виртуального дома, которые попадались мне на глаза и никто из них не использует для апдэйтов innerHTML, и те что раньше использовали для изначального рендера innerHTML сейчас переписывают этот кусок кода и выкидывают innerHTML. Никого переубеждать не собираюсь, видимо это просто случайность что все производительные решения не используют innerHTML :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 18:21 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoid, Да я не спорю, но надо тестами проверять, уже научен, и то конкретно браузер и версию указывать желательно. Сам и проверю кстати, потом отпишусь, может на этой, может на след.неделе, пока лень. Недавно я тестировал большие перемещаемые Гриды (50 тыс.ячеек и более, в окошках), причём одновременную работу нескольких больших Гридов, реализовывал через innerHTML - удобнее строку собирать, да и строковые операции давно оптимизированы, стили для Грида отдельно пихал в новый тег style и т.д., обработчик один на весь Грид под разные браузеры там оптимизация немного разная. Но руки не дошли тогда проверить через DOM - и так время заняло немало, пока разные варианты тестил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 18:33 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoidбухалтер фантоцци, да, очень много тонких моментов, и большинство разработчиков популярных фрэймворков/библиотек общаются, делятся опытом, обмениваются идеями и уже не используют innerHTML в своих библиотеках. Вобщем тут тема про виртуальный дом, я отлично знаю как работают все библиотеки с реализацией виртуального дома, которые попадались мне на глаза и никто из них не использует для апдэйтов innerHTML, и те что раньше использовали для изначального рендера innerHTML сейчас переписывают этот кусок кода и выкидывают innerHTML. Никого переубеждать не собираюсь, видимо это просто случайность что все производительные решения не используют innerHTML :)не все так однозначно (с) История одной оптимизации , причем там работа исключительно с dom. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 18:46 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
кратко скажу, что большие перемещаемые блоки с Гридами подтормаживают во всех браузерах при следующих операциях: - Блок завершает перемещение или изменение размеров - Блок меняет видимость или прозрачность - Блок меняет содержимое Последнее (содержимое) как раз самое тормозное, но первые две операции над уже готовым Гридом почти такие-же тормозные. Возможно, что через DOM обновление содержимого будет быстрее, проверю обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 18:57 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Antonariyне все так однозначно (с) История одной оптимизации , причем там работа исключительно с dom. Ничего общего по этой ссылке с обсуждаемой темой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 19:03 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
вообще-то.. чё там особо проверять-то... это-ж быстро... Вот простой пример Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. Результаты немного зависят от размеров родительских и дочерних элементов. а так-же от стилей. Но общая картина такая: FireFox 45.0 - скорость одинаковая, но задержки рендеринга (перед выводом сообщения проходит время). IE11 - скорость innerHTML в 2.5 раза выше Opera12 - скорость innerHTML в 1.5 раза выше Chrome - скорость DOM выше в 1.5 - 4 раза, но это при повторных замерах, а если обновить страницу, то при первом замере скорость примерно одинакова! В Chrome через innerHTML тоже работает быстрее других браузеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2016, 03:32 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Авторуже не используют innerHTML в своих библиотеках. значит можно предположить 3 варианта 1. тест выше не показывает реальной картины, но его можно подредактировать (стили поменять и т.д.) и перепроверить 2. массово идёт оптимизация под хром в ущерб остальным браузерам 3. innerHTML не используется в связи с недоступностью только что созданных элементов в момент создания Склоняюсь к варианту 3, так как недостаток innerHTML - это доступ к только что созданным элементам DOM можно получить не сразу, а например так: Код: javascript 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2016, 03:42 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Кстати про мой тест Гридов, которые сделаны через innerHTML в перемещаемых блоках (окнах). Постарался сделать тест, который максимально приближен к реальным проектам. По сравнению с синтетическими примерами, где делают один грид в статичном блоке, я сделал несколько одновременно работающих, перемещаемых Гридов, скрываемых и с изменяемыми размерами. Тест гридов - подробное описание там-же или на отдельной странице Тестирование больших гридов Просьба рассмативать приведёные мной ссылки не как СЕО-спам, а по делу, буду рад замечаниям или указанием на возможные ошибки. Так-же интересно взглянуть на аналогичный тест, но более оптимизированный по скорости работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2016, 04:32 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоцциАвторуже не используют innerHTML в своих библиотеках. значит можно предположить 3 варианта 1. тест выше не показывает реальной картины, но его можно подредактировать (стили поменять и т.д.) и перепроверить 2. массово идёт оптимизация под хром в ущерб остальным браузерам 3. innerHTML не используется в связи с недоступностью только что созданных элементов в момент создания Склоняюсь к варианту 3, так как недостаток innerHTML - это доступ к только что созданным элементам DOM можно получить не сразу, а например так: Код: javascript 1. 2. 3. 4. 5. 1. если приложение работает примерно так как работает этот тест, то наверно показывает :) Просто обычно конечные приложения, в которых требуется высокая производительность выглядят совсем иначе. 2. массово идёт оптимизация под мобильные платформы, тк они работают значительно медленее, особенно андроид девайсы. 3. дом апи синхронный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2016, 07:30 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
localvoid, Проверил на планшете ASUS Fonepad ME371MG 16Gb , а так-же на SmartTV LG Вот тест для мобильных - создаётся 3000 вложенных DIV-элементов. Тест на мобильных innerHTML vs DOM Отображение (рендеринг) браузером вложенных объектов, созданных через .innerHTML, работает быстрее созданных через DOM, причём с возрастанием количества вложенных объектов, разница растёт и достигает 10 и более раз! Хотя замеренное время быстрее у DOM-операций! Получается, что измерение таймингов скорости innerHTML vs DOM вообще ни о чём по сравнению со скоростью рендеринга, и в реальности браузеры рендерят намного быстрее как раз при использовании innerHTML. localvoidесли приложение работает примерно так как работает этот тест, то наверно показывает :) Просто обычно конечные приложения, в которых требуется высокая производительность выглядят совсем иначе . Как-бы они не выглядели, каим образом они заставляют браузер рендерить быстрее, используя DOM-операции? localvoidв любой ситуации будет значительно медленнее во всех браузерах кроме старых IE. Мне кажется, что Вы вводите нас в заблуждение. Итого: остаюсь при своём мнении, что, как Вы утверждали выше, "все библиотеки с реализацией виртуального дома", не используют innerHTML по причине недоступности только что созданных элементов в момент создания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2016, 16:07 |
|
||
|
Virtual DOM ( ReactJS )
|
|||
|---|---|---|---|
|
#18+
Остаётся добавить, что очистка HTML-содержимого через innerHTML='' - происходит долго, здесь наверное надо проверить немного другие способы, например через replaceChild , хотя я проверял этот метод при создании, никакого выигрыша не заметил, видимо рендеринг вносит свои коррективы. Поэтому уверен, что innerHTML позволяет каждому браузеру задействовать свои внутренние алгоритмы оптимизации наилучшим образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2016, 16:21 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=57&tid=1445366]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
6ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 166ms |

| 0 / 0 |
