DOM медленный?
Уже в нескольких местах читаю, мол дом медленный. А есть какой-то пример, где можно посмотреть, что DOM медленный?
|
Я веду к тому, что это экономия на спичках или действительно проблема? Т.к. я с подобным не сталкивался, то хотелось бы знать где и при каких условиях подобное может возникнуть?
|
обычно такое возникает в циклах
|
Цитата:
|
Есть задачи, но в большинстве случаев тормозит из-за кривых рук.
|
Цитата:
Вот bes, привел пример: Если вставить десять тысяч и более строк(tr + td или что-там jq вставляет) посредством jq, то будут тормоза. Вот по подобной причине я так понял, что ONLYOFFICE™ сделан на канвасе и отрисовывает только нужную часть. Хотелось бы всё таки примеры. Я с подобной проблемой не сталкивался, т.к никогда не выводил за 1 раз более тысячи-двух строк основанных на DOM, поэтому мне и интересны примеры. |
Да море их: рисование сложных графиков и графов, игры, различные гриды.
Вот последний пример из моей практики: SPA приложение, переход по ссылке со страницы А на страницу Б: если делать в лоб удаление старого DOM и построение нового то очень часто видны "тормоза" - фриз страницы на 200-300 мс, что недопустимо, поэтому фреймворк дробит задачи очистки мусора и рендеринга на потоки и делает всё постепенно, т.е. также делает сам браузер, когда мы переходим по страницам, но в случае SPA это перекладывается на фреймворк. В большинстве случаев тормоза вызваны не оптимальными изменениями и вставками в DOM, а также не оптимальной работы с событиями. |
Цитата:
object.isVisible = {Boolean}; в шаблоне в зависимости от флага показывается/скрывается элемент. Флаг может меняться в ту или иную сторону, пока "не устаканится" :) Псевдо код var i = 10; while(--i) { object.isVisible = Math.random() > 0.5; } Соответственно, если бы приложение рендерилось после каждого изменения, были бы жуткие лаги. |
nerv_,
Ты по анимацию? Её нужно оптимизировать. Цитата:
|
Цитата:
|
Цитата:
Цитата:
Ясное дело, что мой пример очень специфичный, но он из реальной жизни. Цитата:
|
Цитата:
Цитата:
Цитата:
Думаю я понял твое высказывание про кривые руки. Подитожим: DOM медленный, если руки из жопы или если нужны большие вставки/удаления DOM постоянно. |
Цитата:
Сам пример: форум, открыт тред, бесконечный скролл пролистан вниз на 5-6 страниц и юзер жмакает перейти в настройки профиля. Между этими страницами общего только хедер и футер (и то частично) + различные виджеты вне страницы, как "чат-окошко" личных сообщений и т.д.. - это разумеется рендерить заного нет смысла, но сами страница абсолютно разные и этот переход реально фризит. Таких примеров много, как и переходов, т.к. у меня реально большой сайт с кучей страниц и всё работает в рамках SPA. Цитата:
Цитата:
*** Возможно, когда выйдут новые поколения браузеров на всяких Servo, Blink 2 и т.д. то многие оптимизацию станут не нужны. |
Вот ещё немного про DOM: http://habrahabr.ru/post/235333/
|
Safort, единственный недостаток insertAdjacentHTML - он сволочь длинный. И параметры у него длинные.))
|
Цитата:
Цитата:
Цитата:
|
Мне вот интересно, какое максимальное количество обработчиков здешние гуру вешали в своих самых сложных веб-приложениях(и что это были за приложения такие)? Как это сказывалось на производительности?
|
Цитата:
|
Цитата:
Цитата:
если вешать на родителя, то чем тебе плох innerHTML? говоря "древний баян", имеешь в виду другие способы стали намного быстрее? |
Цитата:
Цитата:
Цитата:
Цитата:
Может перестанешь глупости писать? Очевидно, что добавление к родителю быстрее, чем перерендеринг старых эл+навешивание на них заново событий, если это вообще возможно, и рендеринг опять вместе с новыми. Да это баян, дикий, ДРЕВНИЙ баян! Раньше небыло выхода, но стрелять себе в ногу уже минииум 5 лет как не нужно. |
Цитата:
Цитата:
про навешивание обработчиков каких событий идёт речь, если они навешаны на родителя? |
Цитата:
То ты меня цитируешь сообщениями целиком, то вырезаешь неполными кусками выдирая из контекста. Ты уж определись. Тебе никто не запрещает использовать innerHTML, но по моему мнению, удаление элементов и вставка должны быть разделены. Это 2 действия, а не одно. Цитата:
Помимо всего прочего может сохраниться немалая доля мусора в других, не DOM объектах, которые нужно будет искать и очищать, т.к. сборщик никогда их не найдет. |
Часовой пояс GMT +3, время: 07:45. |