You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

页面图片异步刷新及加载出错自动回退旧缓存图片实现咨询

实现方案

核心逻辑为先在内存预加载新图片,加载成功后再替换页面资源,加载失败直接沿用旧缓存,避免加载失败时出现裂图异常。


修改后完整代码

JS代码

var curtime = new Date().getTime();
var arrayimg = [
  "https://www.learningcontainer.com/wp-content/uploads/2020/07/Sample-JPEG-Image-File-Download.jpg?" + curtime, 
  "https://upload.wikimedia.org/wikipedia/en/9/95/Test_image.jpg?" + curtime, 
  "https://testimages.org/img/testimages_screenshot.jpg?" + curtime
];
var arrayimgLoad = [1, 1, 1];
var arrayimgOLD = ["", "", ""];
// 初始化首次加载图片
arrayimg.forEach((element, index) => {
  let imgname = "img" + index;
  arrayimgOLD[index] = element + curtime;
  document.getElementById(imgname).src = arrayimgOLD[index];
})
var myVar = setInterval(function() {
  myTimer()
}, 1000);

function myTimer() {
  arrayimg.forEach(imageupdate);
}

function imageupdate(element, index) {
  if (arrayimgLoad[index] == 1) {
    // 生成带时间戳的新图片地址
    let newImgUrl = element + new Date().getTime();
    loadImage(newImgUrl, index);
  }
}
async function loadImage(imageUrl, asindex) {
  arrayimgLoad[asindex] = 0;
  const img = new Image();
  try {
    await new Promise((resolve, reject) => {
      img.onload = resolve;
      img.onerror = reject;
      img.src = imageUrl;
    });
    // 加载成功才更新页面和缓存
    arrayimgOLD[asindex] = imageUrl;
    document.getElementById("img" + asindex).src = imageUrl;
    console.log("Image " + asindex + " 加载成功,已更新");
  } catch (e) {
    // 加载失败直接沿用旧缓存,不修改页面展示
    console.log("Image " + asindex + " 加载失败,继续使用旧缓存");
  } finally {
    arrayimgLoad[asindex] = 1;
  }
  return img;
}

HTML代码

<img src="" id='img0' width="30%" height="30%" />
<img src="" id='img1' width="30%" height="30%" />
<img src="" id='img2' width="30%" height="30%" />

关键优化点

  • 新增加载异常捕获逻辑,图片加载失败时不会改动当前页面的展示内容
  • 调整资源更新顺序,先在内存中完成新图片加载,再替换页面元素的src属性,全程不会出现裂图
  • 新增初始化加载逻辑,页面打开后直接加载第一版图片,不会出现初始空白

内容的提问来源于stack exchange,提问作者Julio Marcelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:54:04