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

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

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

代码说明

  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 操作,使得代码更加简洁和易读。

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

推荐文章

如何优化网页的 SEO 架构
2024-11-18 14:32:08 +0800 CST
Web浏览器的定时器问题思考
2024-11-18 22:19:55 +0800 CST
Requests库详细介绍
2024-11-18 05:53:37 +0800 CST
Nginx 反向代理
2024-11-19 08:02:10 +0800 CST
mysql 优化指南
2024-11-18 21:01:24 +0800 CST
Go 开发中的热加载指南
2024-11-18 23:01:27 +0800 CST
Go 语言实现 API 限流的最佳实践
2024-11-19 01:51:21 +0800 CST
Vue3中的v-for指令有什么新特性?
2024-11-18 12:34:09 +0800 CST
资源文档库
2024-12-07 20:42:49 +0800 CST
推荐几个前端常用的工具网站
2024-11-19 07:58:08 +0800 CST
如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
html一个包含iPhoneX和MacBook模拟器
2024-11-19 08:03:47 +0800 CST
js一键生成随机颜色:randomColor
2024-11-18 10:13:44 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
向满屏的 Import 语句说再见!
2024-11-18 12:20:51 +0800 CST
Go 单元测试
2024-11-18 19:21:56 +0800 CST
PHP 8.4 中的新数组函数
2024-11-19 08:33:52 +0800 CST
Rust 并发执行异步操作
2024-11-18 13:32:18 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
程序员茄子在线接单