2009-12-27 5 views
7

Solo curioso, se il javascript dell'API di Google Maps v3 sia memorizzato nella cache sul server locale?Il javascript dell'API di Google Maps può essere memorizzato nella cache?

Perché, a volte le pagine della mia intranet si caricano lentamente a causa di una connessione Internet più lenta. In caso contrario, caricare il file dal server locale e rallentare solo quando viene eseguita la richiesta della mappa.

Sono persino pronto a eseguire un cron job per aggiornare il file javascript una volta ogni tanto.

Grazie per qualsiasi input.

risposta

13

È impossibile "così com'è".

Quando si richiede lo script da Google, si inviano le intestazioni lungo lo script e tali intestazioni contengono la direttiva "senza cache".

Quindi, se si desidera che siano collegabili, è necessario creare un proxy. Invece di puntare lo script src su Google, devi puntarlo sul tuo server. Il tuo server quindi effettua la chiamata a Google e invia la risposta al cliente.

In questo modo avrete il controllo sull'intestazione HTTP e sulla memorizzazione nella cache. Puoi anche fare il caching sul contenuto dello script e fare meno connessioni con Google.

Non consiglierei a qualcuno di farlo su un sito Web di produzione o di importanza critica. Tutte le API di Google vengono aggiornate frequentemente e sono associate più o meno insieme. Se qualcosa va fuori sincrono con qualcos'altro, hai un bug difficile da rintracciare nelle tue mani.

Spero che questo aiuti.

EDIT: Ho sentito che stavi mettendo i tuoi script nella sezione HEAD del tuo documento. Forse questo fa male il tempo di caricamento della pagina "percepita". Prova a spostare il download dello script subito prima del tag </body> e l'inizializzazione della mappa nell'evento onload della pagina.

Mike

+0

Grazie per la spiegazione. è giusto che Google aggiorni l'API quasi ogni settimana. Non pensavo in questa prospettiva. – Nirmal

+4

Prego ... l'API v3 è più compatta e più veloce della v2 quindi non mi preoccuperei. su come inizializzare le tue cose come ho detto.Vedi http://developer.yahoo.com/performance/rules.html in particolare la sezione "Inserisci script in basso" –

+0

+1 per aggiunto aiuto Quel collegamento di Yahoo è davvero utile. Non ho pensato molto ai problemi di prestazioni perché le pagine sono strettamente nella intranet. Ma ora sento che dovrei dare una seria considerazione alle migliori pratiche, perché la nostra organizzazione è sul punto di essere diffusa in più punti geografici. Senza una messa a punto, sarei davvero nei guai. Grazie ancora. – Nirmal

3

IMHO non è possibile memorizzarlo nella cache. Lo script API chiama oggetti sul server di Google. Al massimo, è possibile acquisire i risultati e memorizzarli nella cache come immagini (ma in tal caso si perde l'interattività).

Se fosse possibile memorizzare nella cache i risultati di GMap, le persone si limiterebbero a memorizzare l'intero DB di Google in locale e non penso che questo sia parte del contratto dell'utente;).

Se si desidera utilizzare mappe offline, è necessario disporre di immagini non interattive o acquistare un server di mappe.

+0

Server mappe! Mi piacerebbe uno, ma non il nostro dipartimento delle finanze :(Non sto cercando di memorizzare i risultati nella cache.Le funzioni javascript di Gmap che vengono caricate nella sezione '' 'sono ciò che richiede tutto il tempo. Se potessi memorizzare nella cache il file .js scaricato , Posso invece chiamarlo dal server locale, ma le richieste di geocodifica o mappa possono essere fatte direttamente da Google. Tutto quello che sto osservando è se ci sarebbe qualche impatto sul farlo. – Nirmal

0

Un'opzione che non ti avrebbe violazione di Google Termini di servizio sarebbe quello di mantenere una cache locale di piastrelle di OpenStreetMap con lo script OpenLayers per loro visualizzazione. In pratica, utilizzando dati gratuiti per creare il proprio server di mappe.

Se ci sono particolari punti di interesse che sono importanti per la tua intranet, puoi assicurarti che siano in OpenStreetMap e configurare tu stesso un server di rendering con le sole funzionalità richieste. Dopo tutto, la sovrapposizione di ogni scuola in un distretto rispetto a quella di un png sta andando a prendere più lavoro, quindi basta mostrare il png realizzato con le scuole in loro.

Inoltre, richiederebbe molto meno ritardo su una connessione esterna lenta se il tuo map server ottiene/genera le tessere durante il fine settimana invece di colpire l'API di Google Maps tutto il tempo.

4

A partire dal 2016, js viene restituito con l'intestazione "Cache-Control: public, max-age = 1800", quindi viene memorizzato nella cache per almeno mezz'ora.