5

Experimentos con la carga de javascript en GoTube

PHP      25 Septiembre, 2007      1865 lecturas

Cuando me meto de lleno en un proyecto, siempre intento experimentar / aprender algo nuevo y reducir el número de chapuzas de mi programación.

Una de las pegas de GoTube, es el tiempo que tienes que esperar a que se cargue todo, para poder realizar una búsqueda, os explico el experimento que he llevado a cabo.

Antes:

HTML:

<html>
<head>
<script type="text/javascript" src="js/totjs.php"></script>
</head>
<body>
<!--contenido de la página-->
<script type="text/javascript" src="API_DE_GOOGLE_MAPS"></script>
</body>
</html>

Javascript:

La aplicación no funciona hasta que se ha cargado todo (window.onload)

Ahora:

Para reducir el tiempo de carga, he decidido separar los javascripts en 2 grupos:

  1. Imprescindibles para realizar la búsqueda
  2. Necesarios una vez terminada la búsqueda, ej. GreyBox

HTML:

<html>
<head>
<script type="text/javascript" src="js/totjs.php"></script>
</head>
<body>
<!--contenido de la página-->
<script type="text/javascript" src="js/totjs2.php"></script>
<script type="text/javascript" src="API_DE_GOOGLE_MAPS"></script>

</body>
</html>

Javascript:

Aprovechando que he separado los javascripts, los eventos que tenia en el window.onload, los he metido en el fichero totsjs2.php

De esta manera no hace falta esperar a que se cargue todo, ya que los eventos se ejecutan al cargar el fichero totsjs2.php

Experimento en PHP:

Seguramente te habrás preguntado:

¿Por qué has enlazado el javascript a un fichero .php en vez de un .js de toda la vida?

Todo empezó, cuando leí un articulo en uLoVe-TeCh, en el que habla de aumentar la rapidez del blog, reduciendo el número de llamadas HTTP, me puse a buscar y encontré este tutorial (ahora se ve mal, pero antes se podía leer sin tener que seleccionar el texto)

Estos son los motivos:

  1. Agrupar todos los javascripts para reducir el número de llamadas HTTP
  2. Comprimir el resultado en gzip
  3. Poder continuar teniendo los javascript en ficheros separados (para tenerlo organizado)

El código fuente: (de code font)

PHP:
  1. header('Content-type: text/javascript; charset: UTF-8');
  2. header('Cache-Control: must-revalidate');
  3. $offset = 60 * 60 * 24 * 3;
  4. header('Expires: '.gmdate('D, d M Y H:i:s',time() + $offset).' GMT');
  5.  
  6. if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip'))
  7. ob_start('ob_gzhandler');
  8. else
  9.  
  10. readfile('javascript1.js');
  11. readfile('javascript2.js');
  12. readfile('javascript3.js');
  13.  

También se puede utilizar para cargar todas las hojas de estilo CSS, pero para eso tienes que cambiar:

Content-type: text/javascript

por:

Content-Type: text/css

Resultados en firebug y borrando la cache en cada prueba:

Sin utilizar el script PHP y llamando a los ficheros javascript y css, por separado:
37 requests - 251 KB - 10.63s

Utilizando el script PHP:
26 requests - 170 KB - 6.61s

La diferencia:
11 requests - 81 KB - 4.02s

Puede que estos números sean insignificantes, pero comprueba GoTube tu mismo y me comentas (eso si, pulsa un par de veces F5, para refrescar la cache)

La parte mala:

Como se tiene que ejecutar código PHP, la CPU del servidor tiene que trabajar un poco más

La parte buena:

Reduciendo la carga, también se disminuie el uso de ancho de banda (bandwidth)

Compartir   twitter   del.icio.us   webeame   meneame   stumbleupon   mr.wong   ?  


▶ Ver 0 pings y 0 trackbacks
No hay pingbacks

No hay trackbacks


  1. luigix

    Muy interesante. Tomo buena nota de ello y no conocía este método de carga de los javascripts. La verdad es que la diferencia de tiempo de carga es bastante significativa.



  2. Victor San Martin

    Y sigues mejorando tu buscador, excelente método para disminuir el tiempo de carga, hace no mucho vi una clase php con la que podías hacer lo que tu lograste.


    Saludos



  3. uLoVe-TeCh.com

    Gracias por publicar el post y poner la fuente :D



  4. gafeman

    @uLoVe-TeCh.com: gracias a ti, por publicar posts tan interesantes :D



  5. Jep Aribau - Consultor web

    Si guradaras el javascript en fichero y usaras el mod_deflate te ahorrarias de generarlo cada vez, ahorrando cpu.