Я весьма удивлен, что 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.
Ответы:
Разница, скорее всего, связана с архитектурой и выбором межпроцессного взаимодействия каждого браузера.
Современные веб-браузеры отображают страницы в отдельных процессах. У 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.
Это все догадки.
источник