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.
Odpowiedzi:
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.
źródło