js学习总结----延迟加载思想和首屏延迟加载

作用:保证页面打开的速度(3s之内如果首页打不开就已经算是死亡页面了)

原理:

  1)、对于首屏内容中的图片:首先给对应的区域一张默认图片占的位置(默认图需要非常的小,一般可以维持在5kb以内),当首屏内容都加载完成后(或者也可以给一个延迟的时间),我在开始加载真实的图片

  2)、对于其他屏中的图片:也是给一张默认的图片占位,当滚动条滚动到对应区域的时候,我们再开始加载真实的图片

  扩展:数据的异步加载,开始只把前两屏的数据加载绑定出来,后面的数据不进行处理,当页面滚动到对应区域的时候,在重新请求数据绑定渲染数据

  具体可以看一下下图

  

首屏的延迟加载代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            padding:0;
            margin:0;
            font-size:14px;
        }
        #banner{
            margin:10px auto;
            width:300px;
            height:150px;
            border:1px solid green;
            background:url(‘img/default.gif‘) no-repeat center center;/*给当前的区域加一个默认图占位,告诉用户此处的图片正在加载中*/
        }
        #banner img{
            display:none;/*在开始的时候IMG的SRC属性没有地址,这样的话在IE浏览器中会显示一张碎图,不美观,所以我们让其默认是隐藏的,当真实的图片加载完成后在显示*/
            width:100%;
            height:100%;
        }
    </style>
</head>
<body>
    <div id=‘banner‘>
        <!--trueImg是当前标签的自定义属性,存储的是真实图片的地址-->
        <img src=""  trueImg="img/jd.jpg">
    </div>
    <script>
        var banner = document.getElementById(‘banner‘),imgFir = banner.getElementsByTagName(‘img‘)[0]
        window.setTimeout(function(){
            // imgFir.src = imgFir.getAttribute(‘trueImg‘);
            // imgFir.style.display = "block"
            //以上处理还是不完整的:如果我们获取的真实图片的地址是错误的,赋值给IMG的SRC属性的时候,不仅控制台会报错,而且页面中还会出现碎图
            //获取图片的地址,验证地址的有效性,是有效的才赋值,不是有效的是不进行处理的
            // var oImg = document.createElement(‘img‘)
            var oImg = new Image;//创建一个临时的IMG标签
            oImg.src = imgFir.getAttribute(‘trueImg‘);
            oImg.onload = function(){//当图片能够正常加载
                imgFir.src = this.src;
                imgFir.style.display = "block";
                oImg = null
                console.log(‘加载完成‘)
            }
            console.log(‘正在加载中...‘)
        },500)
    </script>
</body>
</html>

多屏单张图片的延迟加载

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            padding:0;
            margin:0;
            font-size:14px;
        }
        #banner{
            margin:10px auto;
            width:300px;
            height:150px;
            border:1px solid green;
            background:url(‘img/default.gif‘) no-repeat center center;/*给当前的区域加一个默认图占位,告诉用户此处的图片正在加载中*/
        }
        #banner img{
            display:none;/*在开始的时候IMG的SRC属性没有地址,这样的话在IE浏览器中会显示一张碎图,不美观,所以我们让其默认是隐藏的,当真实的图片加载完成后在显示*/
            width:100%;
            height:100%;
        }
    </style>
</head>
<body>
    <div id=‘banner‘>
        <!--trueImg是当前标签的自定义属性,存储的是真实图片的地址-->
        <img src=""  trueImg="img/jd.jpg">
    </div>
    <script>
        var banner = document.getElementById(‘banner‘),imgFir = banner.getElementsByTagName(‘img‘)[0]

        window.onscroll = function(){
            if(banner.isLoad){
                return;
            }
            var A = banner.offsetHeight+utils.offset(banner).top;
            var B = utils.win("clientHeight") + utils.win("scrollTop");
            if(A<B){
                //当条件成立,我们加载真实的图片,第一次加载完成后,我们在让页面滚动的过程中A<B一直成立,又重新执行下面的操作,导致了重复给一个容器中的图片进行加载
                var oImg = new Image;
                oImg.src = imgFir.getAttribute(‘trueImg‘);
                oImg.onload = function(){
                    imgFir.src = this.src;
                    imgFir.style.display = ‘block‘;
                    oImg = null;

                }
                banner.isLoad = true;//设置一个自定义属性告诉浏览器我已经把图片加载完了(不管是否正常的加载,只要处理过一次以后都不需要处理了)

            }
        }
    </script>
</body>
</html>
时间: 2024-09-29 09:36:34

js学习总结----延迟加载思想和首屏延迟加载的相关文章

降低首屏时间,“直出”是个什么概念?

