首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js惰性加载页面

一、基础概念

  1. 定义
    • 在JavaScript中,惰性加载(Lazy Loading)是一种优化网页性能的技术。对于页面中的某些资源(如图片、脚本等),不立即加载,而是等到需要它们被显示或者使用时才进行加载。
  • 原理
    • 对于图片惰性加载,通常是通过监听滚动事件,当图片即将进入可视区域时,再将图片的真实src属性赋值(之前可能是占位图或者空值)。对于脚本惰性加载,可以在需要的时候动态创建<script>标签并插入到文档中。

二、相关优势

  1. 提高页面加载速度
    • 减少初始加载时的资源请求数量。例如,一个有很多图片的网页,如果全部图片在初始加载时就请求,会花费很长时间。惰性加载可以让用户在浏览过程中逐步加载图片,加快首屏显示速度。
  • 节省带宽
    • 只加载用户实际可能看到的内容,避免不必要的资源下载。特别是对于移动设备用户,可以节省宝贵的流量。
  • 提升用户体验
    • 页面能够更快地响应用户的操作,让用户感觉页面更加流畅。

三、类型

  1. 图片惰性加载
    • 这是最常见的类型。可以使用原生的IntersectionObserver API或者通过监听scrollresizeorientationchange事件来实现。
  • 脚本惰性加载
    • 当某些功能模块不是页面初始加载就需要时,可以将对应的脚本延迟加载。例如,一些页面中的广告脚本或者特定功能插件脚本。

四、应用场景

  1. 长页面
    • 如新闻类网站的长文章页面,其中包含大量图片。惰性加载可以确保用户在浏览文章时不会因为等待所有图片加载而感到厌烦。
  • 移动应用开发(Web视图部分)
    • 在移动设备上,由于网络速度可能较慢且流量有限,惰性加载可以提高应用的响应速度并节省流量。
  • 单页应用(SPA)
    • 对于一些大型SPA,某些组件可能不需要立即加载,可以根据用户的操作动态加载,提高整体性能。

