2009-12-27 11 views
7

Es curioso, ya sea que el API de Google Maps API v3 esté almacenado en caché en el servidor local.¿Se puede almacenar en caché el API de Google Maps API?

Porque, a veces, mis páginas de intranet se cargan lentamente debido a la conexión a Internet más lenta. De lo contrario, cargará el archivo del servidor local y disminuirá la velocidad solo cuando se realice la solicitud del mapa.

Incluso estoy listo para ejecutar un trabajo cron para actualizar el archivo javascript de vez en cuando.

Gracias por cualquier entrada.

Respuesta

13

Es imposible "como es".

Cuando solicita la secuencia de comandos de Google, envía encabezados a lo largo de la secuencia de comandos y esos encabezados contienen la directiva "no-caché".

Así que si desea que sean de caché, debe crear un proxy. En lugar de señalar el script src en Google, lo apunta a su servidor. Su servidor realiza la llamada a Google y envía la respuesta nuevamente al cliente.

De esta manera tendrá control sobre el encabezado HTTP y el almacenamiento en caché. También podría almacenar en caché el contenido del script para hacer menos conexiones con Google.

No aconsejaría a alguien que lo haga en un sitio web de producción o de misión crítica. Todas las API de Google se actualizan con frecuencia y están más o menos unidas. Si algo no está sincronizado con otra cosa, tienes un error difícil de rastrear en tus manos.

Espero que ayude.

EDIT: Escuché que estaba poniendo sus scripts en la sección HEAD de su documento. Tal vez eso está perjudicando su tiempo de carga de página "percibido". Intente mover la descarga del script justo antes de la etiqueta </body> y la inicialización del mapa en el evento onload de la página.

Mike

+0

Gracias por la explicación. tienen razón de que Google actualiza la API casi todas las semanas. No pensé en esa perspectiva. – Nirmal

+4

De nada ... la API v3 es más compacta y más rápida que la v2, así que no me preocupo. En su lugar, debería mirar sobre cómo inicializar sus cosas como dije. Consulte http://developer.yahoo.com/performance/rules.html en particular la sección "Poner secuencias de comandos en la parte inferior". –

+0

+1 para el ayuda agregada Ese enlace de Yahoo es realmente útil. No pensé mucho en los problemas de rendimiento porque las páginas están estrictamente en la intranet. Pero ahora creo que debería considerar seriamente las mejores prácticas, ya que nuestra organización está a punto de extenderse a múltiples ubicaciones geográficas. Sin una puesta a punto, realmente estaría en un problema. Gracias de nuevo. – Nirmal

3

En mi humilde opinión no puede guardarlo en caché. La secuencia de comandos API llama objetos en el servidor de Google. A lo sumo, puede capturar los resultados y almacenarlos en caché como imágenes (pero luego pierde la interactividad).

Si fuera posible almacenar en caché los resultados de GMap, las personas solo almacenarían en caché todo el DB de Google localmente y no creo que esto sea parte del acuerdo del usuario;).

Si desea mapas sin conexión, tendrá que ver con imágenes no interactivas o comprar un servidor de mapas.

+0

¡Servidor de mapas! Me encantaría uno, pero no nuestro departamento de finanzas :(No estoy buscando almacenar en caché los resultados. Las funciones de JavaScript de Gmap que se cargan en la sección '' es lo que toma todo el tiempo. Si pudiera almacenar el archivo .js en la memoria caché , En cambio, puedo llamarlo desde el servidor local. Pero las solicitudes de geocodificación o de mapas se pueden hacer directamente desde Google. Todo lo que estoy viendo es si habría algún impacto al hacerlo. – Nirmal

0

una opción que no se tendría que viola los Términos de servicio de Google sería mantener una caché local de fragmentos de OpenStreetMap con el guión OpenLayers para la visualización de ellos. Básicamente, utilizando datos gratuitos para crear su propio servidor de mapas.

Si hay puntos de interés particulares que son importantes para su intranet, puede asegurarse de que estén en OpenStreetMap y configurar un servidor de renderizado con las funciones que necesita. Después de todo, superponer a cada escuela en un distrito a través de algunos PNG va a tomar más trabajo y luego solo mostrar el PNG hecho con las escuelas en ellos.

También tomaría mucho menos retraso en una conexión externa lenta si su servidor de mapas obtiene/genera las fichas durante el fin de semana en lugar de presionar la API de Google Map todo el tiempo.

4

A partir de 2016, el js se devuelve con el encabezado "Cache-Control: public, max-age = 1800", por lo que se almacena en caché durante al menos media hora.