2010-06-24 31 views
21

Una pregunta teórica:
Todos sabemos acerca de los pro de minificar y combinar archivos javascript para reducir las solicitudes HTTP para acelerar un sitio web. Pero cuando se utilizan bibliotecas populares de JavaScript (jQuery, por ejemplo), no es demasiado estúpido suponer que ya se han descargado a la computadora del cliente desde otra página.¿Reduce las solicitudes HTTP o no?

Entonces, ¿qué debería preferir? ¿Cómo lo manejan los grandes en la industria?

A) Combine y minimice cada script en uno masivo y preséntelo desde mi propio CDN.

B) Combina todas las secuencias de comandos "auto escritas" en un archivo y utiliza las CDN disponibles de las bibliotecas cuando sea posible.

Gracias!

+0

Bien chicos, ¡Bounty está activado! – Industrial

Respuesta

13
  • "Combinar y Minify cada secuencia de comandos en una masiva y servir de mi propia CDN"

    Si usted tiene un CDN, cuáles son estamos hablando? :) Quieres decir servidor, ¿verdad?

  • "¿Cómo lo manejan los grandes de la industria?"

    Los grandes siempre usan sus propios servidores.

  • "... no es demasiado estúpido suponer que estos ya se han descargado a la computadora del cliente desde otra página."

    Lamentablemente lo es.Datos:

    • 40-60% de los usuarios tienen cache limits are small
    • versiones diferentes una empty cache experience
    • navegadores de bibliotecas están en uso, caché sólo ocurre si coinciden
    • recursos desde un nuevo dominio crea un DNS búsqueda, que es lento
    • + que necesita para gestionar las dependencias
+4

+1 para el enlace de caché vacío, y +1 para la búsqueda DNS – fmark

+5

La cita real es "40-60% de los usuarios de _Yahoo! _ Tienen una experiencia de caché vacía". Los números son probablemente muy diferentes para cualquier sitio que no sea Yahoo. En particular, yahoo.com es una página de inicio del navegador muy común. Esto da como resultado un perfil de uso muy diferente. Lo que nos lleva al punto más importante: rastrea tus propias estadísticas. No sabrá qué funciona mejor para * su * sitio hasta que lo mida usted mismo. –

+4

"Cabe destacar que yahoo.com es una página de inicio del navegador muy común" - LoL. Es por eso que la posibilidad de que un mismo usuario acceda a la página de inicio de yahoo dos veces al día es mayor que la posibilidad de que un usuario tenga exactamente la misma biblioteca con exactamente la misma versión de exactamente el mismo CDN en su caché (y no sea reemplazado por otro contenido desde entonces). – galambalazs

6

creo que depende de su sitio:

  • Si el sitio se compone principalmente de las páginas del mismo tipo que necesitan los mismos guiones que iría por A)
  • Si usted tiene un montón de las secuencias de comandos que difieren de cada sitio secundario de su sitio, iría por B). Combina las secuencias de comandos más utilizadas en un solo script. Si tiene scripts grandes que no se utilizan en todas las páginas, cree un script por separado.

La mejor manera de saber realmente qué hacer es probar qué combinación de técnicas le ahorra la mayor cantidad de tráfico/conexiones.

P.S .: Personalmente, no me gusta la idea de permitir que otras personas entreguen archivos para mi página web, porque ¿qué pasará si la CDN falla pero su servidor se mantiene activo? Si esto no es un problema para usted, intente server todas las bibliotecas que use desde un CDN confiable.

+2

+1 para probarlo y usar métricas reales para hacer la elección – Anurag

+5

+1 para posibles problemas de CDN. Veo esos problemas también, de vez en cuando; lo que es aún peor, es que la mayoría de los visitantes pensarán que su sitio es basura, porque su CSS/JS no se puede cargar. –

3

Creo que todo se reduce a un par de cosas:

  1. ¿Cuántas páginas que utiliza este código a través de su sitio
  2. La calidad de la CDN
  3. ¿Cuánto código es

También hay una diferencia entre el uso de paquetes Javascript populares, como jQuery, y el uso de un paquete personal, que solo tendrán los visitantes que hayan visitado su sitio.

La mejora del rendimiento puede producirse desde dos lugares: 1) caché del navegador y 2) dns cache, que incluso si el archivo no se almacena localmente, el servidor dns tiene una ruta que minimiza el tiempo de solicitud o incluso sirve temporalmente el archivo.

