OS XでSafariだけが(ほぼ)完全な慣性スクロールを行うのはなぜですか?


18

私は、SafariがOS Xで(ほぼ)完全な慣性スクロールを管理できる唯一のブラウザーであることに非常に驚いています。

  • Webサイトに多くのFlashコンテンツがある場合でも、Safariのスクロールはスムーズです。
  • ロードするコンテンツが多数あるWebサイトがあり、Safariはコンテンツのロードおよびレンダリング中もスムーズにスクロールし続けます。
  • いくつかの拡張機能をインストールしても、スクロールのパフォーマンスには影響しません。

OS X上のSafariブラウザーの主要な競合相手はChromeとFirefoxです。どちらも、Safariで使用されているものと同じスムーズなスクロールを提供することはできません。

  • Google ChromeのすべてのページGPU合成などのフラグを有効にする(chrome://flags)または...
  • FirefoxのスムーズスクロールOptions > Advanced)は、Safariがデフォルトで提供するスクロールパフォーマンスを提供しません。

質問

SafariはプライベートAPIを使用して、Chrome / Firefox開発者がアクセスできないスムーズなスクロールを提供していますか?なぜSafariのスクロールは非常に優れており、競合他社は壊れていないスクロールを提供することができません。

Chromeは通常、新しいOS X機能に非常に高速に適応するため、特にChromeについて疑問に思っています。


1
同意しません。Firefoxのスクロールは、Safariよりはるかに優れています(2011年半ばのMacbook Airで10.7.4を使用しています)。Safariが常に少し引っ掛かるのに対して、ほとんど常にスムーズな60Hzです。ただし、2本指で横にスワイプして前後に移動すると、ズームと「カバー」効果が優れているため、私はまだSafariを使用する傾向があります。
スティーブンルー

2
くそ あなたがそれを指摘してからずっと、私はFirefoxが今よりもずっと引き裂いていることに気付いています。それはあちこちでそれをします。テキスト(このサイトのように)が連続フレーム間で一貫性なく移動すると、ちらつきや震えが発生します。
スティーブンルー

2
とにかく、Safari on LionをAppleのタッチ入力デバイス(タッチパッド/マジックマウス)と組み合わせると、おそらくどこでも利用できる最もユーザーフレンドリーで優れたレンダリングWebエクスペリエンスになります。vsyncが正しく適用されるため、アニメーションが破れることはなく、ピンチズームとスクロールして左に戻る機能を十分に活用できません。スクロールのしゃっくりが少しだけ起こることもありますが、これらの問題の原因をプロファイリングするには、内部ツールにアクセスする必要があると思います。Appleで仕事に就いたことがあれば、これに取り組みたいと思います。
スティーブンルー

1
うわー、たくさんのコメント。推測ではなく答えではないので、私は別のものを追加しています... SafariがWindowsで利用可能であるという事実を無視します(他の人はそうではありません)。残りのブラウザは、必然的に、ある程度、複数のプラットフォームとコードベースを共有するため、各プラットフォームで完璧なものにすることは困難です。
12

1
Safari プライベートAPIを使用しないと想像するのは困難です。そのようなAPIは、Appleのソフトウェアに機能を提供する以外の理由で存在しません。しかし...それは単なる推測だ、と私は実際にこの質問に答えるために、他の方法が表示されない
ダン・J

回答:


6

違いは、各ブラウザのアーキテクチャとプロセス間通信の選択に関係する可能性があります。

最新のWebブラウザーは、ページを個別のプロセスでレンダリングします。AppleにはIOSurfaceというフレームワークがあり、1つのプロセスが別のプロセスにイメージを渡すための合理化された方法を提供します。このフレームワークは、Mac OS X 10.6、別名Snow Leopardで導入され、QuickTimeの最新の反復版です。

QuickTimeは、IOSurfaceを使用して、ムービーのデコードを別のプロセスにオフロードします。デコードする必要がないため、QuickTime Playerアプリケーションはユーザーインターフェイスのみを処理し、デコードプロセスによって提供される画像を表示します。

SafariはQuickTimeから学び、同じテクニックを使用していると思われます。Webページは他のプロセスにオフロードされ、レンダリングされ、返されます。

ChromeとFirefoxはまったく同じことをすることができますか?課題は、ユーザーを処理するスレッドが迅速に応答し、レンダリングの更新を待つことを遅らせないことです。

Chromeは個別のプロセスを使用しており、MacではIOSurfaceを使用しているようです。このバグは、ChromeでのIOSurfaceの使用の改善に関するものです

IOSurfaceは、Mac OS X 10.6+アプリケーションで利用できるパブリックフレームワークです。ただし、ドキュメントはほとんどなく、Mac固有です。

これはすべて推測です。


Chromeはコンテンツのレンダリングに個別のプロセスfwiwを使用します。
ネイサングリーンスタイン

1
ご回答ありがとうございます!これまでのところ、この質問に対する共鳴がほとんどないのは悲しいことです。しかし、主な情報源を参照できない場合、これを理解できます。
ゲントマット

@gentmatt WebKitを使用するブラウザーでのスクロール体験をどのように見つけますか?これは、ブラウザーのレンダリングエンジンの影響を周囲のブラウザーインターフェイス実装から分離するのに役立つ場合があります。OmniWebはWebKitを使用していると思います。
グラハムミル

@GrahamMiln ChromeはWebkitも使用します。しかし、Chromeのスクロールは完璧とはほど遠い、IMOです。それは本当にウェブサイトのコンテンツに依存します。一般的に、パフォーマンスはそれほど良くありません。
ゲントマット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.