2024年最全时间都去哪了-移动Web首屏优化实践(2),阿里面试官

其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

《前端开发四大模块核心知识笔记》

最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

首先,第一个减少请求数?为什么?

请求多了,并不是说会对后台造成多大的压力,这当然是一方面,从RTT上来说,每一个请求都会消耗一个RTT时间,那么越多的请求消耗的RTT时间就越多;

比如请求一个5K的css和一个200K的图片,除了请求大小不一样之外,深入到协议里面,并不是请求的数据一次性的返回一个包给你,因为为了防止网络拥塞,会有一个窗口来限制你的包的大小;所以建议初试化的包控制在14k以内,只是tcp窗口的大小。

再次,利用缓存;

然后是合理安排请求顺序,哪些请求是必须先加载的,哪些可以稍后加载。那怎么做呢?

1. DNS预解析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.域名收敛

既然DNS解析比较耗时,每个连接都要建立链路,那么我们就可以通过减少ajax到后台的域名地址,通过反向代理去做。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3. 链路复用

因为每一次链接数都要建立3次TCP握手,通过keep-alive,可以保证建立的连接不会被关闭, 下次请求可以直接发送数据,这样可以减少将近200ms的时间,当然会增加一部分Server的内存消耗,要预先扩容;http2.0已经支持了这些特性;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 资源内联

在首屏里,一些资源都是分散开发的,在一些简单的页面中,有些内容可以内联进去,不然像一些css页面要等到html页面解析完成后,再去解析外联的css; 可以通过打包工具在发布的时候就能完成;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.组件化开发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首先一点是按需加载,就是首屏显示的东西,哪些要加载,哪些无需加载,可以区分开来,而且可以异步方式来加载,如上图是一块一块的加载出来,而不是一步全部加载出来;

然后一个是一部渲染,这里举个例子;如下的tab选项卡

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们通常是这么做的,我们可以先加载一些公用的东西,然后通过路由,去加载首屏上可以看到选项卡的资源,哪些有用户交互之后的东西,可以稍后在加载;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是这样会有一个问题,有时候我们的js处理的比较快,但是css文件处理的比较快,这样就会使的页面比较混乱,所以可以通过异步打包工具,将css和js打包在一起

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6. 服务端渲染

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个前后端分离的项目,通过ajax请求数据,这样一个页面的渲染路径会拉的很长,页面先渲染html,然后在渲染js,js才发送ajax请求,等到数据回来再进行渲染,所以不管怎么样都至少要3个RTT请求时间;这种模式,在网络环境比较差的情况下,是很难接受的,

所以我们又回归到PHP时代;通过服务器端渲染,就可以控制用户,哪些东西是要打包的。可以一次性知道用户需要哪些数据;加上现在的NodeJs环境以及React,这就使得一些东西既可以在前端的浏览器进行渲染,也可以在服务器中进行字符串拼接,一起吐出来;

比如在无限长的滚动列表中,对图片进行懒加载,首先不给图片赋值src属性,通过插入dom计算可视区,在可视区内则赋值src,在可视区之外,交给scroll去处理,将要进入可视区时才赋值;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.利用缓存

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资源长缓存:不是通过304去判断缓存,而是通过max-age来做的,通过md5命名文件,然后通过自动化构建工具去实现;

主要聊一下数据层缓存与数据复用;

从客户端的启发;客户端会将上次缓存的数据重新渲染一遍;所以数据缓存的设计可以设计为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以在ajax请求的数据没有回来之前,用一些配置的假数据,先把坑站好,然后等待线上的数据回来后,在把坑填好,这样减少了白屏的时间。这样给用户感觉比较快,但不是真的快,交互性能确实变好了;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在有些时候,并不是所有的数据都是加载进来的,像贴吧和知乎之类的,展示的一些storage里的数据,都是带有省略号的缓存数据,等用户真的点开之后才去加载该帖子的全部数据。每次请求的数据又重新将原来的缓存覆盖;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8.离线包

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其实对于一些并发量比较大,向过年时候的抢红包业务,并发量是几个亿。这样,对于一些经常使用的用户,可以几天前就将离线包推送过去,进行下载,通过二进制比较,进行动态增量更新,而不用每次都下载,这么大的并发量,同时下载,带宽肯定爆,服务器肯定爆。

9.是在优化不了怎么办?

转菊花!!!

JavaScript 和 ES6

在这个过程你会发现,有很多 JS 知识点你并不能更好的理解为什么这么设计,以及这样设计的好处是什么,这就逼着让你去学习这单个知识点的来龙去脉,去哪学?第一,书籍,我知道你不喜欢看,我最近通过刷大厂面试题整理了一份前端核心知识笔记,比较书籍更精简,一句废话都没有,这份笔记也让我通过跳槽从8k涨成20k。

JavaScript部分截图

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

t/cac778dc45492a41e2f3e7cd6b0134e5.png)

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值