Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Высокопроизводительный сетевой стек Chrome

Глава 1 из книги "Производительность приложений с открытым исходным кодом".

Оригинал: High Performance Networking in Chrome
Автор: Ilya Grigorik
Дата публикации: 21 Сентября 2012 г.
Перевод: А.Панин
Дата перевода: 2 Декабря 2013 г.

История и принципы развития веб-браузера Google Chrome

Первый релиз веб-браузера Google Chrome был выпущен во второй половине 2008 года в формате бета-версии для платформы Windows. Созданный разработчиками компании Google код, лежащий в основе Chrome, был также доступен в соответствии с условиями пермиссивной лицензии BSD и послужил основой известного на сегодняшний день проекта Chromium. Для большинства наблюдателей эти события были достаточно неожиданными: неужели снова могли начаться войны браузеров? Сможет ли компания Google создать на самом деле качественный продукт?

"Это было настолько прекрасно, что мне пришлось изменить мнение..."
- Eric Schmidt комментирует свое изначальное негативное отношение к идее разработки Google Chrome.

В итоге все удалось. На сегодняшний день Chrome является одним из наиболее широко используемых для работы в сети браузеров (в соответствии с данными StatCounter рыночная доля составляет более 35%), при этом он доступен на платформах Windows, Linux, Mac OS X, Chrome OS, а также Android и iOS. Очевидно, что возможности и функции программного продукта привлекли внимание пользователей и многие инновации из Chrome также нашли свое место в других популярных браузерах.

Оригинальные 38-страничные комиксы, описывающие идеи и инновации Google Chrome позволяют ознакомиться с идеями и процессом проектирования, позволившими создать популярный веб-браузер. Однако, это было только началом. Основные принципы, которое мотивировали разработчиков начальных версий браузера, продолжают быть принципами текущих усовершенствований Chrome:
Скорость
Необходимо создать самый быстрый браузер
Безопасность
Необходимо предоставить пользователю самое безопасное окружение
Стабильность
Необходимо предоставить гибкую и стабильную платформу для веб-приложений
Простота
Необходимо реализовать сложные технологии, окруженные простым пользовательским интерфейсом

Многогранность вопросов производительности

Современный веб-браузер является практически такой же сложной платформой, как и ваша операционная система, и Google Chrome проектировался с учетом этой аналогии. До появления Google Chrome все наиболее популярные браузеры были монолитными приложениями, использующими по одному процессу. Все открытые страницы делили одно и то же адресное пространство и пытались использовать одни и те же ресурсы. Ошибка на любой из страниц или в браузере могла привести компрометации всех страниц.

Chrome, в отличие от описанной выше модели, использует многопроцессную модель, которая позволяет осуществить изоляцию процесса и памяти и предоставить ограниченный безопасный контейнер для каждой вкладки. В мире многоядерных процессоров возможность изоляции процессов наряду с защитой каждой вкладки от воздействия других некорректно работающих страниц указывает на то, что Chrome имеет значительное преимущество по сравнению с конкурирующими продуктами. На самом деле, стоит упоминания и тот факт, что большинство браузеров уже последовали примеру Chrome или находятся в процессе миграции на аналогичную архитектуру.

В рамках созданного системного процесса ход исполнения веб-приложения в общем случае состоит из трех задач: получение ресурсов, формирование и вывод страницы и исполнение сценариев JavaScript. На этапах вывода страницы и исполнения сценариев используется однопоточная последовательная модель исполнения, так как невозможно осуществлять параллельные модификации результирующей объектной модели документа (Document Object Model - DOM). Частично это происходит из-за того, что JavaScript сам по себе является языком, предусматривающим однопоточное исполнение. Таким образом, оптимизация метода взаимодействия механизмов вывода страницы и исполнения сценариев критически важна как для веб-разработчиков, создающих приложения, так и для разработчиков, работающих над браузером.

Для вывода страниц Chrome использует систему Blink, являющуюся быстрой, открытой и соответствующей стандартам системой вывода страниц. Для исполнения сценариев на языке JavaScript Chrome поставляется со своей собственной реализацией в значительной степени оптимизированного интерпретатора JavaScript V8, который также был выпущен в виде отдельного проекта с открытым исходным кодом и нашел свое место в составе многих других популярных проектов - например, в проекте Node.js в качестве интерпретатора. Однако, оптимизации процесса исполнения сценариев на языке JavaScript интерпретатором V8 или оптимизации конвейеров разбора и вывода страниц системы Blink не улучшат пользовательские качества браузера в том случае, если браузер блокируется при обращении к сети, ожидая доставки ресурсов.

Реализация в рамках браузера возможности оптимизации последовательности, приоритета и задержки для каждого сетевого ресурса является одним из наиболее важных улучшений его пользовательских качеств. Вы можете не замечать этого, но сетевой стек веб-браузера Chrome буквально каждый день становится умнее, пытаясь скрыть или сократить задержки доставки для каждого из ресурсов: он сохраняет вероятно полезные в будущем данные DNS, он запоминает топологию сети, он предварительно соединяется с вероятными целевыми узлами, а также выполняет другие действия. Снаружи он представляется простым механизмом получения ресурсов, но внутри это сложный и занимательный пример того, как следует оптимизировать производительность работающих с сетью приложений для реализации лучших пользовательских качеств.

Давайте разбираться.

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


Продолжение статьи: Чем является современное веб-приложение?.