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.
Antworten:
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.
quelle