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.
Réponses:
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.
la source