• Трудности разработки

    Есть такой браузер (не будем тыкать пальцем), который при работе над проектом постоянно старается испортить тебе жизнь. В случае с проектом rocon таким браузером оказалась Opera.

    Сначала она упорно не хотела показывать половину созданных уголков, прочухивалась только тогда, когда я переключался между окнами либо скроллил документ (ау, Опера! такие баги тянутся еще с 7 версии). Чтобы исправить это, нужно было вызвать repaint всего документа. Самым безобидным оказалось такое решение:

    document.documentElement.style.outline = 'none';
    

    Но, как оказалось, это было только началом эпической ебли с браузером. Решил проверить работу библиотеки на существующем проекте: добавил где-то 50 блоков на один из своих сайтов. Во всех браузерах уголки создавались где-то за 0,6 секунды. Проверил в Опере — 23 секунды. Около часа понадобилось чтобы найти проблемное место: оказалось, что на скорость повлияло свойство overflow: auto у одного из родительских элементов. Когда я его убрал время создания снизилось в 2—3 раза (не помню точно, на сколько именно, но прирост в скорости был существенным). На тот момент я немного подзабил на rocon, так как было много важных дел. Сегодня решил продолжить работу и начал с попытки воссоздать ту ситуацию с overflow, чтобы найти решение проблемы. У меня ничего не вышло: обычный родительский блок с overflow: auto давал ту же скорость, что и блок без него. Вероятно, проблема в макете сайта «дополнялась» другими элементами и стилями, разбираться в которых было лень (там HTML и CSS-кода килов на 200).

    До истинной (как мне кажется) сути проблемы допер совершенно случайно, потратив еще минут 30 драгоценного времени. Я уже знал, что узким местом в rocon являлось получение текущего значения CSS-свойств элемента через getComputedStyle(). Проблема оказалась в следующем: тормозит одновременная модификация дерева документа (создание новых элементов) и получения стиля. То есть если разбить один цикл на два — сначала создаем все элементы, потом получаем их свойства — все работает замечательно. Для любопытствующих выложил пример.

    И эти люди обвиняют Майкрософт в том, что IE тормозит развитие интернета.

    Метки:
  • 21 комментарий

    1. Ярослав
      3 марта 2009

      К десятой версии вроде обещают новый JavaScript-движок.

    2. ambientos
      3 марта 2009

      Давно слежу за Оперой, и, если честно, не впечатляет. То косяки со шрифтами, то вот теперь с JS.
      Непонятно одно: почему они не уделяют больше внимания этим вещам до сих пор?..

    3. 3 марта 2009

      > И эти люди обвиняют Майкрософт в том, что IE тормозит развитие интернета.

      :-)

      еще замечал переодическое исчезновение из селектов в 9.26

    4. Сергей Кириенко
      3 марта 2009

      Вот как бы так эту библиотеку переписать ещё под разные другие библиотеки, в которых уже кое-что есть готовое, типа domready, hasClass и многого другого. Тогда меньше 13K получится. Всё равно jquery или mootools приходится использовать.

    5. 3 марта 2009

      Проблемы с репаинт/рефлоу есть не только у оперы (хотя и ярко выражены именно у нее), например, у FF3 с ее новым рефлоу-движком тоже появились проблемы (в отличие от FF2). Я в день выхода FF3 заапрувил им баг, до сих пор чинят :(

    6. 3 марта 2009

      Блять, поля перепутал

    7. Сергей Чикуенок
      3 марта 2009

      Непонятно одно: почему они не уделяют больше внимания этим вещам до сих пор?..

      У меня есть своя теория на этот счет. Опера действует по схеме «русский пиар» (это когда денег на рекламу тратится больше, чем на производство, получая соответствующий результат). Примеров можно привести массу: начиная от лживых заявлений о самом быстром браузере в мире, заканчивая их форумом, переполненным сообщениями о том, что в новой версии сломалось то, что работало в предыдущей.

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

      Никакой выгоды от этого не будет. Во-первых, не все используют эти фреймворки (некоторые используют самописные). Во-вторых: фреймворков очень много, поэтому одни только проверки займут такой же объем кода.

      Тогда меньше 13K получится.

      В gzip-е весит 4 КБ :)

      Проблемы с репаинт/рефлоу есть не только у оперы

      Согласен.

      Я в день выхода FF3 заапрувил им баг, до сих пор чинят

      Если я не ошибаюсь, они ­ внедрили только в третьей версии, хотя в багтрекере запись висела еще с 0.x версии :)

    8. 3 марта 2009

      Опера хороша гибко настраиваемым интерфейсом, а как браузер регулярно доставляет проблемы.
      Субъективно «отзывчивость» интерфейса оперы и скорость отрисовки страницы может произвести впечатление быстрого браузера.
      Но сильнее всех тормозит развитие интернета все-таки интернет эксплорер (по крайней мере 6-й), по сути он является якорем, брошенным лет 5-6 назад и до сих пор не дающий двигаться вперед.

    9. Сергей Чикуенок
      3 марта 2009

      Но сильнее всех тормозит развитие интернета все-таки интернет эксплорер

      Развитие интернета тормозит W3C, которая по пять лет не может спецификации утвердить :) Ну а если по факту, задумайтесь на минутку, почему куча народу еще не перешла на IE7, который уже несколько лет висит в апдэйтах?

    10. 4 марта 2009

      Потому что с ворованным виндовсом они не устанавливают обновлений :-)
      Я других причин просто не вижу.

    11. Сергей Чикуенок
      4 марта 2009

      Потому что с ворованным виндовсом они не устанавливают обновлений

      Вы правы — это одна из причин :)

      Вторая — корпоративный сектор. Крупные корпорации, как правило, пользуются решениями MS для организации делопроизводства. Среди решений есть и те, которые активно используют IE и его компоненты. А теперь представьте, что MS начинает штамповать новые версии браузера так же, как это делает Opera. И из-за одной такой версии вдруг ломается корпоративный интранет, потому что где-то в браузере что-то не то подкрутили. И во всех этих компаниях в тысячи компов парализуется работа. Поэтому некоторые админы не все апдэйты пропускают в сеть.

    12. Глеб Арестов
      4 марта 2009

      а баг репорт отправлен?)

    13. Сергей Чикуенок
      4 марта 2009

      щас сделаем :)

    14. Глеб Арестов
      4 марта 2009
    15. Сергей Чикуенок
      4 марта 2009

      За наводку спасибо, но библиотека страдает теми же болячками, что DD_roundies.

    16. 6 марта 2009

      > Во-вторых: фреймворков очень много, поэтому одни только проверки займут такой же объем кода.

      Нет, я имел в виду что-то вроде плагинов под несколько самых известных библиотек. Вот я, например, пользую mootools. Наверное можно же автоматически генерить «плагины» из каждой новой версии кода (если мы предполагаем, что API библиотек особо меняться не станет). Либо чтобы сами библиотеки включили ваш код в качестве плагина, если дадите разрешение.

      Блин, мы стремительно движемся к «компиляции» JS-кода под разные «платформы». Вот уже и аналог autotools для эклипса вырисовывается. Хотя иметь встроенный в браузеры, например, jquery cвежей версии было бы неплохо.

    17. Сергей Чикуенок
      6 марта 2009

      Нет, я имел в виду что-то вроде плагинов под несколько самых известных библиотек. Вот я, например, пользую mootools. Наверное можно же автоматически генерить «плагины» из каждой новой версии кода (если мы предполагаем, что API библиотек особо меняться не станет).

      Можно сделать даже сейчас, если взять исходный код. Достаточно переписать некоторые методы из common.js и пересобрать библиотеку. В принципе, на то он и Open Source, чтобы дописывать необходимый функционал. Я могу написать плагин для jQuery, кто-то для prototype, кто-то для mootools.

      Либо чтобы сами библиотеки включили ваш код в качестве плагина, если дадите разрешение.

      Пусть включают, мне не жалко :) Только пока о ней особо никто не знает. Я надеюсь в ближайшее время выпустить новую версию библиотеки и написать документацию на английском.

    18. 13 августа 2009

      Обидно читать, как хают любимый браузер((
      А если серьезно, имхо, он удобней остальных. Со мной, думаю, многие согланы.

    19. Сергей Чикуенок
      13 августа 2009

      Это критика в первую очередь разработчикам и пиарщикам Оперы. Как к инструменту для навигации по интернету ничего не имею против — действительно удобный браузер. А как у разработчика сайтов у меня очень много претензий к «самому быстрому» и «самому лучше всех поддерживающего стандарты» браузеру у меня очень много претензий. Вот, из недавнего, почитайте, на что приходилось тратить время разработчикам Яндекса.

    20. mupinc
      20 октября 2009

      Тема обращения в DOM и стилей была затронута Келли Нортоном:

      Measure in Milliseconds: Performance Tips for Google Web Toolkit
      http://code.google.com/events/io/2009/sessions/MeasureMillisecondsPerformanceTipsWebToolkit.html

    21. komver
      2 октября 2010

      Оперу- в жопу. Брауз отстой

    Комментировать

    Powered by Zen Coding