#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Существует элемент image, как мне использовать этот же элемент img без отправки другого запроса на сервер. Важно отметить, что я не хочу image1.jpg загружено дважды с веб-сервера. Есть идеи?
function loadCarousels(carouselLoc, carouselId) {
$("li").find(carouselLoc).each(function (index) {
var img = this;
var outer = 0;
$(carouselId).find("ul").each(function (innerIndex) {
var liX = document.createElement("li");
$(this).append(liX);
var imgInner = document.createElement("img");
imgInner.src = img.src;
$(imgInner).appendTo(liX);
console.log($(this));
});
});
}
Вот как я сейчас пытаюсь, но это не работает. это создает отдельное изображение.
Комментарии:
1. Большинство браузеров сохраняют pic в catch, поэтому это не должно быть проблемой
2. Я вижу несколько запросов к веб-серверу, хотя
3. ну, не совсем то, что вам может понадобиться, если вы можете использовать изображение в качестве фона, у вас может быть общий класс css…
4. Где вы видите запрос на это? в HTML?
5. На вкладке сеть в Chrome. эти изображения основаны на URL в базе данных. Это похоже на представление сводных сведений, где мы показываем изображение в двух местах на странице
Ответ №1:
Браузеры уже должны быть довольно агрессивны в отношении кэширования изображений: Chrome часто показывает несколько запросов, но если вы проверяете со второго, обычно все они удовлетворяются использованием кэша.
Если вы хотите выполнить внутреннее кэширование в своем JS-коде, попробуйте кэшировать изображения по URL, как показано ниже:
// use this as JS cache
var images = {};
function loadCarousels(carouselLoc, carouselId) {
$("li").find(carouselLoc).each(function (index) {
var img = this;
var outer = 0;
// cache it
if(!images[img.src]){
images[img.src] = document.createElement("img");
// if the user disable the cache, this should prevent another request
images[img.src].src = img.src;
}
$(carouselId).find("ul").each(function (innerIndex) {
var liX = document.createElement("li");
$(this).append(liX);
// retrieve from the cache
var imgInner = images[img.src];
$(imgInner).appendTo(liX);
console.log($(this));
});
});
}