Mozilla собирается реализовать многопоточный рендеринг web-страниц

Mozilla собирается реализовать многопоточный рендеринг web-страниц

Представитель проекта Mozilla в рамках конференции O'Reilly Velocity озвучил идею создания механизма многопоточной обработки DOM-дерева. Это приведет к существенному ускорению отображения отдельных Интернет-страниц, поскольку в процесс обработки отдельной web-страницы будут вовлечены несколько процессорных ядер.

Пока что этот проект находится в начальной стадии разработки. Он базируется на использовании языка программирования Rust, разрабатываемого в недрах компании Mozilla. Rust будет ориентирован в первую очередь на безопасность и параллелизм

Автор языка программирования Rust Грейдон Хоаре (Graydon Hoare) в настоящее время является сотрудником Mozilla. По словам докладчика, Хоаре работает над развитием Rust в режиме полной занятости.

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

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

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

Во всех этих случаях каждая отдельная функция выносится в отдельный процесс. А все процессы могут функционировать параллельно. В случае с WebGL за счет привлечения ресурсов GPU можно обеспечить снижение нагрузки на CPU.

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

В настоящее время однопоточным остается внутренний API, связанный с DOM (Document Object Model), а, кроме того, функции формирования содержимого окна, выполнения javascript и парсинга HTML в контексте одной страницы.

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

Чтобы «разрулить» ситуацию разработчики от Mozilla предпринимают попытки переработать код связанный с обработкой дерева DOM при помощи языка программирования Rust.

Суть идеи заключается в том, чтобы суметь разбить код DOM и рендеринга на несколько более мелких подзадач, которые будут выполняться параллельно и соответственно более эффективно использовать ресурсы современных многоядерных CPU.

Но, к сожалению, до сих пор готового прототипа такого кода еще не существует. Нет и никаких определенных планов относительно внедрения данного проекта. Все это находится только на стадии исследования.