php - htaccess - Aproveche el almacenamiento en caché del navegador para JS de terceros
evitar cache javascript (2)
Configuré Expiry en mi httpd.conf
ExpiresActive On
ExpiresDefault "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
Esto ayuda con el almacenamiento en caché del navegador de imágenes, archivos de fuentes, archivos propios del sitio css y js. Pero también tengo JS externo incluido en mi sitio web:
http://connect.facebook.net/en_US/sdk.js (20 minutes)
http://apis.google.com/js/client.js (30 minutes)
https://apis.google.com/js/rpc:shindig_random.js?onload=init (30 minutes)
https://platform.twitter.com/widgets.js (30 minutes)
https://www.google-analytics.com/analytics.js (2 hours)
Google Pagespeed Insights dice que para los archivos superiores: establecer una fecha de caducidad o una edad máxima en los encabezados HTTP para los recursos estáticos indica al navegador que cargue los recursos descargados previamente del disco local en lugar de hacerlo a través de la red.
¿Cómo aprovechar la memoria caché del navegador estos archivos JS externos? Alguna ayuda ?
No estoy seguro de si este fragmento de código ayudará a alguien, pero de todos modos, así es como guardo en caché un archivo js externo.
<script>
$.ajax({
type: "GET",
url: "https://www.google-analytics.com/analytics.js",
success: function(){},
dataType: "script",
cache: true
});
</script>
Un problema molesto, de hecho. No tengo uno que sea tan fácilmente corregible, me temo. Pero lo que puedes hacer es usar un cron
.
En primer lugar, tenga en cuenta que es poco probable que Google lo penalice por sus propias herramientas (como Analytics). Sin embargo, como se mencionó anteriormente, se puede arreglar usando un cron
, lo que básicamente significa que usted carga el JavaScript localmente y extrae los scripts actualizados.
Como hacer esto:
En primer lugar, debe descargar el script que está ejecutando. Usaré Google Analytics como ejemplo (este parece ser el script más problemático del que se quejan las personas, pero puede replicarlo para cualquier script externo).
Busque en su código y encuentre el nombre del guión, en nuestro caso es: google-analytics.com/ga.js
. Inserte esta URL en su navegador web y aparecerá el código fuente. Simplemente haga una copia y guárdelo como ga.js
Guarde este archivo JavaScript recién creado en su servidor web, en mi caso:
- JS
- ga.js
A continuación, deberá actualizar el código en las páginas que llaman a su secuencia de comandos y simplemente cambiar el directorio que llama al archivo JavaScript. Una vez más en nuestro caso, cambiaremos esta línea:
ga.src = (''https:'' == document.location.protocol ? ''https://ssl'' : ''http://www'') + ''.google-analytics.com/ga.js'';
a
ga.src = (''https:'' == document.location.protocol ? ''https://ssl'' : ''http://www'') + ''.yoursite.com/js/ga.js'';
En este punto, su sitio ahora ejecutará el script desde su sitio web localmente . Sin embargo, esto significa que el script nunca se actualizará. A menos que vuelva a ejecutar este breve proceso cada semana. Eso depende de ti ... pero soy demasiado flojo para eso.
Aquí es donde el CRON entra en juego:
Casi todos los servicios de alojamiento tendrán la opción de configurar trabajos cron
. En Hostinger está en su Panel de Alojamiento, en GoDaddy lo encontrará en la opción de Contenido.
Coloque la siguiente secuencia de comandos en su cron
, y todo lo que necesita hacer es cambiar la ruta absoluta a la variable $localfile
. Lo que hace este script es extraer el script actualizado de Google para el archivo ga.js
Puede establecer el marco de tiempo con la frecuencia con la que desea que se ejecute este proceso. Que van desde una vez cada hora hasta una vez al mes y más allá.
Si también está haciendo esto para archivos externos que no sean Google Analytics, entonces también necesitará cambiar la variable $remoteFile
. Entonces $remoteFile
es la URL del archivo JavaScript externo y la variable $localFile
colocará la ruta a su nuevo archivo almacenado localmente, ¡así de simple!
<?
// script to update local version of Google analytics script
// Remote file to download
$remoteFile = ''http://www.google-analytics.com/ga.js'';
$localfile = ''ENTER YOUR ABSOLUTE PATH TO THE FILE HERE'';
//For Cpanel it will be /home/USERNAME/public_html/ga.js
// Connection time out
$connTimeout = 10;
$url = parse_url($remoteFile);
$host = $url[''host''];
$path = isset($url[''path'']) ? $url[''path''] : ''/'';
if (isset($url[''query''])) {
$path .= ''?'' . $url[''query''];
}
$port = isset($url[''port'']) ? $url[''port''] : ''80'';
$fp = @fsockopen($host, ''80'', $errno, $errstr, $connTimeout );
if(!$fp){
// On connection failure return the cached file (if it exist)
if(file_exists($localfile)){
readfile($localfile);
}
} else {
// Send the header information
$header = "GET $path HTTP/1.0/r/n";
$header .= "Host: $host/r/n";
$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6/r/n";
$header .= "Accept: */*/r/n";
$header .= "Accept-Language: en-us,en;q=0.5/r/n";
$header .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7/r/n";
$header .= "Keep-Alive: 300/r/n";
$header .= "Connection: keep-alive/r/n";
$header .= "Referer: http://$host/r/n/r/n";
fputs($fp, $header);
$response = '''';
// Get the response from the remote server
while($line = fread($fp, 4096)){
$response .= $line;
}
// Close the connection
fclose( $fp );
// Remove the headers
$pos = strpos($response, "/r/n/r/n");
$response = substr($response, $pos + 4);
// Return the processed response
echo $response;
// Save the response to the local file
if(!file_exists($localfile)){
// Try to create the file, if doesn''t exist
fopen($localfile, ''w'');
}
if(is_writable($localfile)) {
if($fp = fopen($localfile, ''w'')){
fwrite($fp, $response);
fclose($fp);
}
}
}
?>
Eso es todo y debería solucionar cualquier problema que tenga con los scripts de terceros de Leverage Browser Caching.
Fuente: http://diywpblog.com/leverage-browser-cache-optimize-google-analytics/
NOTA:
En verdad, estos archivos no suelen tener un gran efecto en la velocidad real de su página. Pero puedo entender la preocupación que tienes con Google que te penaliza. Pero eso solo ocurriría si tuviera una gran cantidad de estos scripts externos en ejecución. Cualquier cosa relacionada con Google no será retenida en su contra, como dije anteriormente.