Perché solo Safari ha uno scorrimento inerziale (quasi) perfetto in OS X?


18

Sono piuttosto sorpreso che Safari sia l'unico browser in OS X che riesce a ottenere uno scorrimento inerziale (quasi) perfetto.

  • Anche con molti contenuti flash su un sito Web, lo scorrimento di Safari è fluido.
  • Esistono siti Web con molti contenuti da caricare e Safari continuerà a scorrere senza problemi durante il caricamento e il rendering dei contenuti.
  • L'installazione di più estensioni non influisce sulle prestazioni di scorrimento.

I principali concorrenti del browser Safari su OS X sono Chrome e Firefox. Entrambi non riescono a fornire lo stesso scorrimento regolare come uno è abituato in Safari:

  • Abilitazione di flag come la composizione GPU su tutte le pagine di Google Chrome ( chrome://flags) o ...
  • lo scorrimento regolare in Firefox ( Options > Advanced) non offre le prestazioni di scorrimento offerte da Safari per impostazione predefinita.

Domanda

Safari sta usando un'API privata per offrire uno scorrimento fluido a cui gli sviluppatori di Chrome / Firefox non possono accedere? Come mai lo scorrimento di Safari è molto meglio e i concorrenti non riescono a fornire uno scorrimento non interrotto.

Mi chiedo soprattutto di Chrome perché di solito si adatta alle nuove funzionalità di OS X molto velocemente.


1
Non sono d'accordo. Lo scorrimento di Firefox è di gran lunga superiore a quello di Safari (sono il 10.7.4 su un Macbook Air della metà del 2011): è quasi sempre liscio a 60Hz mentre Safari si "strappa" sempre un po '. Tendo comunque ad usare Safari per via del piacevole zoom e dell'effetto "cover" quando scorri con due dita lateralmente per andare avanti o indietro.
Steven Lu

2
Dannazione. Da quando lo hai sottolineato, ora noto che Firefox sta lacerando molto di più. Lo fa dappertutto. Lo sfarfallio e il brivido del testo (come in questo sito) mentre si muovono in modo incoerente su più fotogrammi consecutivi.
Steven Lu

2
Ad ogni modo, Safari on Lion, combinato con i dispositivi di input touch di Apple (touchpad / mouse magico), probabilmente l'esperienza web di rendering più intuitiva e piacevole disponibile ovunque. Si applica correttamente vsync e quindi nessuna animazione si strappa, e non ne ho mai abbastanza delle funzionalità di zoom pizzico stretto e scorrimento da sinistra a indietro. A volte il singhiozzo scorre leggermente, ma penso che avremmo bisogno di accedere agli strumenti interni per essere in grado di profilare ciò che sta causando questi problemi. Se dovessi mai trovare un lavoro in Apple, vorrei lavorare su questo.
Steven Lu

1
Wow, un sacco di commenti. Ne sto aggiungendo un altro, dato che è una speculazione, non una risposta ... Ignorando il fatto che Safari è disponibile su Windows (perché no, lo fanno tutti gli altri ...), penso che sia una semplice questione che Safari sia scritto per Mac, e il resto dei browser necessariamente condividono, in una certa misura, codebase con più piattaforme, rendendo difficile ottenerlo perfetto su ognuno di essi.
stuffe,

1
È difficile immaginare che Safari non utilizzi API private: tali API esistono solo per fornire funzionalità al software Apple. Ma questa è solo una congettura, e non vedo nessun altro modo per rispondere effettivamente a questa domanda ...
Dan J

Risposte:


6

È probabile che la differenza abbia a che fare con l'architettura e le scelte di comunicazione tra processi di ciascun browser.

I browser Web moderni eseguono il rendering delle pagine in processi separati. Apple ha un framework chiamato IOSurface che fornisce un modo semplificato per un processo per passare un'immagine a un altro processo. Questo framework è stato introdotto in Mac OS X 10.6, noto anche come Snow Leopard, per l'ultima iterazione di QuickTime.

QuickTime utilizza IOSurface per scaricare la decodifica dei filmati in processi separati. Senza alcuna decodifica, l'applicazione QuickTime Player viene lasciata occuparsi esclusivamente dell'interfaccia utente e mostra le immagini fornite dai processi di decodifica.

Sospetto che Safari abbia imparato da QuickTime e stia usando le stesse tecniche. Le pagine Web vengono scaricate su altri processi, rese e restituite.

Chrome e Firefox potrebbero fare la stessa cosa, assolutamente. La sfida è garantire che il thread che si occupa dell'utente risponda rapidamente e non sia ritardato in attesa dell'aggiornamento del rendering.

Chrome utilizza processi separati e sembra utilizzare IOSurface sul Mac; questo bug parla del miglioramento dell'utilizzo di IOSurface da parte di Chrome .

IOSurface è un framework pubblico disponibile per qualsiasi applicazione Mac OS X 10.6+. Tuttavia c'è poca documentazione ed è specifica per Mac.

Questa è tutta una congettura.


Chrome utilizza processi separati per il rendering dei contenuti, prima di tutto.
Nathan Greenstein,

1
La ringrazio per la risposta! È triste che finora ci sia così poca risonanza con questa domanda. Ma posso capirlo se non si può fare riferimento a fonti primarie.
gentmatt,

@gentmatt come trovi l'esperienza di scorrimento sui browser che utilizzano WebKit? Ciò può aiutare a separare l'impatto del motore di rendering del browser dall'implementazione dell'interfaccia del browser circostante. Credo che OmniWeb utilizzi WebKit.
Graham Miln,

@GrahamMiln Chrome utilizza anche Webkit. Ma lo scorrimento di Chrome è abbastanza lontano dall'essere perfetto, IMO. Dipende molto dal contenuto del sito Web. In generale, le prestazioni non vanno molto bene.
gentmatt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.