Я создаю приложение, которое представляет собой галерею изображений, но с большим количеством изображений (это для просмотра архивов документов); в основном приложение делает это:
- показать изображение
- отображать ссылки «предыдущая» и «следующая» слева и справа от первого изображения
Предыдущая и следующая ссылки извлекаются из файла XML, в котором перечислены все изображения в последовательности; в каждом наборе около 1000-2000 изображений (по одному XML-файлу в каждом наборе). Чтобы не искать предшествующие и последующие элементы одного уровня, я включил имена каждого предыдущего и следующего изображений в качестве атрибутов каждого изображения.
Итак, файл XML в основном:
<list>
...
<image previous="ww.jpg" next="yy.jpg">xx.jpg</image>
<image previous="xx.jpg" next="zz.jpg">yy.jpg</image>
<image previous="yy.jpg" next="aa.jpg">zz.jpg</image>
...
</list>
Что я делаю, так это:
function display(img) {
var lookingfor = 'image:contains('+img+')';
$.ajax({
type: "GET",
url: "pns.xml",
dataType: "xml",
success: function(xml) {
$(xml).find(lookingfor).each(function(){
// display the actual image and the links from @previous and @next attributes
});
}
});
}
$(document).ready(function(){
var image = $.query.get('img');
display(image);
});
При первой загрузке страницы скрипт:
- получает имя изображения для отображения из параметра url 'img'
- загружает XML-файл, содержащий имена всех изображений
- получает предыдущее и следующее имена изображений из этого же файла
- отображает изображение
- отображает ссылки на предыдущее и следующее изображения
Пока все хорошо. Моя проблема с другими изображениями.
Ссылка на предыдущее или следующее изображение:
display('image_id');
Я надеялся, что без перезагрузки страницы и простого повторного вызова функции «display» мне не нужно будет снова получать XML-файл и не анализировать его снова. Однако, похоже, что это не так: файл XML, очевидно, загружается снова при каждом новом вызове функции display.
Значительная задержка при первой загрузке страницы является приемлемой; но одинаковая задержка для каждого изображения кажется вялой и очень неприятной.
У меня есть полный контроль над приложением; если есть более эффективное решение, чем файл XML, для хранения параметров, которые будут в порядке. Однако приложение должно работать в автономном режиме, поэтому я не могу запросить у сервера имена предыдущих / следующих изображений.
Кроме того, использование селектора: contains (), вероятно, не самый быстрый подход: что будет лучше?
Редактировать : использование XML и его внешняя загрузка явно были далеки от оптимальных; гораздо лучший и более простой подход - иметь большой объект, содержащий один массив на изображение, и загружать этот объект только один раз (при первой загрузке скрипта). Другой подход заключается в использовании некоторого локального хранилища / средства SQL; Я могу попробовать это с Google Gears, который предоставляет такие инструменты.