Estou bastante surpreso que o Safari seja o único navegador no OS X que consegue obter (quase) a rolagem inercial perfeita.
- Mesmo com muito conteúdo em flash em um site, a rolagem do Safari é suave.
- Existem sites com muito conteúdo para carregar e o Safari continuará rolando sem problemas enquanto o conteúdo estiver sendo carregado e renderizado.
- A instalação de várias extensões não afeta o desempenho da rolagem.
Os principais concorrentes do navegador Safari no OS X são Chrome e Firefox. Ambos não conseguem fornecer a mesma rolagem suave como a do Safari:
- Ativando sinalizadores como composição de GPU em todas as páginas no Google Chrome (
chrome://flags
) ou ... - a rolagem suave no Firefox (
Options > Advanced
) não oferece o desempenho de rolagem que o Safari oferece por padrão.
Questão
O Safari está usando API privada para fornecer rolagem suave que os desenvolvedores do Chrome / Firefox não podem acessar? Como é que a rolagem do Safari é muito melhor e os concorrentes não conseguem fornecer rolagem sem interrupções?
Estou pensando especialmente no Chrome, porque ele geralmente se adapta aos novos recursos do OS X muito rápido.
Respostas:
É provável que a diferença esteja relacionada às opções de arquitetura e comunicação entre processos de cada navegador.
Navegadores modernos renderizam páginas em processos separados. A Apple possui uma estrutura chamada IOSurface que fornece uma maneira simplificada de um processo passar uma imagem para outro processo. Essa estrutura foi introduzida no Mac OS X 10.6, também conhecido como Snow Leopard, para a última iteração do QuickTime.
O QuickTime usa o IOSurface para descarregar a decodificação de filme para separar processos. Sem decodificação, o aplicativo QuickTime Player fica lidando exclusivamente com a interface do usuário e mostrando imagens fornecidas pelos processos de decodificação.
Eu suspeito que o Safari aprendeu com o QuickTime e está usando as mesmas técnicas. As páginas da Web são transferidas para outros processos, renderizadas e devolvidas.
O Chrome e o Firefox poderiam fazer a mesma coisa, absolutamente. O desafio é garantir que o thread que lida com o usuário responda rapidamente e não demore para aguardar a atualização da renderização.
O Chrome usa processos separados e parece usar o IOSurface no Mac; esse bug fala sobre como melhorar o uso do IOSurface no Chrome .
O IOSurface é uma estrutura pública disponível para qualquer aplicativo Mac OS X 10.6+. No entanto, há pouca documentação e é específico para Mac.
Isso é tudo conjectura.
fonte