Web性能优化_网页性能优化_前端网页优化
2024-11-21 12:45:12
简单描述了前端的优化重要性,以及几个优化方向,持续更新
2744
为什么很重要?
- 慢速网站让人感觉非常不舒服,等待缓慢网站加载的压力和看恐怖电影的压力是相差不大的
- 速度影响销量,三个例子
- —2016 年,全球速卖通将其网站速度提高了三分之一,订单量增加了 10.5%
- —早在 2006 年,Google 将搜索速度降低半秒,结果发现用户发出的请求减少了 25%
- — 2008 年,Aberdeen小组发现,将网站速度降低一秒会使用户满意度降低 16%
https://www.pwastats.com/ https://wpostats.com/ 参考资料
如何优化速度?
文件体积
Javascript
- 优化javascript大小,减少页面中的冗余代码,提高代码的重复利用率
- 压缩javascript体积 webpack:生产模式 babel:babel-preset-minify gulp:gulp-uglify
- 延迟加载javascript
- 按需加载javascript
- 在项目中如果使用框架或者类库,需求允许的情况下,尽量使用轻量级的
Css
- 压缩css体积,减少页面中的冗余代码,提高代码的重复利用率
- css分为关键与非关键css,将关键css内联到html中,非关键的css用rel=”preload”来预加载
- 在项目中如果使用框架或者类库,需求允许的情况下,尽量使用轻量级的
有关http传输
缩小传输数据
- 使用gzip(除开图片,字体,视频),有兼容性比较差的Brotli
- 使用CDN
- 把CSS合并成为一个,把JS也合并成为一个,减少CSS以及JS等文件的请求次数(真实项目中,我们使用gulp、webpack这些自动化工具,可以完成合并压缩)
- 使用预加载
- — 指示浏览器提前对服务器的 IP 地址发出 DNS 请求。这对于 CDN、Google 字体和所有其他情况非常有用,因为您知道在短时间内需要资源,知道它托管在哪个域,但不知道其确切路径。在这种情况下,提前解析服务器的IP地址将为您节省50到300毫秒。<link rel="dns-prefetch">
- — 指示浏览器提前执行与服务器的连接。在相同情况下,当有用时,它很有用,但可以设置完整连接并节省更多时间。这里的缺点是打开新连接非常耗费资源,因此您不希望过度使用此优化。<link rel="preconnect">dns-prefetch
- — 以低优先级在后台预加载和缓存资源。这很有用,例如,为应用程序的下一页预加载JS捆绑包。<link rel="prefetch">
- — 在后台以高优先级预加载资源。这对于在几秒钟内预加载所需的资源非常有用 - 例如,非关键CSS文件。<link rel="preload">
- — 在后台预加载指定的页面,并将其呈现在不可见的选项卡中。稍后,当访问者单击指向预呈现页面的链接时,该页面会立即显示。这是Google用来预加载其第一个搜索结果的内容。<link rel="prerender">
注意:不要过度使用预取方法。在后台下载内容仍然会消耗访问者的流量 - 这在移动设备上真的很糟糕。因此,添加10个额外的预加载可能会使您的应用程序更快一些,但是您的访问者将为此支付真钱。每页2-4次预加载可能没问题。
图像优化
图像简介
- Svg适用于矢量图
- Gif是动态图片,如果要使用,请使用视频
- Jpg适用于有轻微质量损失的图片
- Png适用于有透明背景的图片
- Webp适合照片但是兼容性不好,可以使用picture来提高兼容性
<picture> <source srcset= " img.webp" type="image/webp"> <img src="img .jpg"type="image/ jpeg"> </picture>
如何优化
- Svg图片如何优化: 删除注释和空格来缩小他们 优化工具
- Jpg:压缩图片,不要直接加载大图片,如果需要1倍图 2倍图 请直接提供,不要将大图在代码里写成小尺寸,因为这样浏览器还是加载大图,并且要好费时间更为小图片
- Png:雪碧图,就是把图片压缩合并在一张大图上,背景图片统一导入大图,使用background-position定位到具体的小图
- 对于图片等资源的交互传输,我们尽量把图片等富媒体资源转换为二进制编码,使用二进制文件流的形式传输,不仅加快了文件传输的速度,也节省了传输的大小
字体优化
如果要加载自定义字体
- font-display:auto 下载完成前不显示
- Fallback 下载完成后闪烁
- Optional 下载完成后除非刷新页面,否则就不显示
数据请求优化
- 为了加快页面首次打开速度,我们把图片和数据都做一下延迟加载,数据的延迟加载(异步加载):滚动到底部加载更多数据、分页效果
- 音视频等资源文件,开始的时候设置 preload='none',也就是开始加载页面的时候不加载资源文件,只有当播放的时候再加载
- 减少每一次AJAX请求数据量的大小,对于大数据处理,我们尽量分多次请求
代码优化
- 一定要养成手动释放堆栈内存的习惯,经常去清空一些没有用的内存(例如:手动清除没用的定时器、把一些无用的对象赋值为null...)
- 避免内存互相引用嵌套导致的内存泄漏问题(高程三后面有关于内存泄漏的讲解)
- 前后端的数据交互,数据格式最好是JSON格式的:结构清晰明了,处理起来方便,传输性能也比较的不错...
- 为了保证安全,一些重要的数据信息在进行交互的时候要进行加密,而且传输方式尽量使用POST方式,GET请求不安全
- 不要使用with,少使用eval,少使用document.write以及alert等(页面中的提示框,我们可以自己编写一个组件来完成)
- 注意DOM的回流重载问题,
- 少使用同步编程,多用异步编程,注意页面中不要出现死循环
- 减少浏览器的异常信息抛出,最好使用TRY CATCH把它捕获了
- 少使用全局变量,依托单例、发布订阅、promise等设计模式,来规划我们的代码结构,保证代码的严谨和有利于维护
- 事件绑定尽量使用事件委托来处理
- 减少作用域链的查找(作用域之间不要嵌套太深)
- 优化代码逻辑,用最简单的方式来实现一个功能需求,一些没必要的判断或者没必要执行的代码都让其不执行即可
SEO优化推广
- 设置合理的 title、keywords、description等信息
- 标签语义化
- 增加页面中关键词的曝光率,把一些重要的关键词多放在权重较高的标签中(例如:H1中有图片和文字,文字是给爬虫看的,图片是给用户看的...)
- img设置alt属性,属性值是对图片描述的关键词,让爬虫收录图片信息
- 页面中千万不要出现死链接和空链接
- 避免页面301和302重定向,重定向不太利于网站权重和排名的上升
- 动态页面静态化(伪URL重写)
- 页面中尽量不要使用iframe,不仅不利于SEO优化,而且性能也会受到影响
更多SEO前端优化详细可查看https://www.lihuanting.com/blog/a/60
资料引用https://3perf.com/talks/web-perf-101/ https://www.jianshu.com/p/6d66aba6565c