网页性能优化之图片懒加载

一、前言最近因为需要做一个小网站,但是呢,因为图片比较多,打开网页速度很慢,服务器压力就会很大。不仅影响渲染速度还会浪费带宽,比如一个1M大小的图片,并发情况下,达到1000并发,即同时有1000个人访问,就会产生1个G的带宽。于是就想到了图片懒加载来减轻服务器的压力,优先加载可视区域的内容,其他部分等进入了可视区域再加载,从而提高性能,可以大幅度的提高网页加载速度,效果很明显,于是想着将这个方…

大家好,又见面了,我是你们的朋友全栈君。

一、前言

最近因为需要做一个小网站,但是呢,因为图片比较多,打开网页速度很慢,服务器压力就会很大。不仅影响渲染速度还会浪费带宽,比如一个1M大小的图片,并发情况下,达到1000并发,即同时有1000个人访问,就会产生1个G的带宽。于是就想到了图片懒加载来减轻服务器的压力,优先加载可视区域的内容,其他部分等进入了可视区域再加载,从而提高性能,可以大幅度的提高网页加载速度,效果很明显,于是想着将这个方法记录下来,方便以后或者有需要的人使用,方法和功能都是亲测可用,请放心观看。

二、原理

先将 img 标签的 src 链接设为同一张图片(一般是loading.gif图片),然后给 img标签 设置自定义属性( data-src),然后将真正的图片地址存储在 data-src 中,当JS监听到该图片元素进入可视窗口时,将自定义属性中的地址存储到src属性中。达到懒加载的效果。这样做能防止页面一次性向服务器发送大量请求,导致服务器响应面,页面卡顿崩溃等

三、实现

网页loading.gif 素材 :http://www.sucaijishi.com/2013/gif_0527/57.html

  <a  href="javascript:;" class="img" rel="nofollow" >
       <img src="/static/images/utils/loading.gif" th:data-src="${goodList.goodsImg}">
  </a>

Js实现原理

<script>

    // 一开始没有滚动的时候,出现在视窗中的图片也会加载
    start();

    // 当页面开始滚动的时候,遍历图片,如果图片出现在视窗中,就加载图片
    var clock; //函数节流
    $(window).on('scroll',function(){ 
   
        if(clock){ 
   
            clearTimeout(clock);
        }
        clock = setTimeout(function(){ 
   
            start()
        },200)
    })

    function start(){ 
   
        $('.img img').not('[data-isLoading]').each(function () { 
   
            if (isShow($(this))) { 
   
                loadImg($(this));
            }
        })
    }


    // 判断图片是否出现在视窗的函数
    function isShow($node){ 
   
        return $node.offset().top <= $(window).height()+$(window).scrollTop();
    }

    // 加载图片的函数,就是把自定义属性data-src 存储的真正的图片地址,赋值给src
    function loadImg($img){ 
   
        $img.attr('src', $img.attr('data-src'));

        // 已经加载的图片,我给它设置一个属性,值为1,作为标识
        // 弄这个的初衷是因为,每次滚动的时候,所有的图片都会遍历一遍,这样有点浪费,所以做个标识,滚动的时候只遍历哪些还没有加载的图片
        $img.attr('data-isLoading',1);
    }

</script>

四、效果展示

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126921.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月8日 下午10:00
下一篇 2022年4月8日 下午10:00


相关推荐

  • 新一代金融神话Filecoin[通俗易懂]

    新一代金融神话Filecoin[通俗易懂]Filecoin是区块链史上耗时最短的ICO融资项目,受到了DCG集团、文克莱沃斯兄弟基金会、联合广场风投、AndersonHollotz基金和红杉资本等投资巨头的青睐。储存即收益,Filecoin与BTC的工作证明是不同的。filecoin只需要提供存储空间和宽带,就可以满足获取身份证明的需求。因此,Filecoin可以从根本上提高人类的效率,是一种真正的共享经济,它可以极大地推动存储资源的使用方式。由于Filecoin是基于强大的IPFS协议,并且由于IPFS的大量应用,Filecoin作为IPFS

    2025年11月3日
    6
  • 钽电容规格定义_钽电容规格与封装尺寸

    钽电容规格定义_钽电容规格与封装尺寸

    2025年5月24日
    7
  • 多亏OpenClaw,AI行业找到了自己的“移动梦网”

    多亏OpenClaw,AI行业找到了自己的“移动梦网”

    2026年3月14日
    2
  • 通义千问1.8B量化模型快速上手:Web聊天界面搭建教程

    通义千问1.8B量化模型快速上手:Web聊天界面搭建教程

    2026年3月16日
    4
  • html 行级元素和块级元素标签列表

    html 行级元素和块级元素标签列表一 显示元素 一 块级元素 div p h1 h6 form ul ol dl dt dd li table tr td th hr blockquote address table menu preHTML5 header section article footer 等块级元素独占一行 当没有设置宽高时 它默认设置为 100 其宽度自动填满其父元素宽度 块级元素允许设置宽高 widt

    2025年8月24日
    4
  • 数据字典表设计「建议收藏」

    为什么字典表?在实际项目开发过程中常遇到下面场景:某些变量在多个地方使用,而且一般是固定的,但是随着系统升级和后期变化,可能需要改变,如果这些变量写死在代码里面将会变得难以维护,所以要将其从代码中抽离出来。一般的业务系统客户端与用户交互的时候都会使用下拉框组件,对于某些比较固定的值的下拉组件的数据来源一般都是比较固定的一类数值。解决方案有的做法是使用枚举或者Constants常量类来实现,这种情况下在量少的前提是没问题的,而且一旦需要修改就得修改源码;随着系统的开发拓展,后期将无法维护,甚至命名困难

    2022年4月9日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号