Новый браузер Google Chrome — друг, враг или конкурент?
Вчера ближе к вечеру в Сети состоялась очередная небольшая революция, при этом вполне ожидаемая и желанная. В приснопамятную войну браузеров вступил еще один игрок, однако игрок более мощный, чем все остальные вместе взятые — Google. Наконец-то не раз озвученные планы по выпуску браузера оправдались — вечером широкой публике была предоставлена возможность загрузить дистрибутив Google Chrome для Win32 и попробовать его в работе. Уже по состоянию на утро следующего дня по некоторым исследованиям, он занимал 0.72% мирового рынка, идя почти вровень с Opera (0,74%), у которой многолетняя история и армия преданных поклонников. Браузер доступен для платформы Win32, версии для других платформ пока в разработке, для самых нетерпеливых доступен исходный код и инструкции по сборке и тестированию.
Оригинальным получился и предстартовый PR нового браузера — за несколько дней до этого события вместо технических документов и анонсов был выложен талантливо нарисованный комикс в двух частях, который в ненавязчивой и игровой форме подробно описал, чего же ждать от продукта. Энтузиасты быстро перевели комиксы на русский, и начали обсуждать продукт еще до его выхода, периодически проверяя доступность адреса для загрузки. Множество блогов и новостных лент писало об этом продукте, и все были в ожидании. Наконец вечером состоялась презентация (в отличии от других компаний, все знали даже точное время релиза, и было даже немного странно, как же сервера выдержали такой наплыв), и теперь, после небольшого тестирования можно реально поговорить о том, что же такого интересного, в первую очередь для разработчика.
О пользовательской стороне браузера уже написали очень многие. Да, браузер Chrome по дизайну интерфейса очень и очень прост, количество настроек сведено к минимуму — все это уже описали многие блоггеры и новостные сайты. Мы далее остановимся на некоторые технических деталях, которые интересны разработчикам. И так, начнем.
Оригинальная модель установки браузера — для скачивания доступен небольшой загрузчик, который при старте уже загружает и устанавливает основной дистрибутив браузера, объемом 23 Мб, который упакован нетрадиционным, но одним из лучших открытых архиваторов Подобный подход использует только 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 Гб памяти, это не так существенно.
А как в реальной работе?Но вернемся к потреблению памяти — 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%, что является просто фантастическим результатом, достигнутым менее, чем за сутки после анонса, а также о выявлении первых уязвимостей (подробнее). Похоже, война браузеров пошла на очередной виток.
Маєте важливу новину про українське ІТ? Розкажіть спільноті. Це анонімно. І підписуйтеся на Telegram-канал редакції DOU