Используйте файлы .js для кэширования больших выпадающих списков. - PullRequest
3 голосов
/ 10 мая 2010

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

Эти списки могут быть близки к 4 тыс. Элементов, и их динамическая фильтрация без кэширования приведет к нескольким довольно большим круговым обращениям.

Как я могу это сделать? Я имею в виду, какие шаблоны и стратегии подойдут для этого?

Ответы [ 4 ]

2 голосов
/ 10 мая 2010

Агрессивное кэширование JSON будет работать для этого, вы просто хешируете файл JS и добавляете его в конец URL-адреса, чтобы обновить его при изменении. Одна ревизия может выглядеть так:

/media/js/ac.js?1234ABCD

А когда файл меняется, хеш меняется.

/media/js/ac.js?4321DCBA

Таким образом, когда клиент загружает страницу, ваш серверный код ссылается на хешированный URL, и клиент получит ответ 304 Not Modified при следующей загрузке страницы (при условии, что это включено на вашем сервере). Если вы используете этот метод, вы должны установить, чтобы файлы никогда не истекали, так как часть «expiring» будет обрабатываться хешем, т. Е. Когда истекает срок действия файла JS , хеш изменяется и клиент не получит 304, а скорее 200.

ac.js может содержать список или другую итерацию, которую ваш код автозаполнения может проанализировать как пул завершения, и вы получите к нему доступ, как и к любой другой переменной JS.


На практике, однако, это не должно быть необходимым для большинства проектов. Использование чего-то вроде серверной памяти memcached и сжатия gzip сделает файл небольшим и удивительно быстрым для загрузки. Если список ОГРОМНЫЙ (скажем, тысячи тысяч предметов), вы можете рассмотреть это.

1 голос
/ 10 мая 2010

Combres является хорошим решением для этого - он будет отслеживать изменения и иметь браузер кешировать js навсегда до тех пор, пока не будет внесено изменение, и в этом случае он изменит URL элемента.

http://combres.codeplex.com/

0 голосов
/ 10 мая 2010

Если это просто текстовые данные, у вас включено сжатие на веб-сервере и менее 100 элементов, то, возможно, нет необходимости поддерживать списки в клиентском скрипте.

Обычно лучше всего поместить все ваши данные (элементы списка - данные) в одно место, чтобы вам не пришлось беспокоиться о синхронизации.

0 голосов
/ 10 мая 2010

Возможно, вы захотите вместо локального хранения данных использовать jQuery и AJAX для динамического обновления выпадающих списков. Звонки могут быть сделаны всякий раз, когда это необходимо, и загрузка будет довольно быстрой.

Просто мысль.

Это может быть полезно:

http://think2loud.com/using-jquery-and-xml-to-populate-a-drop-down-box/

...