当前位置: 首页 > article >正文

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-怎么让顶部轮播图渲染的更快?

一、为什么强调轮播图&#xff1f; 很多时候我们强调用户体验&#xff0c;而这里更多时候我们更强调完美的首屏体验&#xff0c;而现在几乎每个网站顶部第一个大模块就是轮播图。轮播图占得区域最大&#xff0c;图片质量也更高&#xff0c;几乎一张图片的面积&#xff0c;体积就…...

Python脚本,物联网云服务器端口监控

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

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介绍 &#xff08;参照邓富国的博士论文&#xff09; 1、什么是量子密钥分配&#xff08;QKD&#xff09; 通信双方以量子态为信息载体&#xff0c;利用量子力学原理&#xff0c;通过量子信道传送&#xff0c;在彼此之间建立共享密钥的方法。 2、B92协议简介&#x…...

TiFlash 数据校验

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

JavaWeb实战002-servlet原理

request 和 response 过程 request browser 使用 request 请求 tomcat&#xff0c;tomcat 根据 servlet 请求 webapp response webapp 返回给 tomcat&#xff0c;tomcat 再 response 给 browser 简单模拟 servlet 以下所有文件都在同一个目录下&#xff0c;目录结构&#xff…...

基于深度学习的命名实体识别研究综述——论文研读

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

2022下半年数学建模竞赛汇总(比赛时间、出成绩时间)

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

为什么python证券接口通达信系统中没有接口?

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

基于JAVA校园自助式按量点餐系统服务端计算机毕业设计源码+系统+数据库+lw文档+部署

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

吉林省互联网医院资质申请条件|牌照申请

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

解决linux如何安装BBRplus,以及安装BBRplus版加速失败的问题

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

【目标检测】---- 正负样本匹配策略

1 综述 无论是anchor box 还是anchor free&#xff0c;在训练计算类别/前背景损失时都需用到正负样本匹配&#xff0c;目前分为两大类&#xff1a; 第一类 fixed label assignment&#xff0c;常用的主要有MaxIou、ATSS、focos 第二类 dyanmic label assignment&#xff0c;常…...

类初始化过程与对象创建过程

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

cdr怎么保存低版本 cdr保存低版本闪退

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

数据库,容器化如虎添翼

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

【CE】Mac下的CE教程Tutorial:基础篇(第5关:代码查找器)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第五关&#xff1a;代码查找器翻译操作步骤&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第五关&#xff1a;代码查…...

MySQL数据库——数据库是什么?关系型数据库和非关系型数据库又是什么?

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

Spring Cloud Stream 学习笔记

Spring Cloud Stream 官方文档&#xff1a; https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/ 中文手册&#xff1a; https://m.wang1314.com/doc/webapp/topic/20971999.html 是什么&#xff1f; 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的方式。它…...