Включение вкладок в Firefox с потерей вклада

Быстрое выполнение операций со вкладками

Со времени работы в команде Electrolysis (и, перейдя к работе над различными инициативами по производительности), я работал над тем, чтобы операции с вкладками в Firefox происходили быстрее. Например, я написал несколько месяцев назад о методе, которую мы использовали для ускорения закрытия вкладок.

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

Что такое «потепление вкладок»?

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

За исключением некоторых вырожденных случаев , этот механизм работал очень хорошо, так как мы его ввели, но я думаю, что мы можем сделать немного лучше.

«Сопоставление табуляции» - это то, что мы называем процессом упреждающего воспроизведения слоев для вкладки и предварительной уставки их в композитор, когда мы уверены, что вы, вероятно, перейдете на эту вкладку. 1

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

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

Однако есть определенные сайты, которые мы не можем отображать и загружать слои так же быстро. Это сайты, которые, по моему мнению, помогут согреться.

Вот пример такого сайта

В приведенной выше ссылке используются SVG и CSS для анимации. К сожалению, на моем MBP, если я сейчас открываю эту вкладку в фоновом режиме в Firefox и переключаюсь на нее, между щелчком этой вкладки и заметной задержкой есть заметная задержка. 3

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

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

И в том случае, если мы ошибались, и вам не было интересно видеть вкладку, мы в конечном счете отбрасываем загруженные слои.

На моей собственной машине это существенно влияет на производительность отображаемого вкладчика с указанным выше сайтом.

Пробуждение в ночном режиме

В настоящее время контроль утечки осуществляется с помощью этого предпочтения:

browser.tabs.remote.warmup.enabled

и в настоящее время отключен по умолчанию, пока мы тестируем его и получаем больше перегибов. Если вы заинтересованы в том, чтобы помочь нам проверить, переверните это предпочтение в Firefox Nightly и сообщите об ошибках файла, если увидите, что он вводит странное поведение.

Надеюсь, мы сможем повернуть его по умолчанию в ближайшее время . Будьте на связи!


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

  2. К счастью, мы можем прервать JavaScript, к счастью! 

  3. Я подозреваю, что WebRender в конечном итоге поможет с сырой производительностью рендеринга, но это все еще немного от того, чтобы быть отправленным пользователям. 


Текст распространяется по лицензии CC BY 3.0