Пожалуй, чаще всего разработчиков браузера Opera обвиняют в их принципиальности, когда дело касается соблюдения веб-стандартов. Как это ни странно. Основной довод при этом звучит примерно так: «Ну вот другие же могут подстраиваться под несовершенство интернета, чем вы лучше?». На самом деле — почти ничем. Правда, за этим «почти» скрывается такая простая вещь, как желание сделать интернет-мир лучше. Обычная житейская логика подсказывает, что идя на поводу у недобросовестных веб-разработчиков изменить ситуацию вряд ли получится, но и слишком принципиальный подход делу особо не поможет. Выход один — искать золотую середину. И нужно сказать, что норвежские программисты оказались, наверное, ближе всех к этому компромиссному решению. Более того, их метод по многим статьям идёт на голову впереди всех остальных участников рынка. Как такое может быть? Читаем перевод статьи Холлворда Стеена.
Как Opera «ремонтирует» веб-сайты
Нетрудно догадаться, что интернет может просто выйти из-под контроля, если каждый веб-сайт будет требовать индивидуальный режим отображения. Представьте, что вы ведёте автомобиль, при этом вам необходимо настраивать что-то в двигателе или менять колёса каждый раз, когда вы поворачиваете за угол или выезжаете на новую улицу. Текущее состояние разработки браузеров чем-то напоминает именно такую ситуацию.
Практически каждый современный браузер сегодня обладает встроенными возможностями, позволяющими обходить все ухабы и выбоины в веб-стандартах, оставленные разработчиками сайтов:
— IE8 отображает веб-сайты из списка несовместимых в режиме IE7
— Google Chrome представляется другим браузером для Hotmail
— Safari содержит некие тайные недокументированные хаки, специфичные для некоторых сайтов
— Firefox, вероятно, имеет только расширение для переключения User Agent, весьма популярное у определённой аудитории
— Opera обладает встроенным переключателем идентификации браузера и корректирующим browser.js
Обрабатывать каждый сайт отдельно? Звучит безумно. На самом деле это просто невозможно. Для справки: сущестуют миллиарды сайтов, и все они отличаются друг от друга. Более того — они постоянно изменяются, ведь ежедневно миллионы строк кода добавляются в них или редактируются. Кто способен с этим справиться? На самом деле решать данную проблему должны стандарты, не так ли?
Стандарты
Я одобряю усилия по стандартизации, активную работу евангелистов The Web Standards Project и всех остальных, кто пропагандирует веб-стандарты. Вполне возможно, что именно вам удастся изменить будущее — всё больше сайтов проходят валидацию и избавляются от «нестандартного» наследия прошлого. Сила пребывает с вами!
Надо отметить, что в Opera также есть несколько команд, которые пытаются изменить мир к лучшему, занимаясь обучением или делясь своим опытом. Наш отдел Open the Web постоянно связывается с владельцами веб-сайтов, давая советы по кросс-браузерной совместимости и соответствию стандартам.
Но браузер представляет интересы пользователя. Поэтому мы должны сделать всё возможное, чтобы пройдя через все хитросплетения нестандартного кода веб-сайтов, наш браузер смог предоставить пользователю максимально правильный результат. Как это ни грустно осознавать, но несмотря на то, что в неправильности сайтов нет нашей вины, зачастую это — наша головная боль. И мы должны решать её сейчас, а не в 2022 году.
Что мы, собственно, и делаем.
Наблюдая, как другие производители браузеров с переменным успехом выполняют ту же задачу, думаю, пришло время и нам поделиться своим опытом в непростом деле исправления веб-сайтов — как минимум, показать все сильные и слабые стороны нашего подхода к проблеме.
Сильные стороны
Опыт
По сравнению с другими браузерами, Opera обладает наибольшим опытом в добавлении специфических для каждого веб-сайта исправлений, ведь мы начали это делать ещё во времена версии Opera 8.01. Также беру на себя смелость заявить, что наше решение является наиболее передовым. Набор специальных команд пользовательских JavaScript создают простой, но мощный API для изменения и исправления веб-сайтов. С методами получения и присвоения переменных, а также используя интерфейс DOM мы можем изменить поведение Opera в соответствии с большинством стандартных операций, выполняемых скриптом. Иногда мы добавляем недостающий стиль или даже удаляем некоторые объекты и правила, приводящие к некорректному отображению страниц. В результате если какой-то сайт проверяет версию браузера, мы часто можем просто найти и исправить ту строку кода, которая это делает! Несколько наглядных примеров:
— Мы можем добавить одно отсутствующее имя класса, когда AOL Japan неправильно определяет браузер и отправляет неправильные стили, а так же исправить ошибку в AOL webmail, когда они используют ошибочное написание dojoType вместо dojotype.
— Мы можем воспользоваться изящным вызовом postMessage(), когда E*Trade пытается нарушить политику безопасности в плане навигации по фрейму другого веб-сайта в то время, когда идет загрузка закодированного содержимого.
— Мы можем также переопределить то, каким браузером мы представляемся веб-сайту и какой режим отображения страниц (адаптированный к веб-сайту или соответствующий стандартам) надлежит использовать для данного сайта через загружаемые настройки.
Исправления ошибок
Получая возможность изменения веб-сайтов и работу Opera, мы иногда можем даже исправлять собственные баги.
— Когда меню на weather.com перестаёт отображаться по причине неверной обработки событий мыши, мы можем исправить это
— Когда результаты поиска на Google Codesearch отображаются белым шрифтом на белом фоне, мы можем применить другой стиль
Только подумайте: Opera — браузер, который может не мешая пользователю исправлять свои ошибки. Это напоминает машину времени: мы можем исправлять свои старые огрехи даже в тех версиях, которые уже были загружены пользователем до того, как эти ошибки были обнаружены.
В долгосрочной перспективе, это очень важное и тонкое свойство browser.js: оно позволяет веб-разработчикам сократить число специфичных для Opera поправок к коду. Правда нужно отметить, что и проблемы обновления IE8, и наш собственный опыт говорят о том, что работа над своими старыми ошибками является одной из наибольших наших проблем. Мы делали неправильные вещи, и веб-сайты также становились неправильными в ответ. Мы исправляли свой браузер, но всемирная сеть никогда не забывает наших старых ошибок.
В чём отличие механизма, использующего browser.js? Когда мы выпускаем новую версию браузера с исправленными ошибками, соответствующие куски кода browser.js незаметно помечаются, как устаревшие. То, что работало с помощью browser.js, теперь начинает работать само собой в связи с исправлениями в браузере, делая процесс обновления Opera более гладким для пользователей и веб-разработчиков, а также значительно более простым для нас. Порой я, кажется, даже чувствую через всю Атлантику огромную зависть команды разработчиков IE8.
Другой интересный момент — мы можем таким образом добавлять в браузер поддержку новых стандартов с минимальными проблемами. Например, если входящий в спецификации HTML5 тэг
<input required>
ломает процесс входа на Barnes & Noble по причине того, что поле с именем пользователя на самом деле не требует заполнения, в момент нажатия кнопки «создать учётную запись» мы можем сначала применить свои корректировки, чтобы регистрация прошла успешно, а уж потом встретиться с редактором спецификаций и обсудить с ним за чашкой кофе, как нам сделать новую технологию более совместимой с существующим интернетом.Прозрачность
С самого начала одной из главных проблем было то, что наши корректировки будут позволять веб-разработчикам не заниматься поиском и исправлением ошибок в их коде. Более того — таким образом мы бы даже способствовали появлению ошибок, продолжая сохранять корректировки в то время, как веб-сайт уже исправлен.
Для обеспечения максимальной прозрачности все корректировки документируются, а также мы стараемся сохранять файл максимально читабельным и хорошо откомментированным (естественно — не в ущерб общему размеру загружаемых данных). Кроме того, каждая произведённая корректировка отображается в консоли ошибок Opera, сообщая пользователю о том, что происходит.
Охват
Корректировка веб-сайтов — задача кросс-платформная. Но данный термин слишком слабо описывает действительное положение вещей. Знаете ли вы о том, что мы корректируем веб-сайты для Nintendo Wii? А для DSi? Для Opera на платформах Windows Mobile, Symbian, BREW и на портативных медиа-плейерах Archos? Кроме шуток, мы даже применяем корректировку для Opera Mini!
— Когда для создания почтовых сообщений на Hotmail и Yahoo mail требуется редактирование со сложным форматированием, мы можем имитировать его поддержку даже на устройствах с весьма ограниченными аппаратными возможностями, для которых подобная функция невозможна в принципе
— Если обработка причудливой анимации на Facebook занимает слишком много времени на сервере Opera Mini — а отправка контента клиенту возможна только когда всё «отпляшет» — мы можем просто урезать её и хотя бы завершить наиболее важные функции сервиса Facebook, затребованные конечным пользователем
Это выглядит амбициозной задачей, возможно, даже более амбициозной, чем это кажется со стороны. Устройства и платформы предъявляют очень разные требования и изобилуют специфическими проблемами. Например:
— На игровой приставке Wii мы должны ограничивать минимальный размер шрифта для сохранения удобочитаемости — но зачастую это приводит к непредсказуемым изменениям ширины, компоновки и позиционирования элементов веб-страниц, приводящим к результату, который просто невозможен в браузере для настольных компьютеров. Поэтому мы корректируем несколько веб-сайтов со слишком жёсткими характеристиками элементов для сохранения возможности использовать шрифты чуть большего размера.
— Использование экранной клавиатуры на Wii и множестве мобильных телефонов подразумевает изменение размера окна браузера каждый раз, когда вам нужно ввести текст в поле формы — для клавиатуры тоже требуется некоторое пространство на дисплее. Но, к примеру, сайт British Airways производит обновление страницы оформления заказа при каждом изменении габаритов окна, что делает покупку билетов с использованием виртуальной клавиатуры задачей нетривиальной…
— … или когда eBay in France пытается сосчитать нажатия клавиш чтобы убедиться, что вы не жулик и вставляете свой адрес электронной почты в поле регистрационной формы «Повторите ввод E-mail» — это также не будет работать с экранными клавиатурами. Большинство из них просто не поддерживает клавиатурные события. Пойдёмте на eBay — я реально делал это. Я не шучу — РЕАЛЬНО! На устройстве, для которого операция вырезать-вставить в принципе НЕВОЗМОЖНА!..
Когда имеешь дело с таким диапазоном проблем, истинный и магический потенциал browser.js становится ещё более очевидным.
Инфраструктура
Чтобы поддерживать всё это хозяйство, мы имеем несколько небольших серверов, отправляющих по запросу клиента именно тот файл, который для него предназначен. У нас есть база данных корректировок и набор мета-данных, содержащих записи о том, к каким платформам и устройствам эти корректировки могут применяться. Но знаете ли вы, что у нас также есть специальный «шпионский» скрипт, постоянно проверяющий веб-сайты — не исправлены ли там корректируемые нами ошибки? Если такое чудо всё-таки происходит, было бы неплохо знать об этом. Я люблю системный звук, сопровождающий каждое удаление очередной «устаревшей» корректировки в Корзину.
Слабые стороны
Время
Так много возможностей, так мало времени… Анализ веб-сайтов и создание корректировок отнимает уйму времени. Мы даже близко не подходим к внушительному списку несовместимых с IE8 веб-сайтов, содержащему более 2400 записей (на самом деле исследование этого списка напоминает Дежа Вю: так много знакомых названий, так много веб-сайтов, которые нужно корректировать или с авторами которых нужно налаживать контакт по тому или иному поводу).
Однако, наш список заметно короче — к счастью! Технический анализ с таким уровнем детализации, который необходим для нашей системы корректировки веб-сайтов, может быть весьма трудоёмким, поэтому я надеюсь, что мы сможем сохранить наш список по-прежнему гораздо меньшим, чем у IE, и, как следствие, сможем лучше фокусировать своё внимание на качестве корректировок. Однако, мы готовы к более широкому охвату: в нашей базе данных более 600 записей и места ещё предостаточно — ждём ваших сообщений о некорректно отображаемых веб-сайтах.
Производительность
Я лишь сказал, что для новых корректировок место имеется. Но каких масштабов можно достичь прежде, чем это заметно скажется на производительности браузера?
Очевидно, что мы можем сохранять рост базы данных ещё довольно продолжительное время. Некоторые наши недавние эксперименты показали, что мы можем обрабатывать до 10000 различных веб-сайтов, замедляя работу Opera лишь на доли процента. Также я искренне верю, что к тому времени, как наша база записей разрастётся до 10000, вы уже купите более производительный компьютер…
Безопасность
А так ли это безопасно? Не может ли вирус или «враждебный» сервер фальсифицировать ваш browser.js и тем самым мгновенно получить контроль над вашим использованием Opera?
Короткий ответ: нет.
Более развёрнутый ответ заключается в том, что это было бы возможно, если бы мы не предпринимали соответствующих защитных мер, но на самом деле мы ими занимаемся весьма активно. Каждый файл содержит электронную подпись и Opera проверяет, является ли данный файл подлинным и не вносились ли в него изменения. Такую подпись фальсифицировать очень, очень сложно. Поэтому как только вирус или «враждебный» сервер изменят файл, Opera незамедлительно перестанет его использовать и загрузит более свежую версию с нашего сервера.
Выводы
Одна из наиболее поразивших меня вещей, связанных с работой над browser.js, заключается в том, как быстро изменяется всемирная сеть. Уделяя столь пристальное внимание к определённым веб-сайтам мы видим, что в целом интернет совершенствуется, и происходит это гораздо быстрее, чем я мог ожидать. И вопреки, возможно, вашим опасениям, мы часто видим, что веб-сайты исправляются и становятся более лояльными к браузерам Opera после того, как мы выпустим к ним корректировки!
Это означает, что корректировка сайтов работает. Это работает, потому что это улучшает совместимость, давая таким образом пользователям реальную возможность выбора браузера и — как бы фантастично это ни звучало — в качестве прямого воздействия это даёт веб-разработчикам уверенность в том, что их веб-сайты совместимы с Opera и с множеством других браузеров.
Добро пожаловать в будущее — созданное из и с помощью стандартов, открытых технологий и корректировок веб-сайтов.
Об авторе
Hallvord R. M. Steen работает в «ядерной» команде Opera над проверкой качества, тестированием и веб-совместимостью. Он является разработчиком файла browser.js и может сломать все сайты во всём мире с помощью небольшой опечатки.
Благодарности:
данный перевод стал возможен благодаря melnichuck и arestov