Experimentos con la carga de javascript en GoTube
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:
- Imprescindibles para realizar la búsqueda
- 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:
- Agrupar todos los javascripts para reducir el número de llamadas HTTP
- Comprimir el resultado en gzip
- Poder continuar teniendo los javascript en ficheros separados (para tenerlo organizado)
El código fuente: (de code font)
-
$offset = 60 * 60 * 24 * 3;
-
-
else
-
-
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)
Diferentes maneras de inicializar una matriz
Maneras de iniciar una matriz de 7 elementos con valor cero:
- $tabla = array(0,0,0,0,0,0,0);
- for($i=0;$i<=6;$i++)$tabla[]=0;
- $tabla = array_pad (array(), 7, 0);
Todos devuelven el mismo resultado:
Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 0
)
¿Conoces más maneras de hacerlo?
¿Cuál crees que es la más eficiente?
Consejo php, cuando no utilizar preg_match
Buscando documentación sobre la función php preg_match, encontré el siguiente consejo:
No usar preg_match si lo único que quieres es comprobar si un string (aguja) esta en otro string (pajar)
Usa strpos o strstr son más rápidos
Estaría bien hacer una lista con comparaciones entre funciones, para ver cuales son las mejores
por ejemplo, yo en el caso de arriba, utilizaria la función eregi que permite usar expresiones regulares y es insensible a minúsculas y mayúsculas
trabajar con ficheros, saltos de linea y las comillas
cuando quieras crear/editar ficheros con saltos de linea, evita poner ( \n ) entre comillas simples ( ' ), para evitar resultados inesperados
Ejemplo con comillas simples:
Resultado:
linea 1\nlinea 2
Ejemplo con comillas dobles:
Resultado:
linea 1
linea 2
Edito: La solución ideal:
Resultado:
linea 1
linea 2
Configurar cronjob para ejecutar un script php (cpanelX)
¿Que es un Cronjob?
Es un proceso automatizado que se ejecuta en un intervalo de tiempo definido por el usuario
Ejemplos de uso:
- Hacer copias de la base de datos
- Optimizar la base de datos
- Enviar un boletín de noticias
- Eliminar archivos temporales de una carpeta
Requisitos:
- Tener la web en un servidor linux
- Que tu compañía de hosting te permita configurar cronjobs
- saber la ruta del script php que queramos ejecutar, por ejemplo:
/home/vicia3/public_html/BD_optimizar.php
Caso practico:
Hace un tiempo adapte un script de PHPNUKE a wordpress para optimizar la base de datos mysql
Para ejecutarlo hay dos maneras:
- manualmente desde el navegador
- o automáticamente configurando un cronjobs
A continuación voy a explicar la manera de configurar un cronjob desde un panel de control cpanelX (que sepa lo utilizan dattatec y lunarpages)
Pasos:
- Sigue los pasos de este tutorial para instalar el script para optimizar la base de datos mysql (Apunta la ruta del fichero donde guardas el script)
- Dirigete a la pantalla principal del panel de control cpanelx de tu hosting
- Busca la opción Cron jobs:

- Una vez dentro puedes seleccionar el modo para crear o editar los cronjobs:
Yo recomiendo hacerlo en modo estándar, es más fácil e intuitivo

- Como podréis ver en la imagen inferior el cronjob esta configurado para ejecutar el script php: /home/vicia3/public_html/BD_optimizar.php
el día 1 de cada mes por la media noche

Para que podáis copiar el comando linux es el siguiente:
cd /home/vica3/public_html/ ; php BD_optimizar.php
Recuerda que tienes que cambiar la ruta segun vuestro servidor - Una vez creado para finalizar le dais al botón Save Crontab
Notas:
- Puedes hacer que se ejecute dos días a la semana, por ejemplo:
seleccionas monday (lunes), pulsa la tecla control (Ctrl) y seleccionas Wednesday (miércoles) - Seguramente hay varias maneras de hacerlo pero os aseguro que esta funciona correctamente
Mas información:
el gusano ese está mal, nunca acerté ninguna letra… aunque diga que las 3 son la “A” ¬¬