浅谈web前端性能优化

本文涉及的产品
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 浅谈web前端性能优化

浅谈web前端性能优化


代码层面:

防抖和节流(resize,scroll,input)。

减少回流(重排)和重绘。

事件委托。

css 放 ,js 脚本放 最底部。

  • 由于用户浏览网页是先看再进行操作,所以先把css加载出来有利于客户的使用体验。

延迟JavaScript

defer属性告诉浏览器在 HTML 解析器解析完文档之后运行脚本,但在事件发生之前,DOMContentLoaded会被触发。

减少 DOM 操作。

按需加载

比如 React 中使用 React.lazyReact.Suspense ,通常需要与 webpack 中的 splitChunks 配合。

懒加载

  • 又由于客户会先浏览第一屏,所以可以先不加载第二屏和后面的。

预加载

  • 在做读书或者用户很可能点击之后的页面时,可以做预加载。
  • 顾名思义,就是在用户点击下一页之前,就预先请求下一页。
  • 这样用户可以很快看到之后的内容。
  • 但这样同时会浪费带宽。有利有弊

构建方面:

压缩代码文件

在 webpack 中使用 terser-webpack-plugin 压缩 Javascript 代码;使用 css-minimizer-webpack-plugin 压缩 CSS 代码;使用 html-webpack-plugin 压缩 html 代码。

服务器端使用gzip压缩

  • g-zip压缩算法,把下载过来的数据先进行压缩
  • 后台开启gzip,用户下载压缩包,浏览器自动解压
  • 文本文件的压缩率可达80%以上,因此HTML、CSS、JavaScript文件启用GZip压缩可达到较好的效果。但是压缩对服务器和浏览器产生一定的压力,在通信带宽良好,而服务器资源不足的情况下要权衡考虑。

开启 gzip 压缩,webpack 中使用 compression-webpack-plugin ,node 作为服务器也要开启,使用 compression

常用的第三方库使用 CDN 服务

在 webpack 中我们要配置 externals,将比如 React, Vue 这种包不打倒最终生成的文件中。而是采用 CDN 服务。

其它:

  • 使用 http2。因为解析速度快,头部压缩,多路复用,服务器推送静态资源。
  • 使用服务端渲染。
  • 图片压缩。
  • 使用 http 缓存,比如服务端的响应中添加 Cache-Control / Expires

DNS服务优化

  • 当我们输入url访问一个网页后,第一步会进行DNS查询,通过DNS得到IP地址。
  • 想让DNS查询更快,可以花钱购买一些更快的DNS服务,但没有必要。
  • 一般是配置hosts,自己把ip配置好。DNS就会读取系统hosts文件,查找其中是否有对应的ip。

http 连接复用

  • 当查询完了ip后,会给ip发送一个请求
  • 这个请求是http请求,本质是tcp连接
  • 一般需要请求html,css和js,这三个都需要tcp,所以可以用同一个tcp,这就是连接复用。
  • Keep-Alive 实现,让第一次发送请求建立的TCP连接不要中断,这样第二次发送请求时可以复用这个连接

SQL优化

  • 查询是用sql语句查询数据库,可以通过优化sql查询来减少时间。(打开开发者工具看waiting时间可以判断是前端慢还是后端慢)

提高server带宽

  • 拿到数据后会返回数据,下载时间=下载量/下载速度,提高服务器带宽就能加快下载速度(需要花钱购买)

优化CSS

  • CSS 是阻塞渲染的,这意味着浏览器必须先下载并处理所有CSS文件,然后才能绘制像素。 通过内联关键的 CSS,可以大大加快此过程。
  • 由于有时候CSS会写在JS中,所以这种方法并不可靠。

浏览器端使用缓存

  • CSS、JavaScript、Logo、图标这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。(html不缓存)
  • 缓存是一种快速提高站点速度的方法。它减少了访问者的页面加载时间。我们可以告诉浏览器在特定的时间缓存文件。

我们可以使用以下 API 进行缓存:

  • Cache-Control
  • ETag
  • Last-Modified

此外还有弱缓存:把md5发给服务器,如果md5一致,就返回304,表示不需要下载,此时没有下载量。

减少Cookie传输

  • Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输,因此哪些数据需要写入Cookie需要慎重考虑,尽量减少Cookie中传输的数据量

使用域名加速

  • 用户请求页面时,需要请求多个文件,html、css、js等。
  • 假如有1个html,10个css,20个js,那么就需要发送31个请求,如果31个一起发,可以节约时间。
  • 但是这样会消耗大量带宽,所以浏览器规定了每个域名同时最多只能10个。
  • 这样时间会加长,所以通过加域名的方式。
  • a域名专门请求html,b域名请求css,c域名请求js,这样就只需两次请求的时间, 加域名我们一般加的是 cdn域名。
  • 加了域名后dns时间也会增加,所以要进行权衡。
  • cookie-free:增加域名的第二个好多处,cookie只跟着主域名,css、js都无cookie,减少了上传量。
相关文章
|
8天前
|
前端开发 JavaScript UED
深入了解前端性能优化:提高用户体验的关键
【10月更文挑战第9天】深入了解前端性能优化:提高用户体验的关键
27 5
|
11天前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
42 5
|
12天前
|
前端开发 JavaScript 测试技术
前端工程化:构建高效、可维护的现代Web应用
【10月更文挑战第5天】前端工程化:构建高效、可维护的现代Web应用
|
12天前
|
前端开发 测试技术 持续交付
前端工程化:构建高效、可维护的现代Web应用
【10月更文挑战第5天】前端工程化:构建高效、可维护的现代Web应用
|
2天前
|
人工智能 前端开发
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
2024 川渝 Web 前端开发技术交流会「互联」:等你来报名!
|
8天前
|
缓存 前端开发 JavaScript
前端性能优化策略
【10月更文挑战第9天】前端性能优化策略
17 6
|
5天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
4天前
|
存储 前端开发 JavaScript
从 Web 2.0 到 Web 3.0:前端开发的历史与未来
【10月更文挑战第4天】本文探讨了从 Web 2.0 到 Web 3.0 的前端开发演变过程。Web 2.0 时代,前端开发者从静态网页设计走向复杂交互,技术框架如 jQuery、React 和 Vue 带来了巨大的变革。而 Web 3.0 以区块链技术为核心,带来了去中心化的互联网体验,前端开发者面临与区块链交互、去中心化身份验证、分布式存储等新挑战。文章总结了 Web 2.0 和 Web 3.0 的核心区别,并为开发者提供了如何应对新技术的建议,帮助他们在新时代中掌握技能、设计更安全的用户体验。
21 0
从 Web 2.0 到 Web 3.0:前端开发的历史与未来
|
6天前
|
前端开发 JavaScript 开发者
web前端需要学什么
web前端需要学什么
|
8天前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
11 2