Клуб API Карт

Кэширование файла geoxml.xml

otdyhnamore.com
9 июля 2012, 20:38

C api Яндекс.Карт недавно работаем, однако появился вопрос по поводу кэширования.

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

Файл с метками geoxml.xml возвращается с уникальным id_callback, что не дает его кэшировать в браузере. Если возможность это обойти? Иначе при большом количестве меток каждый раз придется ждать порядка нескольких секунд на бесполезную загрузку неизменившегося файла.

8 комментариев
Подписаться на комментарии к посту

вы можете управлять кешированием с помощью http-заголовков

Не совсем понятно, что вы имеете ввиду, можно пример?

Ведь ответ дает сервер Яндекса. Причем в строку запроса вкладывает случайный параметр.

по идее там должен пробрасываться заголовок Cache-Control т.е. от Яндекса вам ответ придет с таким же заголовком, какой отдаете вы при запросе к вашему xml-файлу, когда за ним приходит Яндекс

Текущий geoxml не предусматривает кэширования.
Вы можете, например, отказаться от xml-формата, хранить данные в виде json и загружать их самостоятельно. Тогда управление кэшированием будет в ваших руках.

Ты уверен? Вроде чтото было на xscript на тему кеширования написано

Он кэширует сам файл на стороне Яндекса, чтобы снизить нагрузку на сервер с xml.
А здесь речь идёт о клиентском кэшировании, которое действительно выключено совсем.

Проблема в том, что на карте присутствует большое количество меток. geoxml позваляет возвращать целый список объектов меток. Если это делать через json, то большое количество меток сильно подгружает клиентскую часть и делает ее не юзабельной.

Тогда технология активных областей - ваш выбор :)
Подробный пример (для 1.1, но в 2.0 почти то же самое): http://api.yandex.ru/maps/doc/jsapi/1.x/mod/tasks/how-to-create-hotspots-layer.xml
Документация: http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/hotspot.ObjectSource.xml http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/hotspot.Layer.xml