Warum bietet nur Safari (fast) perfektes Inertial-Scrolling in OS X?

18

Ich bin ziemlich erstaunt, dass Safari der einzige Browser in OS X ist, der (fast) perfektes Inertial-Scrolling schafft.

  • Selbst mit vielen Flash-Inhalten auf einer Website ist das Scrollen in Safari reibungslos.
  • Es gibt Websites mit vielen Inhalten, die geladen werden müssen, und Safari führt weiterhin einen reibungslosen Bildlauf durch, während der Inhalt geladen und gerendert wird.
  • Das Installieren mehrerer Erweiterungen hat keine Auswirkungen auf die Bildlaufleistung.

Die Hauptkonkurrenten des Safari-Browsers unter OS X sind Chrome und Firefox. Beiden gelingt es nicht, den gleichen reibungslosen Bildlauf wie in Safari zu erzielen:

  • Aktivieren von Flags wie GPU-Compositing auf allen Seiten in Google Chrome ( chrome://flags) oder ...
  • Reibungsloses Scrollen in Firefox ( Options > Advanced) bietet nicht die Scrollleistung, die Safari standardmäßig bietet.

Frage

Verwendet Safari eine private API, um einen reibungslosen Bildlauf zu ermöglichen, auf den die Chrome / Firefox-Entwickler nicht zugreifen können? Warum ist das Scrollen in Safari so viel besser und die Konkurrenz schafft es nicht, fehlerfreies Scrollen zu liefern?

Ich wundere mich besonders über Chrome, da es sich normalerweise sehr schnell an neue OS X-Funktionen anpasst.

Gentmatt
quelle
1
Ich stimme dir nicht zu. Das Scrollen in Firefox ist dem in Safari weit überlegen (ich arbeite mit 10.7.4 auf einem Macbook Air Mitte 2011): Es ist fast immer flüssig bei 60 Hz, während Safari immer ein bisschen "hängen bleibt". Ich benutze Safari immer noch, weil ich mit zwei Fingern zur Seite wische, um vorwärts oder rückwärts zu gehen.
Steven Lu
2
Teufel noch mal. Seitdem Sie darauf hingewiesen haben, fällt mir auf, dass Firefox jetzt viel mehr zerreißt. Es macht es überall. Text (wie auf dieser Site) flackert und schaudert, wenn er sich uneinheitlich über aufeinanderfolgende Frames bewegt.
Steven Lu
2
In jedem Fall ist Safari on Lion in Kombination mit den Touch-Eingabegeräten von Apple (Touchpad / Magic Mouse) das wahrscheinlich benutzerfreundlichste und schönste Rendering-Web-Erlebnis, das es gibt. Es wendet Vsync korrekt an und daher reißen keine Animationen auf und ich kann nicht genug von den engen Funktionen für Prise-Zoom und Scroll-Links-To-Go-Back bekommen. Manchmal wird ein leichter Bildlauf durchgeführt, aber ich denke, wir benötigen Zugriff auf interne Tools, um herauszufinden, was diese Probleme verursacht. Wenn ich jemals einen Job bei Apple bekomme, würde ich gerne daran arbeiten.
Steven Lu
1
Wow, jede Menge Kommentare. Ich füge eine weitere hinzu, da es sich um Spekulationen und nicht um eine Antwort handelt. Da Safari unter Windows verfügbar ist (warum nicht, alle anderen), ist Safari meiner Meinung nach nur für den Mac geschrieben. und der Rest der Browser teilt notwendigerweise in gewissem Maße die Codebasis mit mehreren Plattformen, was es schwierig macht, sie für jede einzelne perfekt zu machen.
stuffe
1
Es ist schwer vorstellbar, dass Safari keine privaten APIs verwendet. Solche APIs gibt es nur, um Funktionen für Apples Software bereitzustellen. Aber das ist nur eine Vermutung, und ich sehe keinen anderen Weg, um diese Frage tatsächlich zu beantworten ...
Dan J

Antworten:

6

Der Unterschied hängt wahrscheinlich mit der Architektur und den Interprozesskommunikationsoptionen der einzelnen Browser zusammen.

Moderne Webbrowser rendern Seiten in separaten Prozessen. Apple hat ein Framework namens IOSurface , das eine optimierte Möglichkeit bietet, mit der ein Prozess ein Bild an einen anderen Prozess weitergibt . Dieses Framework wurde in Mac OS X 10.6 (auch bekannt als Snow Leopard) für die neueste Version von QuickTime eingeführt.

QuickTime verwendet IOSurface, um die Filmdecodierung auf separate Prozesse zu verlagern. Ohne Dekodierung bleibt die QuickTime Player-Anwendung nur mit der Benutzeroberfläche beschäftigt und zeigt Bilder an, die durch die Dekodierungsprozesse bereitgestellt werden.

Ich vermute, Safari hat von QuickTime gelernt und verwendet die gleichen Techniken. Webseiten werden an andere Prozesse ausgelagert, gerendert und zurückgegeben.

Könnten Chrome und Firefox auf jeden Fall dasselbe tun? Die Herausforderung besteht darin, sicherzustellen, dass der Thread, der sich mit dem Benutzer befasst, schnell reagiert und nicht auf die Aktualisierung des Renderings wartet.

Chrome verwendet separate Prozesse und scheint IOSurface auf dem Mac zu verwenden. In diesem Fehler geht es darum, die Verwendung von IOSurface in Chrome zu verbessern .

IOSurface ist ein öffentliches Framework, das für alle Mac OS X 10.6+ -Anwendungen verfügbar ist. Es gibt jedoch wenig Dokumentation und es ist Mac-spezifisch.

Das ist alles eine Vermutung.

Graham Miln
quelle
Chrome verwendet separate Prozesse zum Rendern von Inhalten, fwiw.
Nathan Greenstein
1
Vielen Dank für Ihre Antwort! Es ist traurig, dass diese Frage bisher so wenig Anklang findet. Aber ich kann das verstehen, wenn man sich nicht auf Primärquellen beziehen kann.
Gentmatt
@gentmatt Wie findest du das Scrollen in Browsern, die WebKit verwenden? Dies kann dazu beitragen, die Auswirkungen der Rendering-Engine des Browsers von der Implementierung der umgebenden Browser-Oberfläche zu trennen. Ich glaube, OmniWeb verwendet WebKit.
Graham Miln
@ AbrahamMiln Chrome verwendet auch Webkit. Aber das Scrollen in Chrome ist alles andere als perfekt, IMO. Es kommt wirklich auf den Inhalt der Website an. Im Allgemeinen ist die Leistung nicht so gut.
Gentmatt