web前端面试题附答案016-怎么让顶部轮播图渲染的更快?
一、为什么强调轮播图?
很多时候我们强调用户体验,而这里更多时候我们更强调完美的首屏体验,而现在几乎每个网站顶部第一个大模块就是轮播图。轮播图占得区域最大,图片质量也更高,几乎一张图片的面积,体积就快要大于首屏其他模块之和了,更别提轮播图还有N张图片需要渲染,所以首屏优化中,顶部轮播图(也叫首焦图,banner图)成为了重中之重。
二、都有哪些手段呢?
1、压缩图片
把图片压缩再压缩,在保证清晰的前提下,先让UI用专业工具压缩,然后我们再转webp格式,或者尽量能够下发对应尺寸的图片,以保证图片更小
2、SSR手段
SSR跟vue react没关系,最早的jsp那也是SSR手段。在服务端HTML落地页还没有被浏览器下载下来的时候,请求banner图接口,然后将所有图片在服务端那一步的时候就开始组装,不管是jq vue react,就已经组装好了这个模块。
这么做的好处是无需再等HTML落地下下载完成,等待js css的下载,浏览器再解压,解析,执行,组件组装,图片请求,浏览器渲染图片这一系列的操作步骤,一旦HTML落地页下载下来以后,图片将直接开始请求,下载,被浏览器渲染,省去了前置js那些浏览器行为
3、前置页面预加载
如果我们要去的那个页面(二级页面)是有比较大的轮播图的,那么如果在一级页面的时候就比较肯定二级页面的一些参数,或者说二级页面的轮播图就是比较固定的。那么可以在一级页面提前预加载.。预加载的好处就是不占用当前网页主线程,可以使用户无感知的进行秘密加载到浏览器的缓存中。
<script>var preImage = new Image();preImage.src = 'aa.png';
</script>
4、当前页面前置预加载
<!DOCTYPE html>
<html><head><title>title1</title></head><body><div id="app"></div><!-- 在这里做前置预加载 --><script src="app.js"></script></body>
</html>
从上图可以看到,在浏览器对js css做了一系列操作之后,才有机会开始下载图片,从哪里下载呢,从图片服务器,所以变得滞后了,也就会很慢。而上一篇文章web前端面试题附答案009-不改业务逻辑代码不改打包方式,怎么让js加载的更快?说了怎么让js加载的更快,所以这里可以专心的说怎么预加载图片,让图片渲染得更快了。
<!DOCTYPE html>
<html><head><title>title1</title></head><body><div id="app"></div><!-- 在这里做前置预加载 --><script>fetch(url, data).then((res) => {let imgData = res.list[0]['img'];let preImage = new Image();preImage.src = imgData;})</script><script src="app.js"></script></body>
</html>
想想是不是这个逻辑,前置的一段代码所执行的时间微乎其微,然后就开始下载图片,下载的过程是一个异步的事情,所以不会影响下面主js的下载,解析和执行,而利用浏览器对js的一系列操作间隔期,很可能图片已经下载完成,被浏览器缓存了。而前端组件组装完成后,所要渲染的图片已经在浏览器缓存中了,即可快速渲染。
三、为什么只预加载第一张图片?
1、因为轮播投的轮动播放一般都会是3S甚至更长,所以我们有更多的时间在这3S时间内,让其他轮播图进行下载
2、因为预加载也是一段前置代码,他始终还是会影响到下面主js的一系列时间,他虽然执行的时间是微乎其微的,但如果要预加载所有的轮播图,这所有的轮播图是个数组,数量一旦多了,就会遍历再预加载,而遍历操作会使前置预加载代码时间变长。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/58364.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!相关文章:

web前端面试题附答案016-怎么让顶部轮播图渲染的更快?
一、为什么强调轮播图? 很多时候我们强调用户体验,而这里更多时候我们更强调完美的首屏体验,而现在几乎每个网站顶部第一个大模块就是轮播图。轮播图占得区域最大,图片质量也更高,几乎一张图片的面积,体积就…...

Python脚本,物联网云服务器端口监控
事实上,物联网的思路很简单,客户端设备通过TCP协议上传到某个云服务器的端口,我们需要在这个云服务器上编写一个小小的脚本去创建某个端口,持续监听,可以互相发送数据,这个脚本语言可以是JAVA,也…...

Python之wxPython框架的使用
Python之wxPython框架的使用一、安装wxPython二、创建一个 wx.App 的子类三、直接使用wx.App四、使用wx.Frame 框架五、常用控件1.Static Text 文本类2.TextCtrl 输入文本类3.Button 按钮类一、安装wxPython wxPython是个成熟而且特性丰富的跨平台GUI工具包。由Robin Dunn 和Ha…...

量子密钥分发B92协议——笔记
一、B92介绍 (参照邓富国的博士论文) 1、什么是量子密钥分配(QKD) 通信双方以量子态为信息载体,利用量子力学原理,通过量子信道传送,在彼此之间建立共享密钥的方法。 2、B92协议简介&#x…...

