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

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

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

代码说明

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

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

推荐文章

关于 `nohup` 和 `&` 的使用说明
2024-11-19 08:49:44 +0800 CST
HTML5的 input:file上传类型控制
2024-11-19 07:29:28 +0800 CST
JavaScript 异步编程入门
2024-11-19 07:07:43 +0800 CST
快手小程序商城系统
2024-11-25 13:39:46 +0800 CST
PHP中获取某个月份的天数
2024-11-18 11:28:47 +0800 CST
2024年微信小程序开发价格概览
2024-11-19 06:40:52 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
Nginx rewrite 的用法
2024-11-18 22:59:02 +0800 CST
Python实现Zip文件的暴力破解
2024-11-19 03:48:35 +0800 CST
Go语言中的`Ring`循环链表结构
2024-11-19 00:00:46 +0800 CST
Golang在整洁架构中优雅使用事务
2024-11-18 19:26:04 +0800 CST
Golang 中你应该知道的 noCopy 策略
2024-11-19 05:40:53 +0800 CST
全栈工程师的技术栈
2024-11-19 10:13:20 +0800 CST
html一份退出酒场的告知书
2024-11-18 18:14:45 +0800 CST
支付宝批量转账
2024-11-18 20:26:17 +0800 CST
CSS 媒体查询
2024-11-18 13:42:46 +0800 CST
跟着 IP 地址,我能找到你家不?
2024-11-18 12:12:54 +0800 CST
一些好玩且实用的开源AI工具
2024-11-19 09:31:57 +0800 CST
Nginx 如何防止 DDoS 攻击
2024-11-18 21:51:48 +0800 CST
程序员茄子在线接单