Dlaczego tylko Safari ma (prawie) doskonałe przewijanie bezwładnościowe w OS X?

18

Jestem dość zaskoczony, że Safari jest jedyną przeglądarką w systemie OS X, która potrafi uzyskać (prawie) idealne przewijanie bezwładnościowe.

  • Nawet przy dużej ilości treści flash na stronie, przeglądanie Safari jest płynne.
  • Istnieją strony internetowe z dużą ilością treści do załadowania, a Safari będzie nadal płynnie przewijać podczas ładowania i renderowania treści.
  • Zainstalowanie kilku rozszerzeń nie ma wpływu na wydajność przewijania.

Głównymi konkurentami przeglądarki Safari w systemie OS X są Chrome i Firefox. Oba nie zapewniają takiego samego płynnego przewijania, jak w Safari:

  • Włączanie flag takich jak tworzenie GPU na wszystkich stronach w Google Chrome ( chrome://flags) lub ...
  • płynne przewijanie w przeglądarce Firefox ( Options > Advanced) nie zapewnia domyślnej wydajności przewijania, jaką zapewnia Safari.

Pytanie

Czy Safari używa prywatnego API do płynnego przewijania, do którego twórcy Chrome / Firefox nie mają dostępu? Dlaczego przewijanie Safari jest o wiele lepsze, a konkurenci nie są w stanie zapewnić nieprzerwanego przewijania.

Zastanawiam się zwłaszcza nad Chrome, ponieważ zwykle bardzo szybko dostosowuje się do nowych funkcji OS X.

gentmatt
źródło
1
Nie zgadzam się. Przewijanie przeglądarki Firefox jest znacznie lepsze niż w Safari (korzystam z wersji 10.7.4 na MacBooku Air z połowy 2011 roku): prawie zawsze jest płynnie 60 Hz, podczas gdy Safari zawsze trochę „zaczepia”. Nadal jednak używam Safari z powodu przyjemnego powiększania i efektu „zasłaniania”, gdy przesuwasz dwoma palcami w bok, aby przejść do tyłu lub do przodu.
Steven Lu
2
Cholera. Odkąd zwróciłeś na to uwagę, teraz zauważam, że Firefox dużo bardziej się rozrywa. Robi to wszędzie. Tekst (jak na tej stronie) migocze i drży, gdy nierównomiernie przesuwają się między kolejnymi ramkami.
Steven Lu,
2
W każdym razie Safari na lwie w połączeniu z dotykowymi urządzeniami Apple (touchpad / magiczna mysz) jest prawdopodobnie najbardziej przyjaznym dla użytkownika i najprzyjemniejszym sposobem renderowania w sieci. Prawidłowo stosuje vsync, więc żadne animacje nie ulegają rozerwaniu, a ja nie mam dość ciasnych funkcji powiększania i przewijania w lewo i do tyłu. Czasami przewijanie czkawek nieco, ale myślę, że potrzebowalibyśmy dostępu do wewnętrznych narzędzi, aby móc profilować, co powoduje te problemy. Jeśli kiedykolwiek dostanę pracę w Apple, chciałbym nad tym popracować.
Steven Lu
1
Wow, mnóstwo komentarzy. Dodam kolejną, ponieważ jest to spekulacja, a nie odpowiedź ... Ignorując fakt, że Safari jest dostępne w systemie Windows (dlaczego nie, wszyscy inni robią ...), myślę, że to prosta kwestia pisania Safari na Maca, a pozostałe przeglądarki koniecznie współużytkują, do pewnego stopnia, bazę kodową z wieloma platformami, co utrudnia uzyskanie idealnej na każdej z nich.
faszerowanie
1
Trudno sobie wyobrazić, że Safari nie używa prywatnych interfejsów API: takie interfejsy API istnieją tylko w celu zapewnienia funkcji oprogramowaniu Apple. Ale to tylko przypuszczenie i nie widzę innego sposobu, aby odpowiedzieć na to pytanie ...
Dan J

Odpowiedzi:

6

Różnica prawdopodobnie dotyczy architektury i komunikacji międzyprocesowej w każdej przeglądarce.

Nowoczesne przeglądarki internetowe wyświetlają strony w osobnych procesach. Apple ma strukturę o nazwie IOSurface, która zapewnia usprawniony sposób, w jaki jeden proces może przekazać obraz do innego procesu. Środowisko to zostało wprowadzone w Mac OS X 10.6, czyli Snow Leopard, w najnowszej wersji QuickTime.

QuickTime używa IOSurface do odciążenia dekodowania filmów w celu oddzielenia procesów. Bez konieczności dekodowania, aplikacja QuickTime Player zajmuje się wyłącznie interfejsem użytkownika i pokazuje obrazy dostarczone przez procesy dekodowania.

Podejrzewam, że Safari nauczyła się od QuickTime i używa tych samych technik. Strony internetowe są przenoszone do innych procesów, renderowane i przekazywane z powrotem.

Czy Chrome i Firefox mogą zrobić to samo, absolutnie. Wyzwanie polega na tym, aby wątek zajmujący się użytkownikiem reagował szybko i nie czekał na oczekiwanie na aktualizację renderowania.

Chrome korzysta z osobnych procesów i wydaje się używać IOSurface na Macu; ten błąd mówi o ulepszeniu korzystania z IOSurface przez Chrome .

IOSurface to platforma publiczna dostępna dla dowolnej aplikacji Mac OS X 10.6+. Jednak dokumentacja jest niewielka i dotyczy wyłącznie komputerów Mac.

To wszystko przypuszczenie.

Graham Miln
źródło
Chrome używa osobnych procesów do renderowania zawartości, fwiw.
Nathan Greenstein,
1
Dziękuję za Twoją odpowiedź! To smutne, że do tej pory jest tak mało rezonansu. Ale rozumiem to, jeśli nie można odwoływać się do podstawowych źródeł.
gentmatt
@gentmatt, jak oceniasz przewijanie w przeglądarkach korzystających z WebKit? Może to pomóc oddzielić wpływ silnika renderującego przeglądarki od implementacji otaczającego interfejsu przeglądarki. Wierzę, że OmniWeb używa WebKit.
Graham Miln
@GrahamMiln Chrome również korzysta z Webkit. Ale przewijanie Chrome jest dalekie od ideału, IMO. To naprawdę zależy od zawartości strony internetowej. Ogólnie wydajność nie jest tak dobra.
gentmatt