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

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

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

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

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

Вопрос

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

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

Я не согласен. Прокрутка в Firefox намного лучше, чем в Safari (у меня 10.7.4 на Macbook Air середины 2011 года): почти всегда плавная прокрутка 60 Гц, в то время как Safari всегда немного «заедает». Я, как правило, все еще использую Safari из-за приятного масштабирования и эффекта «обложки», когда два пальца перемещаются в сторону, чтобы вернуться назад или вперед.
@StevenLu Как насчет разрыва экрана или других мелких сбоев? Вы испытываете это в Firefox? Хотя я могу сказать, что прокрутка в Firefox более плавная, чем в Chrome, она сопровождается графическими сбоями. Chrome не имеет разрывов или сбоев, но имеет тенденцию заикаться. Safari большую часть времени не тормозит и не тормозит.
Я не понимаю, как вы можете заметить разрывы при прокрутке в основном по вертикали (поскольку так настроено большинство веб-сайтов). Ситуация, когда разрыв очевиден, возникает в игре-шутере от первого лица, когда вы быстро перемещаете прицел влево и вправо: кадр, первая половина которого была визуализирована, отбрасывается в середину, чтобы быть замененным более новым кадром (с другим видом). для всего остального. При вертикальной прокрутке это просто не должно быть проблемой. Во всяком случае, у меня много заметных заиканий в Safari. :( Стало лучше после обновления 10.7.4. И Chrome хуже, чем Safari.
Разрыв экрана @StevenLu Firefox: это и это . Safari должен иметь действительно плавную прокрутку. Однажды у меня была проблема с плохой прокруткой в ​​​​Safari при обновлении до Lion. Но после полной чистой переустановки прокрутка стала плавной как по маслу.
Хм. Боковая прокрутка сайта 360flex сильно рвется в Firefox. В Safari нет разрывов, но он работает со скоростью около 25 кадров в секунду, что я бы предпочел. Я думал о переустановке, и у меня есть веские основания ожидать, что переустановка Lion будет менее болезненной, чем Windows (и я бы вернул большинство своих настроек), но у меня все еще слишком много настроек, которые я хочу, чтобы они хотели сделать это вообще. Такие вещи, как полноэкранная прокрутка четырьмя пальцами (между полноэкранными приложениями), не разрывается и работает плавно. Мне это очень нравится.
Черт. С тех пор, как вы указали на это, я заметил, что Firefox разрывается намного больше. Он делает это повсеместно. Текст (как на этом сайте) мерцает и дрожит, поскольку он непоследовательно перемещается по последовательным кадрам.
@StevenLu Ну, извини за это :/
Во всяком случае, Safari на Lion в сочетании с устройствами сенсорного ввода Apple (сенсорная панель/волшебная мышь), вероятно, является наиболее удобным и приятным веб-приложением для рендеринга, доступным где бы то ни было. Он правильно применяет вертикальную синхронизацию, поэтому анимация не рвется, и мне не хватает функций масштабирования и прокрутки влево-назад. Иногда прокрутка немного тормозит, но я думаю, что нам понадобится доступ к внутренним инструментам, чтобы иметь возможность профилировать, что вызывает эти проблемы. Если я когда-нибудь получу работу в Apple, я бы хотел работать над этим.
Эй, @gentmatt, вы заметили, что чем меньше область прокрутки, тем более вероятно, что прокрутка будет плавной? Если я сделаю так, чтобы окно Safari покрывало только 2/3 экрана, прокрутка стала более плавной.
@StevenLu Да, то же самое верно и для Chrome. Я также заметил, что прокрутка в собственном полноэкранном режиме Lion обеспечивает более плавную прокрутку.
Я не замечаю, чтобы родной полноэкранный режим улучшал заминки прокрутки, которые я получаю.
Я не думаю, что на этот вопрос можно ответить наверняка: если Safari использует частные API, кто может сказать наверняка? OTOH, другие приложения (такие как TextEdit, Mail и Preview) имеют такую ​​же плавную «инерционную» прокрутку, как и Safari, поэтому маловероятно, что Safari делает что-то особенное.
Вау, куча комментариев. Я добавляю еще одно, так как это предположение, а не ответ ... Игнорируя тот факт, что Safari доступен в Windows (почему бы и нет, все остальные делают ...), я думаю, что Safari написан для Mac просто, а остальные браузеры обязательно в той или иной степени делят кодовую базу с несколькими платформами, что затрудняет доведение ее до совершенства на каждой из них.
Трудно представить, что Safari не будет использовать частные API: такие API существуют только для того, чтобы предоставлять функции программному обеспечению Apple. Но это всего лишь предположение, и я не вижу другого способа ответить на этот вопрос...
Я заметил ту же проблему и хотел бы знать, почему и как ее исправить. Я просто не могу привыкнуть к постоянному использованию Safari, но, возможно, мне следует...

Ответы (1)

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

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

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

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

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

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

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

Это все домыслы.

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