编程 利用图片实现网站的加载速度

2024-11-18 12:29:31 +0800 CST views 812

这段代码的主要作用是通过创建并加载隐藏的图片来检测多个外部链接的加载时间,并将其显示在页面上。以下是代码的详细说明和优化建议:

代码说明

  1. HTML结构:

    • 页面上有多个外部链接,每个链接包含一个显示加载时间的元素(enter-ping)。
    • 通过 a 标签将外部链接与相应的站点进行关联。
  2. JavaScript 逻辑:

    • 通过 JavaScript 动态创建 img 元素并尝试加载外部链接中的图片。
    • 通过捕获 onerror 事件来判断图片加载失败,并计算加载时间。
    • 计算出的加载时间显示在相应的 enter-ping 元素中。
  3. 计时:

    • 使用 setInterval 函数每 100 毫秒更新一次 tim 变量,用于记录加载时间。
    • 当图片加载失败时,触发 uomg 函数,显示加载时间。

优化建议

  1. 避免直接使用 setInterval

    • setInterval 是一种基于时间的轮询机制,可能会导致不准确的计时。可以改用更精确的 Date.now() 来计算时间。
  2. 图片加载的优化

    • 图片加载使用随机数来防止缓存问题,这种方法可行,但并非最佳选择。可以使用其他缓存控制手段来实现同样的效果。
  3. 避免内联样式和事件

    • 在创建元素时避免内联样式和事件绑定,可以使用更现代的事件处理方式,如 addEventListener
  4. 加载错误处理

    • 当前只捕获了图片加载失败的情况(onerror),建议同时处理加载成功的情况(onload),以便记录准确的加载时间。

优化前的代码

<div class="field">

        <div class="enter-maomi">

          <div class="enter-icon">

            <div class="icon icon_hand"></div>

          </div>

          <div class="enter-ping">

            <span class="text-white">90ms</span>

          </div>

          <div class="enter-link">

            <a href="https://abc.com" target="_blank"><span class="c_blue">测试网站</span> </a>

          </div>

        </div>

        <div class="enter-maomi">

          <div class="enter-icon">

            <div class="icon icon_hand"></div>

          </div>

          <div class="enter-ping">

            <span class="text-white">240ms</span>

          </div>

          <div class="enter-link">

             <a href="https://abc.com" target="_blank"><span class="c_blue">测试网站</span> </a>

          </div>

        </div>

        <div class="enter-maomi">

          <div class="enter-icon">

            <div class="icon icon_hand"></div>

          </div>

          <div class="enter-ping">

            <span class="text-white">60ms</span>

          </div>

          <div class="enter-link">

           <a href="https://abc.com" target="_blank"><span class="c_blue">测试网站</span> </a>

          </div>

        </div>

        <div class="enter-maomi">

          <div class="enter-icon">

            <div class="icon icon_hand"></div>

          </div>

          <div class="enter-ping">

            <span class="text-white">340ms</span>

          </div>

          <div class="enter-link">

         <a href="https://abc.com" target="_blank"><span class="c_blue">测试网站</span> </a>

          </div>

        </div>

        <div class="enter-maomi">

          <div class="enter-icon">

            <div class="icon icon_hand"></div>

          </div>

          <div class="enter-ping">

            <span class="text-white">20ms</span>

          </div>

          <div class="enter-link">

           <a href="https://abc.com" target="_blank"><span class="c_blue">测试网站</span> </a>

          </div>

        </div>

        <div class="enter-maomi">

          <div class="enter-icon">

            <div class="icon icon_hand"></div>

          </div>

          <div class="enter-ping">

            <span class="text-white">500ms</span>

          </div>

          <div class="enter-link">

        <a href="https://abc.com" target="_blank"><span class="c_blue">测试网站</span> </a>

          </div>

        </div>

        <p class="c_blue c_link">请添加收藏本页面地址,方便您下次访问使用哦!</p>

      </div>



<script language="javascript">

      var tim = 1;

      setInterval("tim++",100);

      obj = document.querySelectorAll('.enter-link a');

      sbj = document.querySelectorAll('.enter-ping span');

      for(var i = 0;i < obj.length; i++){

        var pobj = document.querySelector('.field');

        var img = document.createElement('img');

        img.setAttribute('src', obj[i].href + '/' + Math.random());

        img.setAttribute('onerror', 'uomg("' + i + '")');

        img.setAttribute('style', 'display:none');

        pobj.appendChild(img);

      }

      function uomg(index){

        console.log(sbj[index]);

        sbj[index].innerText = tim * 10 + 'ms';

      }

    </script> 

优化后的代码

<div class="field">
    <!-- 这里放置多个链接块,每个块代表一个外部链接 -->
    <!-- 每个链接块都包含图标、加载时间显示和链接 -->
</div>

<script language="javascript">
    document.addEventListener('DOMContentLoaded', function() {
        var startTime = Date.now(); // 记录起始时间
        var links = document.querySelectorAll('.enter-link a'); // 获取所有链接
        var pingDisplays = document.querySelectorAll('.enter-ping span'); // 获取显示加载时间的元素

        links.forEach((link, index) => {
            var img = new Image();
            img.src = link.href + '/' + Math.random();
            img.style.display = 'none';

            img.onload = img.onerror = function() {
                var endTime = Date.now(); // 记录结束时间
                var loadTime = endTime - startTime; // 计算加载时间
                pingDisplays[index].innerText = loadTime + 'ms'; // 显示加载时间
            };

            document.body.appendChild(img);
        });
    });
</script>

说明

  1. 准确计时: 使用 Date.now() 计算加载时间,避免了 setInterval 的不准确性。
  2. 事件处理: 使用 onloadonerror 事件来处理图片的加载结果,更加全面。
  3. 简化逻辑: 优化了 DOM 操作,使得代码更加简洁和易读。

通过这些优化,可以更好地测量外部链接的响应时间,并显示在页面上,有助于用户判断各个链接的可用性和加载速度。

推荐文章

淘宝npm镜像使用方法
2024-11-18 23:50:48 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
Vue3中的Slots有哪些变化?
2024-11-18 16:34:49 +0800 CST
Vue3中的v-for指令有什么新特性?
2024-11-18 12:34:09 +0800 CST
使用Ollama部署本地大模型
2024-11-19 10:00:55 +0800 CST
CSS Grid 和 Flexbox 的主要区别
2024-11-18 23:09:50 +0800 CST
mendeley2 一个Python管理文献的库
2024-11-19 02:56:20 +0800 CST
如何在Vue 3中使用Ref访问DOM元素
2024-11-17 04:22:38 +0800 CST
html流光登陆页面
2024-11-18 15:36:18 +0800 CST
纯CSS绘制iPhoneX的外观
2024-11-19 06:39:43 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
Vue3中的v-slot指令有什么改变?
2024-11-18 07:32:50 +0800 CST
使用Vue 3实现无刷新数据加载
2024-11-18 17:48:20 +0800 CST
Go 如何做好缓存
2024-11-18 13:33:37 +0800 CST
Vue3中的JSX有什么不同?
2024-11-18 16:18:49 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
Rust 并发执行异步操作
2024-11-18 13:32:18 +0800 CST
程序员茄子在线接单