Новый браузер Google Chrome – друг, враг или конкурент?
Александр Лозовюк
В приснопамятную войну браузеров вступил еще один игрок, однако игрок более мощный, чем все остальные вместе взятые – Google. Наконец-то не раз озвученные планы по выпуску браузера оправдались – вечером широкой публике была предоставлена возможность загрузить дистрибутив Google Chrome для Win32 и попробовать его в работе. Уже по состоянию на утро следующего дня по некоторым исследованиям, он занимал 0.72% мирового рынка, идя почти вровень с Opera (0,74%), у которой многолетняя история и армия преданных поклонников. Браузер доступен для платформы Win32, версии для других платформ пока в разработке, для самых нетерпеливых доступен исходный код и инструкции по сборке и тестированию.Оригинальным получился и предстартовый PR нового браузера – за несколько дней до этого события вместо технических документов и анонсов был выложен талантливо нарисованный комикс в двух частях, который в ненавязчивой и игровой форме подробно описал, чего же ждать от продукта. Энтузиасты быстро перевели комиксы на русский, и начали обсуждать продукт еще до его выхода, периодически проверяя доступность адреса для загрузки. Множество блогов и новостных лент писало об этом продукте, и все были в ожидании. Наконец вечером состоялась презентация (в отличии от других компаний, все знали даже точное время релиза, и было даже немного странно, как же сервера выдержали такой наплыв), и теперь, после небольшого тестирования можно реально поговорить о том, что же такого интересного, в первую очередь для разработчика.
О пользовательской стороне браузера уже написали очень многие. Да, браузер Chrome по дизайну интерфейса очень и очень прост, количество настроек сведено к минимуму – все это уже описали многие блоггеры и новостные сайты. Мы далее остановимся на некоторые технических деталях, которые интересны разработчикам. И так, начнем.
Оригинальная модель установки браузера – для скачивания доступен небольшой загрузчик, который при старте уже загружает и устанавливает основной дистрибутив браузера, объемом 23 Мб, который упакован нетрадиционным, но одним из лучших открытых архиваторов 7-Zip. Подобный подход использует только Microsoft, распространяя веб-инсталлятор для IE, однако, в отличие от Chrome, IE доступен и в виде полного дистрибутива, а Google пока такого не предусмотрел.
Как и ожидалось, браузер открытый, исходный код размещен на
Google Code, проект называется
Chromiumи доступен под BSD-лицензией. Там же есть очень много подробнейшей документации по внутренней архитектуре браузера, советуем почитать и посмотреть, тем более, что в нем применяется достаточно новаторские подходы. Мы же расскажем про архитектуру очень кратко.
Архитектура Google ChromeОсновным отличием от всех остальных браузеров является использование многопоточности. Все элементы браузера, которые потенциально могут привести к падению, вынесены в отдельные потоки, так что теперь каждая вкладка и каждое окно – это новый процесс, независимый от всех остальных.
Разработчики объясняют в документации, что подсмотрели такую организацию в архитектуре современных ОС и решили, что браузер также должен быть именно таким. Ведь самое неприятное, что может быть, это случай, когда одна вкладка из-за ошибки приводит к закрытию всего браузера, а у активных пользователей там могут быть десятки или даже сотни вкладок.
Компонентно можно выделить несколько основных систем, из которых состоит браузер. Ядро отображения веб-страниц основано на открытом движке WebKit, на основе которого работает всем известных браузер Safari, стандартный браузер для MacOS и Apple iPhone. Сетевая часть в текущем релизе для Win32 систем основана на библиотеке WinHTTP ввиду ее лучшей документированности и стабильности, она ориентирована на серверные приложения. Однако, в будущем Google планирует заменить этот компонент на собственный стек обработки HTTP-протокола. Над этой библиотекой Google написал собственный многопоточный загрузчик ресурсов, который заменяет штатный для движка WebKit.
Обработкой JavaScript занимается
новый движок V8, который также открытый и отличается большой скоростью и эффективным управлением памятью. V8 доступен в исходных кодах для всех платформ (написан на С++), и может быть собран как самостоятельное приложение, так и встраиваться в другие (подробнее
смотрите в документации). Основным достоинством движка является более быстрый доступ к полям объектов (в принципе, может быть реализовано всего одной инструкцией), а также отказ от промежуточных преобразований кода, JavaScript транслируется при первом вызове сразу в машинный код (как я понимаю, в ассемблерный). Последним козырем является встроенный сборщик мусора, который позволяет экономить память, что особенно актуально для сложных и больших JS-приложений. Все это напоминает описание идеального движка, однако война на этом фронте только начинается, ведь Firefox 3.1 должен также лучше обрабатывать JS-код, а ведь, насколько мне известно, движок следующего поколения Tamarin ещё даже не используется.
В браузер изначально интегрирован
Google Gears, который теперь составная часть браузера – некоторые "фичи" браузера вроде превращения любой вкладки в независимое веб-приложение, основаны именно на его функционале, а сайты, делающие ставку на его возможности, теперь будут работать быстрее, не требуя от пользователя установки дополнительных плагинов (этого и следовало ожидать, думаю, не ошибусь, если скажу, что именно на Gears Google обкатывала свои браузерные технологии).
Тот самый минималистичный и симпатичный интерфейс, что так понравился многим пользователям, отрисовывает библиотека Scia. Эту библиотеку вместе с компанией-разработчиком Google приобрел еще в 2004 году и использует в проекте
Android. Scia - открытая графическая библиотека, которая оперирует 2D графикой и поддерживает работу с SVG, PDF и OpenVG, оптимизирована для работы в условиях ограниченных ресурсов на мобильных платформах, сама компания-разработчик демонстрировала работу на платформах PocketPC, Symbian и Brew, вместе с традиционными Win32 и MacOS.
Единственный сторонний плагин, работающий в новом браузере, это Flash-плеер от Adobe, без которого сейчас уже никак. Браузер поддерживает архитектуру плагинов NPAPI, ту же, что и в Firefox, поэтому ожидаем, что можно будет без особых сложностей и полного переписывания, переносить плагины, однако в текущем релизе дополнения не поддерживаются, что обещают исправить в следующих версиях. Конечно, многим пользователям это усложнит переселение в новый браузер, однако при обычной работе это почти не ощущается. Вот для веб-разработчика это принципиально – без плагина Firebug и сторонних дополнений к нему очень сложно представить полноценную разработку. Но не спешите грустить – об инструментах для разработчика речь пойдет ниже.
Все компоненты браузера соединяются в одну цельную систему при помощи межпроцессного протокола обмена данными (IPC) на основе name pipe. Это самостоятельная и большая тема, подробно описанная в документации Как уже говорилось, браузер построен с учетом многопоточности, и каждое окно и вкладка в нем представляет собой самостоятельный браузер (да-да, каждую вкладку рендерит собственный экземпляр движка и остальных компонент), который использует 8 стандартных потоков (подробнее про модель потоков). Именно такая архитектура позволяет демонстрировать браузеру потрясающую скорость работы даже когда параллельно открыто несколько десятков вкладок, в том числе с ресурсоемкими приложениями. Однако обратная сторона медали – достаточно большое потребление памяти, хотя в свете того, что даже бюджетные ноутбуки комплектуются 1 Гб памяти, это не так существенно.
А как в реальной работе?Для примера, в процессе написания статьи открыто два окна браузера (8 и 11 вкладок), а также три отдельных окна в виде веб-приложений, в частности, Gmail. Параллельно открыт Firefox 3 с 7-ю вкладками. Здесь время вывести на сцену еще один компонент браузера от Google – собственный диспетчер процессов (из меню или через Shift-Esc), показывающий все запущенные процессы браузера (а также процесс флеша, из чего можно попробовать сделать вывод, что Flash один процесс для всех, и интересно посмотреть, что будет при его падении, когда открыто несколько окон с флеш-роликами). Исследуя менеджер, мы можем сделать еще один вывод – получается, что разные вкладки, в которых открыты страницы одного сайта (домена) будут отображаться в рамках одного родительского процесса, используя только новые потоки, а значит крах на одной странице привёдет только к закрытию вкладок со страницами этого домена. Если хотите все же разнести по независимым потокам открытые страницы, придется использовать новые окна. Впрочем, такое поведение достаточно логично и не вызовет особых сложностей.
Но вернемся к потреблению памяти – Google Chrome потребляет в такой конфигурации 185 Мб памяти против примерно 60 Мб у Firefox (в пересчёте: 8.5Мб/страницу у обоих), однако в три раза больше виртуальной памяти (около 350 Мб против 115). Оказывается, не все так плохо и накладные расходы при такой архитектуре не особенно большие, хотя на компьютерах где мало памяти вряд ли он будет так быстр, особенно, если параллельно много приложений – частое использование файла подкачки может существенно замедлить работу.
Несколько слов о стандартахНесколько слов о стандартах. Тест ACID2 браузер проходит полностью, что, однако, не новость для браузеров на движке WebKit, который славится неплохой поддержкой новых стандартов. На момент тестирования сайт теста ACID 3 был недоступен, видимо все решили проверить, но те, кому удалось, заявляют о неполной поддержке – 76 баллов из 100. Заметим, что только в последних сборках движка есть полная поддержка CSS 3, однако эти сборки имеют проблемы с производительностью, и не рекомендованы для серьезного применения. Возможности HTML 5 также пока не поддерживаются, однако заявлено в будущем релизе, поэтому не принимайте это как вердикт. Тем более, часть из его самых востребованных новшеств (например, встроенное хранилище данных) поддерживается в Gears уже сейчас. Что касается обычного HTML/XHTML то здесь всё в порядке, и если сайт правильно работает под Safari, то и Chrome обработает его корректно. Существенный минус – это отсутствие поддержки XML, в частности, RSS никак не распознается и выводится как простой текст, кроме этого, не распознаются email-ссылки, PDF-файлы нельзя открывать просто в окне браузера, впрочем, это не самое страшное. Сейчас еще наблюдаются некоторые сложности с обработкой cookie и отсутствие автозаполнения форм, не всегда запоминаются авторизационные данные, отсутствует полноценная работа с клиентскими SSL-сертификатами (кто-то уже докладывал о неработоспособности WebMoney Lite), плохая встроенная проверка орфографии, однако нельзя же требовать всего и сразу о первой публичной версии.
Для загрузок файлов есть простейший
встроенный менеджер загрузок, который открывается в новой вкладке. Конечно, везде можно искать встроенными средствами (не забывайте, что Google это все же поисковый сервис) – локальный поиск для файлов, истории посещения, и интегрированный поиск Google в адресной строке, что очень даже удобно.
А что же веб-разработчикам?Если сперва, услышав, что основа браузера не ожидаемый Firefox/Gecko (ведь Google давний друг и спонсор Mozilla), а WebKit, многие разработчики поняли, что любимых плагинов для облегчения жизни AJAX-разработчикам (Firebug и компания) не будет, то внимательнее исследовав доступные инструменты, поняли, что не все так грустно. В распоряжении разработчика на JavaScript есть несколько инструментов, которые покрывают основные потребности.
Во-первых, окно просмотра исходного кода страницы изначально имеет нумерацию строк и подсветку синтаксиса, что облегчает исследование страниц. Однако подсветка работает только для HTML, а вот JS-код просто выводится серым шрифтом как текст, надеюсь, в будущих версиях это исправят.
Во-вторых, в составе браузера есть отдельный JS-дебаггер, который, правда, имеет интерфейс только командной строки, однако позволяет делать все основные операции с кодом – работа с точками остановки, трассировка и т.п. Работа с ним необычна, но если привыкнуть, то вполне. Список доступных команд можно получить, введя "help", список всех используемых JS-файлов и других ресурсов можно получить командой scripts, управление точками останова – break, break_info и clean. Это для истинных виртуозов консоли.
А для всех остальных – есть Консоль JavaScript, которая по функциональности достаточно похожа на связку Firebug + YSlow (хотя, если правда, эти инструменты все же гораздо мощнее). В этой консоли отображается вся DOM-модель текущей страницы с подсветкой синтаксиса, удобный навигатор по всех ее элементах а также список всех применяемых CSS-стилей с возможностью на лету менять параметры и просматривать результат. Что приятно удивило – в консоли можно вводить и исполнять JS код, при этом сразу работает автодополнение и подсказки для тех библиотек, которые подключены на текущей странице.
На вкладке Resources консоли мы можем исследовать процесс загрузки всех элементов страницы – время, размер и порядок загрузки, просматривать каждый элемент страницы – базовый функционал вкладки Net плагина Firebug или плагина YSlow реализован.
Пока это всё, что Google Chrome может предоставить в распоряжение веб-разработчика, для профессионалов этого мало и они не откажутся от связки Firefox + Firebug, а для обычных пользователей и этого не надо. Эти инструменты будут применяться для тестирования сайтов под новый браузер, но если заявления о совместимости архитектур плагинов будут реализованы, мы скоро увидим Firebug в составе Chrome. Ведь именно в разработке нужна устойчивая платформа, так как неотлаженные скрипты сложных AJAX-приложений часто вызывают падение всего браузера, а разработчику нужно параллельно держать открытыми множество окон, и каждое падение замедляет работу
Протестировав его работу на сложных AJAX-приложениях, в частности, примерах на сайте ExtJS, могу заверить, что скорость действительно выше, чем у других браузерах, никакого торможения других вкладок не замечено, стабильно работают и сторонние проекты, в частности, например, наше приложение, где ExtJS работает в паре с Flash – для современных AJAX-приложений и RIA это действительно лучший и самый быстрый браузер.
ВыводыУ Google получился… да, получился отличный продукт! Несмотря на раннюю версию (0.2.х) он достаточно стабильный, быстродействие просто фантастическое (конечно, если у вас 1 Гб, или больше, памяти), несмотря на простоту и минимализм интерфейса, функциональность на высоте (чего стоят только возможности любую вкладку превратить в веб-приложение, запускаемое по клику на иконке с рабочего стола). Хочется лишь немного поразмышлять над общей картиной.
Google явно делает из браузера свою операционную систему – и архитектурно и концептуально. Ранее протестировав на большой армии пользователей Gears, переведя на него частично свои сервисы и завладев умами многих веб-разработчиков (даже MySpace), они интегрировали в браузер и теперь не надо никаких модулей – все работает "с коробки", о чём так мечтали пользователи (даже не подозревая) и разработчики. Основным конкурентом я бы выделил совсем не Firefox, как все сравнивают, а Adobe AIR – по сути, каждая вкладка в Google Chrome это экземпляр того самого AIR. И там и там одинаковый движок, у обоих современные и быстрые JS-движки, интегрированный Flash и остальные требуемые плагины. Оба проекта выступают как идеальная платформа для AJAX веб-приложений, единственно, что у Google более короткий путь к пользователю, все таки Chrome не только платформа, но и конечный продукт (пусть, фактически, приданный в нагрузку к платформе).
Кроме этого, следует ожидать, что скоро Chrome станет полноценным мобильным браузером – все компоненты кроссплатформенные и по отдельности все уже работают на мобильных устройствах – и движок WebKit, и Gears и Scia и даже Flash. Вопрос появления браузера Chrome для платформы Android – это только вопрос времени. И, похоже, это будет очередная революция, ведь ранее мобильные терминалы всегда были "ущёрбные" в плане веб-доступа, а теперь у нас в телефонах будет самый быстрый браузер в мире (эх, ещё бы и гигабайт памяти в каждый смартфон).
P.S. Поступили сообщения, что доля нового браузера уже достигла 1%, что является просто фантастическим результатом, достигнутым менее, чем за сутки после анонса, а также о выявлении первых уязвимостей (
подробнее). Похоже, война браузеров пошла на очередной виток.
Источник: http://www.developers.org.ua/