Aconsejaría usar un CDN y alojar los archivos localmente. Dependiendo de sus recursos (hardware/ancho de banda), puede que necesite usar un CDN de todos modos. Sería bueno utilizar programadores del lado del servidor para verificar el estado de CDN y redirigir la ruta cuando corresponda.

Además, recuerde que algunos usuarios eligen desactivar la memoria caché de su navegador. Así que minificar su JS siempre es un plus.Debe separar su JS en dos archivos: 1) Necesario en la carga y 2) No es necesario en la carga. Básicamente, obtenga primero el código necesario para mejorar el tiempo de carga percibido. A continuación, cargue todos los demás extras (por ejemplo, presentaciones de diapositivas, cambiadores de color, etc.).

Un último punto es hacer uso de los encabezados Expira, ya que nada de esto es importante si no se optimiza. Eso es lo que realmente reducirá la velocidad para los visitantes devueltos con la memoria caché habilitada. YSlow es un buen complemento de Firefox que te ayudará a evaluar el rendimiento de tu carga.


Para responder a su pregunta: Reducir las peticiones HTTP, pero hacer su propia evaluación del tamaño del archivo de la JS.

(Being Extreme) No desea un archivo JS de 10 MB, o su sitio tardará demasiado en cargarse. Tampoco quiere 1000 archivos de 10 KB debido a la sobrecarga de HTTP. Nuevamente, use esto para ilustrar el punto en el que desea un equilibrio entre el tamaño y la cantidad de archivos, y como dije antes, empaquételos en el rendimiento necesario versus deseado.

+4

Al punto del tamaño del objeto: "Encontramos que si el tamaño del componente es superior a 25 KB, el navegador del iPhone no almacena en caché el componente. Por lo tanto, las páginas web diseñadas específicamente para el iPhone deben reducir el tamaño de cada componente a 25 Kbytes o menos para el comportamiento óptimo de almacenamiento en caché ". http://www.yuiblog.com/blog/2008/02/06/iphone-cacheability/ IE6 SP1, la última versión de IE disponible para win2k, tiene una limitación en el tamaño del archivo javascript más grande que puede manejar como bien. IIRC, si encuentra un archivo javascript que está por encima del límite, simplemente lo truncará. –

+2

@Frank buen punto, el hardware del cliente también debe tenerse en cuenta. @ Industrial, es posible que desee utilizar una versión móvil de su sitio, que generalmente requiere menos sobrecarga de JS. – vol7ron

+0

@Frank - Muchas gracias por su información sobre iphone e IE6. ¡Definitivamente nos dirigiremos a una versión móvil en este sitio para que tu comentario sea realmente útil! – Industrial

4

Creo que el mejor enfoque es utilizar un archivo minified 'application.js' (que contiene todos los javascript específicos de la aplicación) y luego utilizar un servicio como Google AJAX Libraries API (encontrado here) para cargar jQuery, Prototype, etc.

2

Particularmente a su pregunta acerca de cómo manejan los scripts de los clientes las personas importantes de la industria, siempre puede mirar y ver. stackoverflow.com parece estar bien dependiendo de la versión de Google de jquery lib. Otros decididamente no lo hacen ....

+2

IE8 no le gustó jQuery lib minified de Google para uno de los efectos de imagen que estaba haciendo. Por lo tanto, no siempre confíe en el código establecido ~ todavía realice comprobaciones de calidad en los diferentes navegadores. – vol7ron

3

Omar al Zabir funciona un sitio llamado pageflakes y tiene una serie de artículos sobre cómo mejorar el rendimiento. One of them en particular explica cómo comprimir y combinar todo tipo de cosas en el lado del servidor antes de enviarlo al cliente.

También puede usar sprites de imagen css para reducir las solicitudes HTTP. Ellos ayudan MUCHO para imágenes comúnmente usadas.

* Ciertamente no tengo un gran sitio de producción, pero estas cosas definitivamente ayudaron a ahorrar en el ancho de banda.

+0

Sí, ya consciente de los sprites, una técnica realmente útil para usar – Industrial

2

No hay ninguna razón en particular por la que obtener un script sea más rápido que dividirlo. Sucede porque las descargas concurrentes del navegador son limitadas, pero no por una.

Creo que la idea debería ser manejar las secuencias de comandos de IU sincrónicas en primer lugar, y luego las secuencias de comandos de "respuesta a la actividad del usuario" (como la validación, etc.).

En caso de igualdad, la opción B es la mejor.

Cuestiones relacionadas