Pourquoi seul Safari a-t-il (presque) un défilement inertiel parfait sous OS X?

18

Je suis assez étonné que Safari soit le seul navigateur sous OS X qui parvienne à obtenir un défilement inertiel (presque) parfait.

  • Même avec beaucoup de contenu flash sur un site Web, le défilement de Safari est fluide.
  • Il existe des sites Web avec beaucoup de contenu à charger et Safari continuera de défiler en douceur pendant le chargement et le rendu du contenu.
  • L'installation de plusieurs extensions n'a aucun effet sur les performances de défilement.

Les principaux concurrents du navigateur Safari sur OS X sont Chrome et Firefox. Les deux ne parviennent pas à fournir le même défilement fluide que celui utilisé dans Safari:

  • Activation de drapeaux comme la composition GPU sur toutes les pages dans Google Chrome ( chrome://flags) ou ...
  • le défilement fluide dans Firefox ( Options > Advanced) ne fournit pas les performances de défilement fournies par Safari par défaut.

Question

Est-ce que Safari utilise une API privée pour offrir un défilement fluide auquel les développeurs Chrome / Firefox ne peuvent pas accéder? Comment se fait-il que le défilement de Safari soit tellement meilleur et que les concurrents n'arrivent pas à offrir un défilement non interrompu.

Je m'interroge particulièrement sur Chrome, car il s'adapte généralement très rapidement aux nouvelles fonctionnalités d'OS X.

gentmatt
la source
1
Je ne suis pas d'accord. Le défilement de Firefox est de loin supérieur à celui de Safari (je suis sur 10.7.4 sur un Macbook Air mi-2011): il est presque toujours lisse à 60 Hz tandis que Safari "accroche" toujours un peu. Cependant, j'ai tendance à toujours utiliser Safari en raison du bel effet de zoom et de "couverture" lorsque vous faites un balayage latéral avec deux doigts pour avancer ou reculer.
Steven Lu
2
Bon sang. Depuis que vous l'avez souligné, je remarque que Firefox se déchire beaucoup plus maintenant. Il le fait partout. Le texte (comme sur ce site) scintille et frémit lorsqu'il se déplace de manière incohérente sur des cadres consécutifs.
Steven Lu
2
Quoi qu'il en soit, Safari sur Lion, combiné aux périphériques d'entrée tactiles d'Apple (pavé tactile / souris magique), est probablement l'expérience Web de rendu la plus conviviale et la plus agréable du monde. Il applique correctement vsync et donc aucune animation ne se déchire, et je ne peux pas en avoir assez des fonctionnalités serrées de zoom et de défilement vers la gauche pour revenir en arrière. Parfois, le hoquet défile légèrement, mais je pense que nous aurions besoin d'accéder à des outils internes pour pouvoir déterminer ce qui cause ces problèmes. Si jamais je trouvais un emploi chez Apple, je voudrais y travailler.
Steven Lu
1
Wow, plein de commentaires. J'en ajoute un autre, car c'est de la spéculation, pas une réponse ... Ignorant le fait que Safari est disponible sur Windows (pourquoi pas, tout le monde le fait ..), je pense que c'est une simple question d'écriture de Safari pour Mac, et le reste des navigateurs partageant nécessairement, dans une certaine mesure, la base de code avec plusieurs plates-formes, ce qui rend difficile de le rendre parfait sur chacune.
stuffe
1
Il est difficile d'imaginer que Safari n'utiliserait pas d'API privées: de telles API n'existent que pour fournir des fonctionnalités au logiciel d'Apple. Mais ce n'est qu'une conjecture, et je ne vois pas d'autre moyen de répondre à cette question ...
Dan J

Réponses:

6

La différence est probablement due à l'architecture et aux choix de communication interprocessus de chaque navigateur.

Les navigateurs Web modernes affichent les pages dans des processus distincts. Apple a un cadre appelé IOSurface qui fournit un moyen simplifié pour un processus de passer une image à un autre processus. Ce cadre a été introduit dans Mac OS X 10.6, alias Snow Leopard, pour la dernière itération de QuickTime.

QuickTime utilise IOSurface pour décharger le décodage des films sur des processus séparés. Sans aucun décodage à faire, l'application QuickTime Player ne traite que de l'interface utilisateur et affiche les images fournies par les processus de décodage.

Je soupçonne que Safari a appris de QuickTime et utilise les mêmes techniques. Les pages Web sont déchargées vers d'autres processus, rendues et renvoyées.

Chrome et Firefox pourraient-ils faire la même chose, absolument. Le défi est de s'assurer que le thread traitant de l'utilisateur répond rapidement et n'est pas retardé en attendant la mise à jour du rendu.

Chrome utilise des processus distincts et semble utiliser IOSurface sur Mac; ce bug parle de l' amélioration de l'utilisation par Chrome de IOSurface .

IOSurface est un framework public disponible pour toute application Mac OS X 10.6+. Cependant, il y a peu de documentation et elle est spécifique à Mac.

Ce n'est que conjecture.

Graham Miln
la source
Chrome utilise des processus distincts pour rendre le contenu, fwiw.
Nathan Greenstein
1
Merci pour votre réponse! Il est triste qu'il y ait si peu de résonance à cette question jusqu'à présent. Mais je peux comprendre cela si l'on ne peut pas se référer aux sources primaires.
gentmatt
@gentmatt comment trouvez-vous l'expérience de défilement sur les navigateurs qui utilisent WebKit? Cela peut aider à séparer l'impact du moteur de rendu du navigateur de l'implémentation de l'interface de navigateur environnante. Je pense qu'OmniWeb utilise WebKit.
Graham Miln
@GrahamMiln Chrome utilise également Webkit. Mais le défilement de Chrome est assez loin d'être parfait, OMI. Cela dépend vraiment du contenu du site Web. Généralement, les performances ne sont pas aussi bonnes.
gentmatt