Почему только Safari имеет (почти) совершенную инерционную прокрутку в OS X?

18

Я весьма удивлен, что Safari - единственный браузер в OS X, которому удается получить (почти) идеальную инерционную прокрутку.

  • Даже при большом количестве флэш-контента на веб-сайте, прокрутка в Safari плавная.
  • Существуют веб-сайты с большим количеством контента для загрузки, и Safari будет продолжать плавно прокручиваться, пока контент загружается и отображается.
  • Установка нескольких расширений не влияет на производительность прокрутки.

Основными конкурентами браузера Safari на OS X являются Chrome и Firefox. И тем, и другим не удается обеспечить такую ​​же плавную прокрутку, как в Safari:

  • Включение таких флагов, как GPU-композитинг на всех страницах в Google Chrome ( chrome://flags) или ...
  • плавная прокрутка в Firefox ( Options > Advanced) не обеспечивает производительность прокрутки, которую Safari обеспечивает по умолчанию.

Вопрос

Использует ли Safari закрытый API для плавной прокрутки, недоступной разработчикам Chrome / Firefox? Почему прокрутка в Safari стала намного лучше, и конкурентам не удается обеспечить непрерывную прокрутку.

Меня особенно интересует Chrome, потому что он обычно очень быстро адаптируется к новым функциям OS X.

gentmatt
источник
1
Я не согласен. Прокрутка в Firefox намного превосходит прокрутку в Safari (я на 10.7.4 на Macbook Air в середине 2011 года): она почти всегда работает на частоте 60 Гц, в то время как Safari всегда немного «цепляет». Я все еще использую Safari, хотя из-за приятного масштабирования и эффекта «прикрытия», когда два пальца движутся вбок, чтобы вернуться назад или вперед.
Стивен Лу
2
Проклятье. С тех пор, как вы отметили это, я заметил, что Firefox разрывает намного больше. Он делает это повсеместно. Текст (как на этом сайте) мерцает и содрогается, когда они непоследовательно перемещаются по последовательным кадрам.
Стивен Лу
2
В любом случае, Safari на Lion в сочетании с сенсорными устройствами ввода Apple (тачпад / волшебная мышь), вероятно, самый удобный и приятный веб-интерфейс для рендеринга из всех. Он корректно применяет vsync, поэтому анимации не рвутся, и я не могу получить достаточно жестких возможностей масштабирования по принципу пинч-масштабирования и прокрутки влево-назад. Иногда прокрутка слегка сбивает с толку, но я думаю, что нам нужен доступ к внутренним инструментам, чтобы иметь возможность профилировать, что вызывает эти проблемы. Если я когда-нибудь получу работу в Apple, я бы хотел поработать над этим.
Стивен Лу
1
Вау, куча комментариев. Я добавляю еще один, поскольку это предположение, а не ответ ... Игнорируя тот факт, что Safari доступен в Windows (Почему нет, все остальные делают ...), я думаю, что это просто вопрос написания Safari для Mac, а остальные браузеры обязательно в какой-то степени обмениваются кодовой базой с несколькими платформами, что затрудняет доведение до совершенства каждой из них.
Stuff
1
Трудно представить, что Safari не будет использовать частные API: такие API существуют только для того, чтобы предоставлять функции программному обеспечению Apple. Но это только предположение, и я не вижу другого способа ответить на этот вопрос ...
Дэн Дж

Ответы:

6

Разница, скорее всего, связана с архитектурой и выбором межпроцессного взаимодействия каждого браузера.

Современные веб-браузеры отображают страницы в отдельных процессах. У Apple есть инфраструктура под названием IOSurface, которая обеспечивает упрощенный способ передачи изображения одним процессом другому процессу. Эта структура была представлена ​​в Mac OS X 10.6, известной как Snow Leopard, для последней итерации QuickTime.

QuickTime использует IOSurface для разгрузки декодирования фильмов для разделения процессов. Без декодирования приложение QuickTime Player остается работать исключительно с пользовательским интерфейсом и отображать изображения, предоставляемые процессами декодирования.

Я подозреваю, что Safari извлек уроки из QuickTime и использует те же методы. Веб-страницы выгружаются в другие процессы, обрабатываются и передаются обратно.

Могли ли Chrome и Firefox сделать одно и то же, абсолютно. Задача состоит в том, чтобы поток, работающий с пользователем, отвечал быстро и не задерживался в ожидании обновления рендеринга.

Chrome использует отдельные процессы и, похоже, использует IOSurface на Mac; эта ошибка говорит об улучшении использования Chrome IOSurface .

IOSurface - это общедоступная структура, доступная для любого приложения Mac OS X 10.6+. Однако документации мало, и она специфична для Mac.

Это все догадки.

Грэм Милн
источник
Chrome использует отдельные процессы для рендеринга контента.
Натан Гринштейн
1
Спасибо за ваш ответ! Печально, что на этот вопрос так мало резонанса. Но я могу понять это, если нельзя ссылаться на первоисточники.
Джентматт
@gentmatt как вы находите возможности прокрутки в браузерах, которые используют WebKit? Это может помочь отделить влияние движка рендеринга браузера от реализации интерфейса браузера. Я считаю, что OmniWeb использует WebKit.
Грэм Милн
@GrahamMiln Chrome также использует Webkit. Но прокрутка Chrome довольно далека от совершенства, IMO. Это действительно зависит от содержания сайта. Как правило, производительность не так хорошо.
Джентмэтт