«Файерфокс» всех версий всегда работал на однопроцессовой модели построения. На фоне повышения интереса к распаралелливанию потоков и задач, начался бум браузера Google Chrome (в нем впервые в один поток отделили процессы для интерфейса, а в другой поток – процессы для работы с контентом). Вскоре примеру Chrome последовали и другие игроки браузерного рынка, а в Mozilla даже запустили проект Electrolysis, ориентированный на адаптацию движка к работе с несколькими процессами.
Что вынудило американского разработчика ПО Mozilla Corp. переключиться на неизвестную для себя модель? Должно быть, у них есть весомые аргументы? Да, есть! На новой архитектуре они смогут значительно повысить отзывчивость браузера Firefox и его производительность. Основная цель разработок вообще сводится к уменьшению подвисания при выполнении стандартных операций (например, загрузке крупных страниц, наборе текста в веб-формате или прокрутке перегруженных элементами страниц).
Отзывчивость иногда даже имеет для пользователей большее значение, чем производительность. Часть работ по переходу на мультипроцессовую архитектуру в Mozilla выполнили в рамках проекта Snappy, основные задачи которого сводились к следующему:
Простейшие из описанных задач уже реализованы, а на «десерт» осталось только самое сложное.
Другая необходимость – это безопасность. Так, если какой-то злоумышленник обнаруживает в текущем исполнении «Файерфокса» какой-то баг, то ему не составляет труда выполнить произвольный код на любом количестве машин пользователей. Для решения проблем с безопасностью необходимо внедрить современные техники и приемы, но самым эффективным приемом по сей день остается возможность запуска кода в «песочнице».
Но при размещении однопроцессового Mozilla Firefox в «песочнице» его эффективность сильно страдает: песочница преграждает процессу выполнение лишь тех действий, которые он не должен делать, а в текущей организации браузера (особенно с кипой дополнений на «спине») ему требуется широкий доступ к Интернету и файловой системе.
Реализация мультипроцессового Mozilla Firefox позволит запускать каждый процесс веб-контента в песочнице с глубоким ограничением прав, что, по прогнозам разработчиков, позволит значительно повысить устойчивость браузера к разного рода атакам. Контролировать доступ к файловой системе в новом браузере будет главный процессор.
Что интересно во всем этом, так это стремление разработчиков всеми силами повысить стабильность браузера Firefox, в то время как он остается одним из самых стабильных на рынке. С переходом на новую архитектуру браузер перестанет падать из-за сбоя в одном процессе: он начнет ограничиваться падением лишь конкретной вкладки или даже элемента.
Посмотреть, что получилось у команды Билла Макклоски можно уже сегодня. Просто скачайте ночную сборку Mozilla Firefox и установите для параметра browser.tabs.remote значение true. Чтобы увидеть, как отдельные процессы потребляют системные ресурсы, создадите новый профиль about:memory.
Больше всего вопросов у пользователей возникает с потреблением браузером оперативной памяти. Пользователи почему-то убеждены, что чем больше процессов одновременно запущено в браузере, тем больше памяти они занимают. Но после ряда оптимизаций и внедрения определенных видов кэша, разработчики обещают повышение безопасности и сохранение быстродействия. Так, если в одном из процессов есть какие-то данные, которые могут оказаться полезными для другого процесса, то они могут обменяться ими, не дублируя одни и те же строки в отдельных областях памяти.
На данный момент еще рано судить, когда Mozilla подготовит релиз мультипроцессового Firefox – у разработчиков еще очень много работы. Другую информацию о новой архитектуре читайте на личном блоге Билла Макклоски.