-> ->

Ценный Servo - новый многопоточный двигатель для Firefox

В Mozilla полным ходом идёт экспериментальная разработка прототипа под названием Servo. Назначение проекта - использование конечного продукта в качестве нового двигателя для веб-браузера (разумеется это будет Firefox).

В чём возможные плюсы нового двигателя Servo? Многопоточность, ориентированность на выполнение параллельных задач, это позволит использовать всю мощь многоядерных архитектур, улучшить отклик браузера на выполняемые действия. Также предполагается улучшить безопасность и установить более строгий контроль за использованием оперативной памяти.

Вообще идея распараллелить задачи уже однажды приходила в компанию Mozilla, в 2009 году был запущен проект Electrolysis, спустя два года проект было принято заморозить, а освобождённые ресурсы направить на решение других проблем.

Как можно понять, Servo может решить множество проблем, которые присутствуют в существующих браузерах, обычно в приложениях используется один главный поток и несколько дочерних. Предполагается, что в новом двигателе все уровни выполнения задач будут распараллеливаться:

  • Использование архитектуры, ориентированной на выполнение задач. У всех главных компонентов браузера присутствуют свои отведённые роли с изолированными кусками памяти, при этом присутствует возможность отката и восстановления каждого компонента. Это позволит заменять различные части браузера и добиться большей свободы при экспериментах и исследованиях. В настоящее время данная задача выполнена.
  • Алгоритм Copy-on-write DOM. Предполагается, что DOM структура будет доступна в один и тот же момент через компонент контента (выполнение JavaScript) и компонент макета, сборка слоёв при этом может происходить при любых действиях с DOM-деревом, будь то запись, изменение структуры или чтение узлов. Задача частично выполнена.
  • Параллельная отрисовка. Две задачи отрисовки и сборка слоёв происходят в отдельных потоках, тем самым достигается улучшенная отзывчивость интерфейса. Также сборщик слоёв управляет своей памятью, что исключает случайные паузы при циклах сборки мусора. Задача выполнена.
  • Плиточный рендеринг. Предполагается, что экран будет разбиваться на отдельные участки, каждый из которых будет отрисовываться параллельно. Такой алгоритм полезен в первую очередь для мобильных устройств, возможна обработка только видимой части страниц. Задача выполнена частично.
  • Рендеринг слоёв. Использование специального Display-списка в виде субдеревьев, которые затем будут отправлены в GPU и отрисованы параллельно. Задача частично выполнена.
  • Выборка селекторов. В отличие от Gecko, Servo сможет делать выборку селекторов без привязки к макету, что позволяет легко распараллелить задачи. На данный момент задача не выполняется.
  • Распараллеливание обработки слоёв. Отрисовка на основе CSS-свойств это сложная задача. Решение этой проблемы пока отложено. Задача не выполняется.
  • Формирование текстов. Это внушительная часть внутреннего слоя, формирование текста это дорогостоящая операция, но при этом присутствует потенциал использования потоков для решения проблемы. На данный момент задача не выполняется.
  • Парсинг страницы. Обработка JavaScript-кода в несколько потоков может дать хороший результат, но потребуются существенные изменения в двигателе SpiderMonkey. Использование потоков при обработке HTML также позволит улучшить показатели производительности, а вот CSS-анализ даст наименьший эффект. Но в любом случае полный анализ страницы с помощью параллельных потоков приведёт к ожиданиям и сложности в реализации. Задача на данный момент не выполняется.
  • Декодирование изображений. Декодирование нескольких изображений параллельно легко осуществимо. Задача выполнена.
  • Декодирование других ресурсов. Несмотря на то, что изображений на страницах обычно больше чем остального контента, параллельный разбор таблиц стилей или декодинг видео позволит улучщить производительность и отзывчивость браузера. Задача частично выполнена.
  • Сборка мусора JavaScript параллельно формированию слоёв. В большинстве случаев JavaScript-код ожидает полной (или частичной) загрузки страницы и формирования слоёв, это самое подходящее время для запуска сборщика мусора.

В качестве языка программирования был выбран Rust, это экспериментальный язык, разрабатываемый подразделением Mozilla Research. Существует мнение, что скорость выполнения кода, написанного на Rust, очень близка к C++, но при этом присутствует набор удобных возможностей для разработки приложений с параллельным выполнением задач.

Поставить рейтинг:(Рейтинг: 2.91, оценок: 238)
 
Поделитесь новостью:

New! Полная статистика популярности браузеров по Рунету и миру. Системы сбора статистики LiveInternet, OpenStat, StatCounter в одном месте. Данные по всем популярным браузерам, таким как Google Chrome, Mozilla Firefox, Яндекс.Браузер, Opera, Microsoft Internet Explorer, а также альтернативным браузерам.

Возможно, Вам будут интересны новости:
События в тоже время:

Комментарии

Комментариев пока нет

Чтобы оставить комментарий - зарегистрируйтесь или авторизуйтесь через любимый сервис (ВКонтакте, Одноклассники, Twitter и др.) с помощью OpenID.