五、可能遇到的问题及解决方法

  1. 图片闪烁问题(在图片惰性加载时可能出现)
    • 原因:当图片的真实src属性被赋值时,可能会重新布局页面并且图片会有一个短暂的加载过程,导致闪烁。
    • 解决方法:可以使用CSS设置图片的占位尺寸,并且在图片加载完成前显示一个低分辨率的模糊版本或者纯色占位图。例如:
    • 解决方法:可以使用CSS设置图片的占位尺寸,并且在图片加载完成前显示一个低分辨率的模糊版本或者纯色占位图。例如:
    • 解决方法:可以使用CSS设置图片的占位尺寸,并且在图片加载完成前显示一个低分辨率的模糊版本或者纯色占位图。例如:
    • 在JavaScript中:
    • 在JavaScript中:
  • 脚本加载顺序问题(在脚本惰性加载时可能出现)
    • 原因:如果脚本之间存在依赖关系,惰性加载可能会导致依赖脚本先于被依赖脚本加载执行。
    • 解决方法:可以使用模块加载器(如ES6模块或者RequireJS等)来管理脚本的加载顺序。或者通过动态创建<script>标签时设置合适的asyncdefer属性,并且在脚本内部处理好依赖逻辑。例如:
    • 解决方法:可以使用模块加载器(如ES6模块或者RequireJS等)来管理脚本的加载顺序。或者通过动态创建<script>标签时设置合适的asyncdefer属性,并且在脚本内部处理好依赖逻辑。例如:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【JS】322- 手把手教你实现前端惰性加载

    显然这是不对的,不仅影响页面渲染速度,还浪费带宽(因为需要对列表进行拖动排序,需加载出全部列表,不能做分页)。...我们可以在浏览器滚动到一定的位置的时候进行下载,这也就是们通常所说的惰性加载,技术上现实其中要用的技术就是图片懒加载--到可视区域再加载。 ?...clientHeight = window.innerHeight; return bound.top <= clientHeight; } 进一步考虑: 以上监听scroll,并计算元素位置来实现惰性加载...在页面底部有一个loading状态标签。一旦标签可见,就表示用户到达了页面底部,从而加载新的条目放在标签的前面。...}); intersectionObserver.observe(document.getElementById('loading')); 小结: 图片(不只有图片,主要是图片占用的资源最多最常见)惰性加载是一种网页优化技术

    96730

    用惰性加载优化 React 程序

    惰性加载是一种优化 Web 应用和移动应用的旧技术。非常直截了当 —— 如果在某一时刻资源没有被查看或需要,就不要渲染它们。例如,如果我们有一个要显示的文章列表,开始时应该只渲染视口上的内容。...为什么要用懒惰性载? 大多数时候,我们的用户看不到整个网页,至少在开始时是这样。无论我们的程序 UI 如何构建,用户最初甚至永远都不需要某些组件!...因此按需加载或呈现这些组件似乎是一个更有效的决策。它可以提高程序的性能,同时也可以为我们节省大量资源。 怎么做? 我们将创建一个示例程序,可以在其中使用惰性加载。...因此,我们可以用 LazyLoad 为单个图像创建更好的图像加载体验。 该技术是将非常低质量的图像作为占位符加载,然后加载原始图像。所以,最终的 App.js 是这样: ?...使你的 JavaScript 代码简单易读 Node.js多线程完全指南 deno如何偿还Node.js的十大技术债 实战!

    2.7K20

    手把手教你实现前端惰性加载

    显然这是不对的,不仅影响页面渲染速度,还浪费带宽(因为需要对列表进行拖动排序,需加载出全部列表,不能做分页)。...我们可以在浏览器滚动到一定的位置的时候进行下载,这也就是们通常所说的惰性加载,技术上现实其中要用的技术就是图片懒加载--到可视区域再加载。...clientHeight = window.innerHeight;  return bound.top <= clientHeight;} 进一步考虑: 以上监听scroll,并计算元素位置来实现惰性加载...实现下拉无限滚动: 在页面底部有一个loading状态标签。一旦标签可见,就表示用户到达了页面底部,从而加载新的条目放在标签的前面。... });intersectionObserver.observe(document.getElementById('loading')); 小结: 图片(不只有图片,主要是图片占用的资源最多最常见)惰性加载是一种网页优化技术

    98310

    网站页面滚动加载动画JS特效

    终于尘埃落定了,前段时间忙的不可开交,结婚,工作,因为婚假+年假一起休的,导致很长时间没有更新博客了,今天抽空给大家带来了一个js特效,网站模块延迟加载的动画,假期之前就想着制作这个功能,页面滚动加载...简介 和 WOW.js 一样,scrollReveal.js 也是一款页面滚动显示动画的 JavaScript,能让页面更加有趣,更吸引用户眼球。...不同的是 WOW.js 的动画只播放一次,而 scrollReveal.js 的动画可以播放一次或无限次;WOW.js 依赖 animate.css,而 scrollReveal.js 不依赖其他任何文件...container'); container.innerHTML(data.newElementHTML); scrollReveal.init(); 其中高级自定义可以在后期加入,目前本站只是简单的加载动画...如果不喜欢这个可以试试wow.js,网站页面滚动加载动画JS特效(二)。

    11.4K20

    加载Flash、禁用JS脚本、滚动页面至元素、缩放页面

    它解决了很多在Selenium里很难解决的问题,比如手机页面截全屏。...好了,收回来,Selenium很多难解决的问题,我们要首先想到从JS脚本出发,毕竟Selenium还是支持驱动浏览器运行JS脚本的。...注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步。...方法一 基本思路:通过Selenium自动访问chrome单个网页的设置页,操作元素,始终允许加载flash。...总结 全局flash加载的设置按钮在selenium不起作用 使用pref加载也没有用 禁止javascript 禁止运行javascript还是可以通过pref的: HashMap<String, Object

    6.5K10

    网站页面滚动加载动画JS特效(二)

    昨天发布了网站页面滚动加载动画JS特效,但是加载的页面并不怎么完美,文章页面不能直接加载出来,需要滚动条继续下来,可能是没有调节js导致的,所以今天又重新测试了wow.js,感觉这个不错,很喜欢,有兴趣的可以测试下...页面在向下滚动的时候,有些元素会产生细小的动画效果。虽然动画比较小,但却能吸引你的注意。比如刚刚发布的 iPhone 6 的页面(查看)。如果你希望你的页面也更加有趣,那么你可以试试 WOW.js。...WOW.js 依赖 animate.css,所以它支持 animate.css 多达 60 多种的动画效果,能满足您的各种需求。 ?... 3、JavaScript(最后引入js...animated’ animation.css 动画的 class offset 整数 0 距离可视区域多少开始执行动画 mobile 布尔值 true 是否在移动设备上执行动画 live 布尔值 true 异步加载的内容是否有效

    7.4K30

    原生js与jquery加载页面元素比较

    原生js与jquery加载页面元素比较 原生js:将获取元素的语句写到页面头部,会因为元素还没有加载而出错,js提供了window.onload 这个方法事先加载元素 js"> // 1 原生js加载页面元素,window.onload...document.getElementById('div1'); alert('原生弹出的'+oDiv); }; // 2 jquery加载页面元素...加载页面元素通过window.onload()方法 jquery加载页面元素通过ready()方法 开发中常用jquery的ready简写写法 使用jquery需要事先下载jquery库(压缩版和完整版...要快的原因是,window.load是等标签加载完,渲染(一些资源文件,如图片,音乐等)完之后再执行,ready是个标签加载完就执行 声明:本文为原创,作者为 对弈,转载时请保留本声明及附带文章链接:http

    11.4K30

    加载Flash禁用JS脚本滚动页面至元素缩放页面

    它解决了很多在Selenium里很难解决的问题,比如手机页面截全屏。...好了,收回来,Selenium很多难解决的问题,我们要首先想到从JS脚本出发,毕竟Selenium还是支持驱动浏览器运行JS脚本的。...注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步。...这是最简单的方法; 2.缩放截取到的页面图片,即将截图的size缩放为宽和高都除以缩放比例后的大小; 3.修改Image.crop的参数,将参数元组的四个值都乘以缩放比例。...总结 全局flash加载的设置按钮在selenium不起作用 使用pref加载也没有用 禁止javascript 禁止运行javascript还是可以通过pref的: HashMap<String, Object

    7.5K40

    优化谷歌联盟广告JS加载缓慢问题,提高网站页面的加载速度

    早上跟彧繎博主聊天,看到他博客有一篇优化谷歌联盟js优化的文章,因为谷歌在国内尴尬的局面,在网页加载js的时候可能会比较拖拉,然后他又给我了一篇关于优化谷歌联盟js的文章,然后看了下自己网站的加载速度,...果然谷歌js加载的速度真的很慢,加速最慢的已经达到了6.19s,另外两个十秒+应该是图片资源,可以暂时忽略。...; document.body.appendChild(script);     }, 2000); }; 代码含义就是广告时间延迟异步加载,这样可以加快加载速度!...放在我们页面的head之内,即使多个页面都会统一调用,然后将和代码放在网页广告接口位置,例如: <ins class="adsbygoogle"      style="display...,而且我还发现一个问题,就是优化之后页面js错误由原来的10个减少成3个,这可真是意外的收获啊,其实网上的教程还是很多的,大同小异,基本都是通过异步加载实现的,好了,有问题留言反馈吧。

    3.7K40

    优化谷歌联盟广告JS加载缓慢问题,提高网站页面的加载速度

    早上跟彧繎博主聊天,看到他博客有一篇优化谷歌联盟js优化的文章,因为谷歌在国内尴尬的局面,在网页加载js的时候可能会比较拖拉,然后他又给我了一篇关于优化谷歌联盟js的文章,然后看了下自己网站的加载速度,...果然谷歌js加载的速度真的很慢,加速最慢的已经达到了6.19s,另外两个十秒+应该是图片资源,可以暂时忽略。...,这样可以加快加载速度!...放在我们页面的head之内,即使多个页面都会统一调用,然后将和代码放在网页广告接口位置,例如: <ins class="adsbygoogle"      style="display...,而且我还发现一个问题,就是优化之后页面js错误由原来的10个减少成3个,这可真是意外的收获啊,其实网上的教程还是很多的,大同小异,基本都是通过异步加载实现的,好了,有问题留言反馈吧

    8.6K50

    你觉得“惰性求值”在 JS 中会怎么实现?

    接上一篇《听君一席话,如听一席话,解释解释“惰性求值”~》,有掘友问:“我懂惰性求值的意思了,但是在 JS 中如何实现 thunk 的呢?”...JS 不像 Haskell,其自身从语言设计层面不支持惰性求值,但是可以通过语法去 模拟实现 这一特性; 想一想,我们可以用什么来 JS 语法来模拟这一“延迟计算”的特性?...赋值的时候,我不进行计算,把你包装成一个 暂停等待,等你调用 next() 的时候,我再计算; 代码 这不就是最简单版本的 JS 惰性求值 Thunk 的实现吗?...实际上 Lazy.js 也正是借助 Generator 实现“惰性”的!...现在看来,惰性求值似乎能连接“如何使用闭包”和“如何充分利用异步”!!

    1.5K20
    领券