Por que apenas o Safari possui rolagem inercial (quase) perfeita no OS X?


18

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.


11
Discordo. A rolagem do Firefox é muito superior à do Safari (eu estou no 10.7.4 em um Macbook Air de meados de 2011): é quase sempre suave a 60Hz, enquanto o Safari sempre "se atrapalha" um pouco. Eu ainda uso o Safari por causa do bom efeito de zoom e "capa" quando deslizo com dois dedos para o lado para voltar ou avançar.
Steven Lu

2
Droga. Desde que você apontou, estou percebendo que o Firefox está rasgando muito mais agora. Faz isso em todo o lugar. Os textos (como neste site) piscam e tremem à medida que se movem inconsistentemente pelos quadros consecutivos.
Steven Lu

2
De qualquer forma, o Safari on Lion, combinado com os dispositivos de entrada por toque da Apple (touchpad / mouse mágico), provavelmente a experiência na Web de renderização mais amigável e agradável disponível em qualquer lugar. Ele aplica o vsync corretamente e, portanto, nenhuma animação é interrompida, e eu não consigo obter o suficiente dos recursos de zoom de pitada e rolagem da esquerda para voltar. Às vezes rolando soluços levemente, mas acho que precisaríamos de acesso a ferramentas internas para podermos analisar o que está causando esses problemas. Se eu conseguir um emprego na Apple, gostaria de trabalhar nisso.
Steven Lu

11
Uau, muitos comentários. Estou adicionando outra, como especulação, e não uma resposta ... Ignorando o fato de o Safari estar disponível no Windows (por que não, todo mundo faz ...), acho que é uma simples questão de o Safari ser escrito para o Mac, e o restante dos navegadores necessariamente compartilha, até certo ponto, a base de código com várias plataformas, dificultando a obtenção perfeita em cada uma.
stuffe

11
É difícil imaginar que o Safari não usaria APIs privadas: essas APIs existem por nenhum outro motivo a não ser para fornecer recursos ao software da Apple. Mas isso é apenas conjectura, e eu não vejo outra maneira de realmente responder a essa pergunta ...
Dan J

Respostas:


6

É 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.


O Chrome usa processos separados para renderizar conteúdo, fwiw.
Nathan Greenstein

11
Obrigado pela sua resposta! É triste que haja tão pouca ressonância nessa questão até agora. Mas posso entender isso se não pudermos nos referir a fontes primárias.
gentmatt 24/07/12

@gentmatt, como você encontra a experiência de rolagem em navegadores que usam o WebKit? Isso pode ajudar a separar o impacto do mecanismo de renderização do navegador da implementação da interface do navegador ao redor. Acredito que o OmniWeb use o WebKit.
Graham Miln

O @GrahamMiln Chrome também usa o Webkit. Mas a rolagem do Chrome está longe de ser perfeita, IMO. Realmente depende do conteúdo do site. Geralmente, o desempenho não é tão bom.
gentmatt 24/07/12
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.