2011-08-22 20 views
9

¿Puedo usar JavaScript para detectar si el navegador del usuario admite contenido gzip (lado del cliente, no node.js o similar)?¿Puede detectar JavaScript si el navegador del usuario admite gzip?

Estoy tratando de admitir el siguiente caso marginal:
Hay una gran cantidad de archivos posibles que se pueden cargar en una aplicación web particular y sería mejor cargarlos a pedido según sea necesario ya que la aplicación se ejecuta en lugar de cargar todos ellos inicialmente. Quiero publicar estos archivos fuera de S3 con una fecha de caducidad de caché de futuro lejano. Desde S3 does not support gzipping files to clients that support it, deseo alojar dos versiones de cada archivo, una normal y una gzip con content-type configurada en application/gzip. El navegador, por supuesto, necesita saber qué archivos solicitar. Si JavaScript puede detectar si el navegador admite contenido comprimido, el navegador podrá solicitar los archivos correctos.

¿Esto es posible?

+0

¿Por qué está utilizando S3 para la entrega de archivos. Deberías usar CLoudFront ... que sí. – Layke

Respuesta

15

Javascript no puede, pero puede usar Javascript para detectar si el navegador admite contenido comprimido.

Comenté anteriormente y me gustaría volver a evaluar, debe usar CloudFront de todos modos, que tiene contenido gzip. Si está utilizando S3, entonces hay una razón cero por la cual no le gustaría usar CloudFront, sin embargo, para los propósitos de responder su pregunta ...

Esta publicación de blog aborda perfectamente cómo detectaría si el navegador admite Gzip .

http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html

Aquí es un breve resumen:

1) Crear un pequeño archivo comprimido con gzip, gzipcheck.js.jgz, y que esté disponible en CloudFront. Este archivo debe contener una línea de código:

gzipEnabled = true; 

2) Use el siguiente código para intentar cargar y ejecutar este archivo. Probablemente desee colocarlo en la sección HEAD HTML antes que cualquier otro código JavaScript.

<script type="text/javascript" src="gzipcheck.js.jgz"> 
</script> 

Si se carga el archivo, se establece un indicador, gzipEnabled, que indica si el navegador es compatible con gzip.

+4

+1 Es un buen truco, pero CloudFront no descomprime contenido. Servirá contenido comprimido solo si el origen sirve contenido comprimido. – Paulpro

+2

Aquí están las instrucciones de CloudFront para usar contenido comprimido, y no sirven automáticamente el contenido comprimido, la URL de la versión comprimida debe generarse en el lado del cliente si está utilizando S3. http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html – banjomonster

4

Bueno cloudfront no almacena gzip el contenido automáticamente. Hasta el momento en que Amazon decide hacer la compresión automática de gzip en S3 y Cloudfront uno tiene que utilizar la siguiente solución.

  • Además de la versión normal, cree una versión comprimida del archivo y cárguela en S3. Si el nombre del archivo es style.css, la versión con gzip debe llamarse style.css.gz.
  • Agregue un encabezado al archivo con la clave = Content-Encoding & value = gzip en el archivo. Esto es necesario para que los navegadores entiendan que el contenido está codificado usando gzip. El encabezado se puede agregar usando la API S3 o las populares herramientas del administrador de archivos S3 como Cloudberry, Bucket Explorer, etc.
  • También agregue el encabezado Content-Type correcto para el archivo. por ejemplo, para style.css debe ser Content-Type: text/css.
  • En la página web, incluya normalmente el archivo
  • Utilice el javascript mencionado anteriormente para detectar si el navegador admite la codificación gzip. Si se encuentra verdadero, reemplace el nombre del archivo e.g style.css con style.css.gz
Cuestiones relacionadas