Можно ли кэшировать javascript API Карт Google?

Просто любопытно, будет ли javascript Google Maps API v3 кэшироваться на локальном сервере?

Потому что иногда мои интранет-страницы загружаются медленно из-за более медленного интернет-соединения. В противном случае он загружал бы файл с локального сервера и замедлялся только при запросе карты.

Я даже готов запустить задание cron, чтобы время от времени обновлять файл javascript.

Спасибо за любой вклад.


person Nirmal    schedule 27.12.2009    source источник


Ответы (4)


Это невозможно "как есть".

Когда вы запрашиваете сценарий у Google, они отправляют заголовки вместе со сценарием, и эти заголовки содержат директиву «без кеша».

Поэтому, если вы хотите, чтобы они кэшировались, вы должны создать прокси. Вместо того, чтобы указывать скрипт src на Google, вы указываете его на свой сервер. Затем ваш сервер звонит в Google и отправляет ответ обратно клиенту.

Таким образом, у вас будет контроль над заголовком HTTP и кэшированием. Вы также можете кэшировать содержимое скрипта, чтобы меньше подключаться к Google.

Я бы не советовал кому-то делать это на производственном или критически важном веб-сайте. Все API Google часто обновляются и более или менее связаны друг с другом. Если что-то выходит из синхронизации с чем-то другим, у вас есть проблема с отслеживанием ошибок.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: я слышал, что вы размещали свои сценарии в разделе HEAD вашего документа. Возможно, это вредит вашему «воспринимаемому» времени загрузки страницы. Попробуйте перенести загрузку скрипта непосредственно перед тегом </body> и инициализацию карты в событие onload страницы.

Майк

person Mike Gleason jr Couturier    schedule 27.12.2009
comment
Спасибо за объяснение. Вы правы, что Google обновляет API почти каждую неделю. Я не думал в этой перспективе. - person Nirmal; 27.12.2009
comment
Не за что... API v3 компактнее и быстрее, чем v2, так что я бы не стал волноваться. Вместо этого вы должны посмотреть, как вы инициализируете свои вещи, как я сказал. См. developer.yahoo.com/performance/rules.html, в частности, Put Scripts на Нижняя часть. - person Mike Gleason jr Couturier; 27.12.2009
comment
+1 за добавленную помощь. Эта ссылка Yahoo действительно полезна. Я не думал о проблемах с производительностью, потому что страницы находятся строго во внутренней сети. Но теперь я чувствую, что должен серьезно рассмотреть лучшие практики, поскольку наша организация находится на грани распространения в нескольких географических точках. Без тонкой настройки у меня действительно были бы проблемы. Спасибо еще раз. - person Nirmal; 28.12.2009
comment
Перемещение загрузки скриптов из ‹head› в ‹body› улучшило производительность загрузки !! Спасибо - person jmojico; 17.04.2020

По состоянию на 2016 год js возвращается с заголовком «Cache-Control: public, max-age=1800», поэтому он кэшируется как минимум на полчаса.

person Andris    schedule 27.01.2016

ИМХО, кэшировать нельзя. Сценарий API вызывает объекты на сервере Google. В лучшем случае вы можете зафиксировать результаты и кэшировать их как изображения (но тогда вы потеряете интерактивность).

Если бы было возможно кэшировать результаты GMap, люди просто кэшировали бы всю БД Google локально, и я не думаю, что это является частью пользовательского соглашения;).

Если вам нужны автономные карты, вам придется использовать неинтерактивные изображения или купить картографический сервер.

person Traveling Tech Guy    schedule 27.12.2009
comment
Картографический сервер! Мне бы хотелось, но не наш финансовый отдел :( Я не собираюсь кэшировать результаты. Функции javascript Gmap, которые загружаются в разделе <head>, занимают все время. Если бы я мог кэшировать извлеченный файл .js, я вместо этого можно вызвать его с локального сервера. Но запросы геокодирования или карты могут быть сделаны непосредственно из Google. Все, что я смотрю, это то, будет ли какое-либо влияние на это. - person Nirmal; 27.12.2009

Вариантом, который не заставит вас нарушать Условия обслуживания Google, будет сохранение локального кеша листов OpenStreetMap со сценарием OpenLayers для их просмотра. По сути, используя бесплатные данные для создания собственного картографического сервера.

Если есть определенные достопримечательности, которые важны для вашей интрасети, вы можете убедиться, что они есть в OpenStreetMap, и самостоятельно настроить сервер рендеринга только с теми функциями, которые вам нужны. В конце концов, наложение каждой школы в районе на несколько png-файлов потребует больше работы, чем просто отображение png-файлов со школами в них.

Также будет гораздо меньше задержек при медленном внешнем соединении, если ваш картографический сервер будет получать/генерировать плитки в выходные дни, а не постоянно обращаться к Google Map API.

person sargas    schedule 27.12.2009