Сен 03 2008

Google Chrome. Первые впечатления

Категория: Googlegugglegum @ 12:50

Вчера мой друг Макс прислал мне ссылку на подборку новостей о том, что Google опубликовал анонс выпуска собственного браузера “Chrome”, основанного на исходниках Apple WebKit (Safari). По правде сказать, для меня это было неожиданностью. Уже 4 года ходят слухи о том, что гугл вроде как собирается выпустить свой браузер, но воспринимались они как что-то очень недостоверное и далекое во времени. К тому же были и официальные заявления с опровержениями этих слухов — мол существующие браузеры их и так устраивают. А тут бац! Нате новый браузер.

Вчера же поздно вечером в 11 утра по дневному тихоокеанскому времени (в 22 часа по Москве) была прямая видео-трансляция презентации нового браузера в Google, где разработчики рассказывали о том, как они делали свой браузер и в чем его преимущества перед существующими. Я не буду перечислять все преимущества нового браузера, они уже перечислены до меня.

Просто я установил Chrome-beta себе на компьютер и могу поделиться первыми впечатлениями. Итак, первое впечателние: просто супер! Эргономика интерфейса на высшем уровне. Сделано так, чтобы было удобно пользоваться. Правда, удобство может обернуться обратной стороной, когда возникнет потребность расширять функционал посредством сторонних расширений. Надеюсь, разработчики предусмотрели и это. А пока что без расширений Chrome для меня просто забавная игрушка типа Opera. Странно, конечно, что разработчики взяли за основу движок Apple WebKit, а не Mozilla Gecko, но главное чтоб он хорошо работал и соблюдал стандарты по части рендеринга страниц.

Пожалуй, главным новшеством в Chrome является мульти-процессная архитектура (multi-process design). Это означает, что все вкладки и окна браузера живут не в одном процессе и делят процессорное время посредством искусственных механизмов в самом браузере, а в отдельных процессах и их разделением занимается операционная система. Теоретически это также должно позволить обрабатывать разные табы разными ядрами процессора на компьютерах с мультиядровыми процессорами. В Chrome есть один главный процесс самого браузера и по одному процессу на каждый непустой таб.

В существующих браузерах все табы работают в рамках одного процесса и браузер часто может не откликаться на действия пользователя, если в одном табе запустился какой-то тяжелый Javascript или Flash-ролик. Я провел небольшой эксперимент, встроив на страницу простенький Javascript, который тупо гонит пустой цикл из 10 млн итераций, запускающийся в момент загрузки страницы.

Результаты поведения разных браузеров различны. Лучше всех себя показала Опера 9.50 — окно браузера хоть и жутко тормозило, но тем не менее продолжало откликаться. Только скроллинг был не плавный, прерывистый. На втором месте Internet Explorer 6.0 — окно страницы на время работы скрипта повисло напрочь (даже окно не перерисовывалось), но зато другие окна IE продолжали работать и даже с меньшими тормозами, чем в Opera. Хуже всех себя показал, как это ни печально, Mozilla Firefox 3 — на время работы скрипта повисло всё! Все окна со всеми табами не перерисовывались и не вызывались на передний план, переключение между табами также было недоступно (естественно).

Реализация многозадачности внутри Firefox между его табами очень напоминает реализацию многозадачности в Windows 3.x. Кто помнит это чудо, тот поймет. Суть реализации в том, что программа (в нашем случае таб) выполняется столько времени, сколько посчитает нужным, а все остальные табы и сам браузер ждут, пока выполняющийся таб сам не вернет управление в браузер. Браузер лишь имеет средства защиты от слишком долго работающих скриптов, позволяя прервать его выполнение через 10 секунд.

В части использования памяти каждый таб содержит код и данные, одинаковые для всех табов и таким образом каждый таб требует некоторого фиксированного объема памяти — это плата за разделение табов на процессы, однако, при частом открытии и закрытии табов, память, выделенная процессом, фрагментируется и в результате когда новому табу нужен кусок памяти больший, чем свободный фрагмент, но меньше, чем сумма всех свободных фрагментов, таб выделяет новый блок памяти. И так по нарастающей. В результате процесс браузера с течением времени пожирает все больше и больше памяти, даже когда открыто совсем немного табов. Случающиеся утечки памяти также привязаны к процессу и эта память будет оставаться потерянной пока браузер (все его окна) не будет перезапущен. В случае с Chrome, достаточно просто закрыть таб, чтобы решить проблему утечки памяти конкретного таба. Каждый новый таб начинает свою работу с чистого листа. Вот страница комикса из официального письма Google с анонсом Chrome, которая наглядно иллюстрирует это:

Фрагмент комикса из анонса Google Chrome

Напишите что Вы об этом думаете


*


*


rel=nofollow включен, спам не поднимет Page Rank Вашего сайта



Anti-Spam Image
Введите этот код, чтобы подтвердить, что вы человек
*

* — Обязательно для заполнения

Перейти на главную страницу