Почему только 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.


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. Это действительно зависит от содержания сайта. Как правило, производительность не так хорошо.
Джентмэтт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.