2009-08-05 11 views
9

Estoy cargando jQuery de google en mi sitio (http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js) que está minned y gzip'd. En Firefox, el archivo jquery se muestra como una solicitud de 19k, pero Safari lo muestra como una solicitud de 56k. Asumo que Safari no lo está aceptando como un archivo gzip'd. ¿Cual es el trato? Viene de google y estoy bastante seguro de que se supone que debe ser gzip'dsafari y gzip

+0

Afortunadamente, si las estrellas se alinean, el archivo se almacena en caché después de la primera vez que se accede, y no se transmite después de eso. – Nosredna

Respuesta

4

Acabo de pensar que me gustaría añadir a esto en caso de que la gente tropiece con la misma pregunta. Después de jugar más con las herramientas Dev y mirar los encabezados de respuesta, noté que el Content-Length en realidad muestra el tamaño correcto de gzip. Solo puedo suponer que de hecho está obteniendo la versión comprimida correcta, pero en la ventana principal de recursos muestra el tamaño no comprimido y los encabezados muestran el tamaño comprimido.

7

Puede que desee echar un vistazo a this link.

Después de cavar un poco, me enteré de que no puede enviar javascripts comprimidos a Safari con la extensión de "gz". Debe ser "jgz"

Así que parece que el problema en realidad es que Google lo publique como "gz" en lugar de "jgz" como lo quiere Safari.

+0

Esto podría ser cierto, pero es irrelevante aquí ya que evidentemente lo está sirviendo como '.js', teniendo en cuenta la URL brad proporcionada. – mercator

1

veo al menos dos posibilidades:

  • quizá Safari no está enviando la cabecera HTTP que indica "Soy capaz de recibir gzip"; ese encabezado es Accept-Encoding, y su valor es generalmente compress, gzip
  • tal vez Safari está indicando el tamaño de los datos no comprimidos?

¿Tiene algún tipo de "sniffer de red", como wireshark(parece que no hay versión para MacOS), para ver realmente lo que está pasando a través de la red?

+0

Le dio a wireshark una breve oportunidad, pero tenía un montón de errores en la carga y no cargó ninguna interfaz de red. Creo que Eric tiene un buen punto aunque eso es increíblemente frustrante si no puedo usar Google para servir archivos gzip'd – brad

+0

Lástima :-(El enlace @Eric publicado habla sobre algún tipo de extensión .gz o .jgz; no veo ninguno de aquellos en la URL que diste: tiene una extensión .js, y google no envía datos con gzip parece una idea bastante extraña, considerando que Safari es un navegador reciente, y que les ayudaría a reducir los costos de banda ancha ... Aún así. .. Si encuentra la solución, ¡háganoslo saber! –

12

He encontrado esto: usted NO se puede utilizar la extensión '.gz' al servir archivos comprimidos de CSS o JS a Safari. Se sabe cómo manejar los archivos gziped, siempre y cuando no tengan la extensión '.gz' (es sólo que rara :)

Así es como me sirven JS comprimidos/archivos CSS para Safari:

  • use cualquier otra extensión, simplemente no '.gz' ('.jgz', '.foo' o cualquier otro)
  • configure el encabezado gzip-encoded para las extensiones elegidas ('Content-encoding: gzip')
  • establece el tipo MIME apropiado: texto/javascript o texto/css

a todos los demás navegadores no les importa qué extensión uses, siempre que establezcas el tipo de contenido y la codificación correctos, por lo que esto funciona en todos los navegadores.

Probé esto con éxito con Safari 4.0.4 en Windows XP SP3. Y Chrome 4, FF 3.5.5, IE8 y Opera 10.10 en winxp, para la compatibilidad entre navegadores.

1

También he tenido este problema al intentar optimizar el tiempo de carga de un sitio web en el iPad móvil iOS7 Safari.

  • codificado = tamaño del archivo sin comprimir, desde el servidor
  • Descifrado = tamaño del archivo sin comprimir, localmente
  • transferidos = tamaño + cabeceras de archivo sin comprimir enviados y recibidos
  • Content-Length = archivo enviado comprimido, desde el servidor

Safari eligió una forma realmente extraña de representar estos números en su depurador.

+0

Esto es útil saberlo, ¡también lo descubrí! Supuse que 'transferido' era el tamaño comprimido, pero eso parece ser incorrecto, es el tamaño descomprimido lo que es muy poco intuitivo . –