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

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

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

При обработке одной страницы все ещё используются однопоточные схемы, что мешает использованию потенциала современных многоядерных CPU. Однопоточным остается связанный с DOM (Document Object Model) внутренний API, а также функции формирования содержимого окна, парсинга HTML и выполнения JavaScript, в контексте одной страницы. С ростом размера современных web-приложений и превращения браузера в платформу для выполнения web-приложений, однопоточная обработка одной страницы становится узким местом в производительности браузера.

В качестве выхода разработчики Mozilla пытаются переработать связанный с обработкой дерева DOM код, используя язык Rust. Основная идея заключается в том, чтобы разбить код DOM и рендеринга на более мелкие подзадачи, которые смогут выполняться параллельно и более эффективно использовать ресурсы многоядерных CPU. К сожалению, готового прототипа кода ещё не существует, определенных планов по внедрению данного проекта тоже пока нет - в настоящее время проект носит исследовательский характер.

Источник: http://www.opennet.ru/opennews/art.shtml?num=30918