¿Por qué solo Safari tiene un desplazamiento inercial (casi) perfecto en OS X?

Estoy bastante sorprendido de que Safari sea el único navegador en OS X que logra un desplazamiento inercial (casi) perfecto.

  • Incluso con una gran cantidad de contenido flash en un sitio web, el desplazamiento de Safari es fluido.
  • Hay sitios web con mucho contenido para cargar y Safari continuará desplazándose sin problemas mientras el contenido se carga y procesa.
  • La instalación de varias extensiones no tiene ningún efecto sobre el rendimiento del desplazamiento.

Los principales competidores del navegador Safari en OS X son Chrome y Firefox. Ambos no logran ofrecer el mismo desplazamiento suave al que uno está acostumbrado en Safari:

  • Habilitar indicadores como la composición de GPU en todas las páginas en Google Chrome ( chrome://flags) o...
  • el desplazamiento suave en Firefox ( Options > Advanced) no ofrece el rendimiento de desplazamiento que ofrece Safari de forma predeterminada.

Pregunta

¿Safari utiliza una API privada para ofrecer un desplazamiento suave al que los desarrolladores de Chrome/Firefox no pueden acceder? ¿Cómo es que el desplazamiento de Safari es mucho mejor y los competidores no logran ofrecer un desplazamiento continuo?

Me pregunto especialmente sobre Chrome porque generalmente se adapta a las nuevas funciones de OS X muy rápido.

No estoy de acuerdo. El desplazamiento de Firefox es muy superior al de Safari (estoy en 10.7.4 en un Macbook Air de mediados de 2011): casi siempre es suave a 60 Hz, mientras que Safari siempre se "engancha" un poco. Sin embargo, tiendo a seguir usando Safari debido al agradable efecto de zoom y "cobertura" cuando deslizo dos dedos hacia los lados para retroceder o avanzar.
@StevenLu ¿Qué pasa con el desgarro de la pantalla u otras fallas leves? ¿Experimentas eso en Firefox? Si bien puedo decir que el desplazamiento en Firefox es más fluido que en Chrome, viene con fallas gráficas. Chrome no tiene rasgaduras ni fallas, pero tiende a tartamudear. Safari no rasga ni tartamudea la mayor parte del tiempo.
No entiendo cómo es posible que notes un desgarro cuando te desplazas en su mayoría verticalmente (ya que así es como se configuran la mayoría de los sitios web). La situación en la que el desgarro es evidente es en un juego de disparos en primera persona cuando mueves el objetivo hacia la izquierda y hacia la derecha rápidamente: un cuadro cuya primera mitad se ha renderizado se deja caer en el medio para ser reemplazado por un cuadro más nuevo (vista diferente). por el resto. Cuando se desplaza verticalmente, esto simplemente nunca debería ser un problema. De todos modos, tengo un montón de tartamudeo notable en Safari. :( Mejoró desde la actualización 10.7.4 aunque. Y Chrome es peor que Safari.
@StevenLu Desgarro de pantalla de Firefox: esto y esto . Safari debería tener un desplazamiento realmente fluido. Una vez tuve un problema con el mal desplazamiento en Safari al actualizar a Lion. Pero después de una reinstalación completa y limpia, el desplazamiento se ha vuelto suave como la mantequilla.
Mmm. El desplazamiento lateral del sitio 360flex se rompe considerablemente en Firefox. Safari no se rompe, pero funciona a unos 25 fps, lo que preferiría romper. He pensado en reinstalar, y tengo buenas razones para esperar que Lion reinstale menos dolorosamente que Windows (y recuperaría la mayoría de mis configuraciones), pero todavía tengo demasiadas cosas configuradas de la manera que me gusta. hacer eso en absoluto. Cosas como el desplazamiento de espacios de cuatro dedos en pantalla completa (a través de aplicaciones de pantalla completa) no se rasga y es suave. Lo disfruto mucho.
Maldita sea. Desde que lo señalaste, noto que Firefox se rasga mucho más ahora. Lo hace por todos lados. El texto (como en este sitio) parpadea y se estremece a medida que se mueve de manera inconsistente a lo largo de fotogramas consecutivos.
@StevenLu Oh, bueno, lo siento :/
En cualquier caso, Safari en Lion, combinado con los dispositivos de entrada táctil de Apple (touchpad/ratón mágico), probablemente sea la experiencia web de renderizado más agradable y fácil de usar disponible en cualquier lugar. Aplica correctamente vsync y, por lo tanto, no se rompen las animaciones, y no me canso de las funciones ajustadas de pellizco-zoom y desplazamiento hacia la izquierda para retroceder. A veces, el desplazamiento tiene un ligero contratiempo, pero creo que necesitaríamos acceso a herramientas internas para poder perfilar qué está causando esos problemas. Si alguna vez consigo un trabajo en Apple, me gustaría trabajar en esto.
Oye, @gentmatt, ¿has notado que cuanto más pequeña es el área de desplazamiento, es más probable que el desplazamiento sea fluido? Si hago que mi ventana de Safari cubra solo 2/3 de la pantalla, obtengo un desplazamiento mucho más suave.
@StevenLu Sí, lo mismo es cierto para Chrome. También he notado que desplazarse en el modo de pantalla completa nativo de Lion da como resultado un desplazamiento más fluido.
No noto que el modo nativo de pantalla completa mejore los tirones de desplazamiento que recibo.
No creo que sea posible responder a esta pregunta con certeza: si Safari usa API privadas, ¿quién podría decirlo con certeza? OTOH, otras aplicaciones (como TextEdit, Mail y Preview) tienen el mismo desplazamiento suave e "inercial" que Safari, por lo que parece poco probable que Safari esté haciendo algo terriblemente especial.
Vaya, un montón de comentarios. Estoy agregando otra, ya que es una especulación, no una respuesta ... Ignorando el hecho de que Safari está disponible en Windows (¿Por qué no, todos los demás lo hacen?), Creo que es una simple cuestión de que Safari esté escrito para Mac, y el resto de los navegadores necesariamente comparten, hasta cierto punto, el código base con múltiples plataformas, lo que dificulta que sea perfecto en cada una.
Es difícil imaginar que Safari no usaría API privadas: dichas API existen sin otra razón que la de proporcionar funciones al software de Apple. Pero eso es solo una conjetura, y no veo otra forma de responder a esta pregunta...
He estado notando el mismo problema y me encantaría saber por qué y cómo solucionarlo. No puedo acostumbrarme a usar Safari a tiempo completo, pero tal vez debería...

Respuestas (1)

Es probable que la diferencia tenga que ver con la arquitectura y las opciones de comunicación entre procesos de cada navegador.

Los navegadores web modernos procesan páginas en procesos separados. Apple tiene un marco llamado IOSurface que proporciona una forma simplificada para que un proceso pase una imagen a otro proceso. Este marco se introdujo en Mac OS X 10.6, también conocido como Snow Leopard, para la última versión de QuickTime.

QuickTime usa IOSurface para descargar la decodificación de películas en procesos separados. Sin decodificación que hacer, la aplicación QuickTime Player se ocupa únicamente de la interfaz de usuario y muestra las imágenes proporcionadas por los procesos de decodificación.

Sospecho que Safari ha aprendido de QuickTime y está usando las mismas técnicas. Las páginas web se descargan a otros procesos, se procesan y se devuelven.

¿Podrían Chrome y Firefox hacer lo mismo, absolutamente? El desafío es garantizar que el hilo que trata con el usuario responda rápidamente y no se retrase esperando que se actualice la representación.

Chrome usa procesos separados y parece usar IOSurface en la Mac; este error habla de mejorar el uso de Chrome de IOSurface .

IOSurface es un marco público disponible para cualquier aplicación Mac OS X 10.6+. Sin embargo, hay poca documentación y es específica para Mac.

Todo esto es una conjetura.

Chrome usa procesos separados para renderizar contenido, fwiw.
¡Gracias por su respuesta! Es triste que hasta ahora haya tan poca resonancia en esta pregunta. Pero puedo entender esto si uno no puede referirse a fuentes primarias.
@gentmatt, ¿cómo encuentra la experiencia de desplazamiento en los navegadores que usan WebKit? Esto puede ayudar a separar el impacto del motor de representación del navegador de la implementación de la interfaz del navegador circundante. Creo que OmniWeb usa WebKit.
@GrahamMiln Chrome también usa Webkit. Pero el desplazamiento de Chrome está bastante lejos de ser perfecto, en mi opinión. Realmente depende del contenido del sitio web. En general, el rendimiento no es tan bueno.