早几年前端还处于刀耕火种.JQuery独树一帜的时代,前后端代码的耦合度很高,一个web页面文件的代码可能是这样的: 这意味着后端的工程师往往得负责一部分修改HTML.编写脚本的工作,而前端开发者也得了解页面上存在的服务端代码含义. 有时候某处页面逻辑的变动,鉴于代码的混搭,可能都不确定应该请后端还是前端来改动(即使他们都能处理). 前端框架热潮 有句俗话说的好——“人啊,要是擅于开口‘关我屁事’和‘关你屁事’这俩句,可以节省人生中的大部分时间”. 随着这两年被 angular 牵头带起的各种前

Vue SPA 首屏加载优化实践

写在前面 本文记录笔者在Vue SPA项目首屏加载优化过程中遇到的一些坑及优化方案! 我们以 vue-cli 工具为例,使用 vue-router 搭建SPA应用,UI框架选用 element-ui , ajax方案选用 axios, 并引入 vuex ,使用 vuex-router-sync 将 router 同步到 store ,服务器使用本地Nginx服务. 构建项目 vue-init webpack vue-spa-starter-kit cd vue-spa-starter-kit n

关于首屏时间采集自动化的解决方案

关于首屏 首屏时间是指从转向该页面到屏幕中该页面所有内容都可见时的时间.已经有太多的关于首屏时间的计算,在本文中并不重复阐述这些已经被提出或者实现的方案,而旨在探索与讨论更多的首屏自动化采集方案,扩大思考范围,你我思想之间互相碰撞往往可以激起更多的稀奇古怪的解决方案,这也正是我写这篇文章的目的. 通过浏览器调试工具,我们可以清晰的看出页面资源加载时序图: 先是html页面加载,token进行词法.语法解析后开始加载静态资源并执行相关脚本,开始构建DOM树.render树和CSSOM数,最后加载图

首屏,白屏时间如何计算??

做移动web页面,受移动网络网速和终端性能影响,我们经常要关注首屏内容展示时间(以下简称首屏时间)这个指标,它衡量着我们的页面是否能在用户耐心消磨完之前展示出来,很大程度影响着用户的使用满意度. 怎么获取首屏时间呢? 我们经常要先问自己:页面是怎么加载数据? A:加载完静态资源后通过ajax请求去后台获取数据,数据回来后渲染内容 在每个点打上一个时间戳,首屏时间 = 点8 – 点1: B:使用后台直出,返回的html已经带上内容了 此时首屏时间 = 点4 – 点1. 注:1. 打了这么多个点,是

腾讯优测优分享 | 探索react native首屏渲染最佳实践

腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react native实现的界面进行持续优化.目标只有一个,在享受react native带来的新特性的同时,在体验上无限逼近原生实现.作为一名前端开发,本文会从前端角度,探索react native首屏渲染最佳实

探索react native首屏渲染最佳实践

1.前言 react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react native实现的界面进行持续优化.目标只有一个,在享受react native带来的新特性的同时,在体验上无限逼近原生实现.作为一名前端开发,本文会从前端角度,探索react native首屏渲染最佳实践. 2.首屏耗时计算方法 2.1我们关注的耗时 优化首屏渲染耗时,需要先定义首屏耗时的衡量方法.将react nat

node.js 学习 00

前言 先写点废话,相中node.js倒是纯属偶然. 在这之前我想要要搭建一个人网站,我感到现有的博客/空间之类只能给予用户有限的控制力.于是在AWS上申请了免费一年的VPS,自己买了一个域名,百度了之后选择了在主机上挂了一个nginx.在这之后我发现直接手写html是一件十分麻烦的事情,于是暂时失去了构建的方向.只是改了改nginx的默认的主页,就先放着了. 在这之后的新学期里,我多一门 数据库原理 的课程,在这之前我通过王垠的博客了解过Nosql的一些概念.数据库原理老师对传统关系性数据库的吹

js学习笔记知识点

AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: 'use strict'; function success(text) { var textarea = document.getE

时间都去哪了-移动Web首屏优化实践

时间都去哪了-移动Web首屏优化实践 首屏时间 可用性的前提,后面用户是否使用你app很重要的因素之一: 我们PC上访问其实现在的带宽已经很好了,百兆光宽带,但是在移动端就不一样了,很多用户还是使用的流量,GPRS.所以,对于首屏时间的加载,压力还是蛮大的: 我们手机在出发一个操作之后,发生了什么? 下面是在返回数据前发生的动作,但是作为前端,我们好像动不了这些东西,不可能叫运营商去帮你定制一套系统: 这个才是我们真正要去做的东西-渲染(webkit) 给你两个优化的方面,优化网路与优化渲染(高