TiFlash 数据校验
本文档介绍 TiFlash 的数据校验机制以及相关的工具。 使用场景 数据损坏通常意味着严重的硬件故障。在这种情形下,即使尝试自主修复,也会使得数据的可靠性下降。TiFlash 默认对数据文件进行基础的校验,使用固定的 City128 算法。一旦发现数…...

JavaWeb实战002-servlet原理
request 和 response 过程 request browser 使用 request 请求 tomcat,tomcat 根据 servlet 请求 webapp response webapp 返回给 tomcat,tomcat 再 response 给 browser 简单模拟 servlet 以下所有文件都在同一个目录下,目录结构ÿ…...

基于深度学习的命名实体识别研究综述——论文研读
基于深度学习的命名实体识别研究综述摘要:0引言1基于深度学习的命名实体识别方法1.1基于卷积神经网络的命名实体识别方法1.2基于循环神经网络的命名实体识别方法1.3基于Transformer的命名实体识别方法1.4其他的命名实体识别方法1.5基于深度学习的命名实体识别方法对…...

2022下半年数学建模竞赛汇总(比赛时间、出成绩时间)
1、2022年天府杯全国大学生数学建模国际赛 竞赛开始时间:2022年10月20日18:00 预计出成绩时间:2022年11月5日 是否可跨校:是 2、2022年中国高校大数据挑战赛 竞赛开始时间:2022年10月27日8:00 预计出…...

为什么python证券接口通达信系统中没有接口?
Python证券接口通达信是一种动态类型语言,拥有ducking type的特征,因此是天生支持接口。python有个自动保存到etcd的库,可以网上搜下看下这个库的使用以及它开发的api接口,不过之前go使用etcd的时候,是调用etcd本身的r…...

基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码系统数据库lw文档部署 基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码系统数据库lw文档部署本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:id…...

吉林省互联网医院资质申请条件|牌照申请
吉林省互联网医院资质申请条件|牌照申请|长春市|四平市|辽源市|通化市|白山市|松原市|白城市|延边朝鲜族自治州 吉林省互联网医院资质申请条件 一、《医疗机构管理条例》第十六条申请医疗机构执业登记,应具备下列条件: 1.有设置医疗机构批准书&a…...

解决linux如何安装BBRplus,以及安装BBRplus版加速失败的问题
解决linux安装BBRplus版加速失败的问题安装BBRplus的支持环境解决的问题安装BBRplus解决方法总结安装BBRplus的支持环境 Centos 7, Debian 8/9, Ubuntu 16/18 测试通过, 不支持 OVZ。 本文的操作环境是Ubuntu 20.04。 如果不知道自己的系统,使用命令 lsb_release…...

【目标检测】---- 正负样本匹配策略
1 综述 无论是anchor box 还是anchor free,在训练计算类别/前背景损失时都需用到正负样本匹配,目前分为两大类: 第一类 fixed label assignment,常用的主要有MaxIou、ATSS、focos 第二类 dyanmic label assignment,常…...

类初始化过程与对象创建过程
如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:耶瞳空间 面试经常遇见,所以记录一下。 类初始化过程 Java类的初始化过程可以分为以下几个步骤: 加载:当Java程序要使用某个类时,系统会先检查该类…...

cdr怎么保存低版本 cdr保存低版本闪退
cdr是一款拥有着强大用户群体的矢量图编辑软件,它从面世至今经历了多个版本的迭代,不同版本各具特色,有时候我们需要将cdr保存为低版本,但在操作时可能会遇到一些问题,比如闪退等等,下面我们一起来了解一下…...

数据库,容器化如虎添翼
最近看到一篇推文,痛述MySQL不能上容器的各种理由,基本是N年前的陈词滥调,东拼西凑出的一篇水帖,文末对于数据库是否能上容器,也是模糊不清,没有确切的观点,标题倒是吸引眼球,不明就…...

【CE】Mac下的CE教程Tutorial:基础篇(第5关:代码查找器)
▒ 目录 ▒🛫 导读开发环境1️⃣ 第五关:代码查找器翻译操作步骤🛬 文章小结📖 参考资料🛫 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第五关:代码查…...

MySQL数据库——数据库是什么?关系型数据库和非关系型数据库又是什么?
在学习数据库之前,应该先理解什么是数据。下面介绍一下数据以及数据库的概念,再对关系型数据库和非关系型数据库的优缺点进行分析。 描述事物的符号称为数据。数据有多种表现形式,可以是数字,也可以是文字、图形、图像、声音、语…...

Spring Cloud Stream 学习笔记
Spring Cloud Stream 官方文档: https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/ 中文手册: https://m.wang1314.com/doc/webapp/topic/20971999.html 是什么? Spring Cloud Stream is a framework for buildi…...

langchain学习4
langchain学习4 原文地址: Chatbot Memory with Langchain | Pinecone An introduction to different conversational memory types for building chatbots and other intelligent …… Conversational memory 是聊天机器人能够以a chat-like manner 回应多个queries的方式。它…...