【前端性能】前端性能优化方法总结

在这里插入图片描述

关于前端性能指标和测量方法可以看这篇:【前端性能】前端性能指标和测量方法总结

文章目录

  • 前端性能优化
    • 网络方向
      • HTTP缓存
      • 本地储存
      • HTTP升级
      • DNS预解析
      • 使用CDN
    • 渲染方向
      • HTML
      • CSS
      • JS
      • 图片
      • Webpack优化

前端性能优化

可以从网络请求方向和页面渲染方向进行优化:

网络方向

在网络请求方面有使用HTTP缓存、使用本地储存、HTTP请求优化、DNS预解析和使用CDN。

HTTP缓存

HTTP缓存有强缓存和协商缓存,它可以将资源缓存在浏览器端,强缓存是在过期时间内都不需要向服务器发起请求,协商缓存只像服务器端发起询问缓存是否更新的请求,不更新的话也是直接使用浏览器端缓存的资源。
具体字段可见这篇文:HTTP系列之HTTP缓存 —— 强缓存和协商缓存

本地储存

有Cookie、WebStorage(localStorage、sessionStorage)、IndexedDB等方式,可以将一些数据保存在前端,不需要和后端进行交互。

HTTP升级

升级为 HTTP2.0/3.0,请求并发量增大,数据传输速度提升,进而减小 HTTP 请求时间。
HTTP 版本详细内容见这篇文:HTTP系列之HTTP版本 1.0 1.1 2.0 3.0 主要特性对比

DNS预解析

dns-prefetch 尝试在请求资源之前解析域名。这可能是后面要加载的文件,也可能是用户尝试打开的链接目标。

<link rel="dns-prefetch" href="https://fonts.googleapis.com/" />

dns-prefetch 仅对跨源域上的 DNS 查找有效,因此请避免使用它来指向你的站点或域。这是因为,到浏览器看到提示时,你的站点背后的 IP 已经被解析了。

使用CDN

CDN (Content Delivery Network),CDN 服务器通常分布在全球各地,当用户访问网站时,CDN 会将网站的内容缓存到离用户最近的服务器上,从而减少了数据传输的距离和时间,提高了加载速度。

渲染方向

渲染的主要是 HTML、CSS、JS、图片 等静态资源。围绕减少资源个数和体积进行优化。

HTML

  • 压缩精简 HTML。
  • 懒加载:先加载可视区,剩下的延迟加载。
  • 减少重拍重绘:减少DOM操作,对DOM操作统一管理,例如REACT使用的虚拟DOM。

CSS

  • 合并多个 CSS 样式文件,压缩 CSS。
  • 按需加载样式。
  • 位置放在里,尽早进行样式解析,构建 CSSOM 树。
  • 减少重排重绘,例如修改样式不一条条修改,可以设置 class 一次性修改。

JS

  • 合并多个 JS 脚本文件,压缩 JS。
  • 首屏渲染暂不需要且体积大的脚本可进行按需加载(通过 script 动态创建加载)。
  • 位置放 底部,让 JS 不阻塞 HTML 和 CSS 的解析。
  • async defer 模式加载。一般当我们的脚本与 DOM 元素和其它脚本之间的依赖关系不强时,我们会选用 async;当脚本依赖于 DOM 元素时,我们会选用 defer。(合理选择 script 加载模式,可以有效地提升性能) 具体可见这篇: JS 的异步加载方法: async、defer、动态加载
  • 大数据计算,可使用 Web Worker 开启独立于主线程的并行计算

图片

  • 小图标使用 web font 字体代替
  • 小体积图片使用 base64 编码
  • 阴影、简单动画图效可用 CSS3 代替
  • 图片懒加载/预加载

Webpack优化

webpack 相关内容可看这篇:【前端工程化】Webpack介绍

  • 构建结果分析:借助插件 webpack-bundle-analyzer 我们可以直观的看到打包结果中,文件的体积大小、各模块依赖关系、文件是够重复等问题,极大的方便我们在进行项目优化的时候,进行问题诊断。

  • 压缩CSS:optimize-css-assets-webpack-plugin

  • 压缩JS:在生成环境下打包默认会开启 js 压缩,但是当我们手动配置 optimization 选项之后,就不再默认对 js 进行压缩,需要我们手动去配置。

  • 清除无用的CSS:purgecss-webpack-plugin 会单独提取 CSS 并清除用不到的 CSS。

  • Tree-shaking: 剔除没有使用的代码,以降低包的体积。

  • Code Splitting: 将代码按路由维度或者组件分块(chunk), 这样做到按需加载,同时可以充分利用浏览器缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙一次开发,多端部署(六)自适应布局

针对常见的开发场景&#xff0c;方舟开发框架提炼了七种自适应布局能力&#xff0c;这些布局可以独立使用&#xff0c;也可多种布局叠加使用。 下面我们依次介绍这几种自适应布局能力。 拉伸能力 拉伸能力是指容器组件尺寸发生变化时&#xff0c;增加或减小的空间全部分配给容…

鸿蒙一次开发,多端部署(十一)设置应用页面

本小节以“设置”应用页面为例&#xff0c;介绍如何使用自适应布局能力和响应式布局能力适配不同尺寸窗口。 页面设计 为充分利用屏幕尺寸优势&#xff0c;应用常常有在小屏设备上单栏显示&#xff0c;大屏设备上左右分两栏显示的设计&#xff0c;设置应用页面设计如下。 观察…

不要取和所用方法名字相同的类

package 练习; import java.util.*; public class StringBuilder {public static void main(String[] args){Scanner scan new Scanner(System.in);String r scan.nextLine();StringBuilder x new StringBuilder(r);System.out.println(x);}} 奉上错误代码&#xff08;上面&…

qt5-入门-标签页部件QTabWidget-1

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 目录 效果实现Qt Designer操作代码addStretch()解释 效果 首页有三个按钮和最近文件列表。 拖动窗口&#xff0c;按钮和文件列表仍然处…

【C++】1600. 请假时间计算

问题&#xff1a;1600. 请假时间计算 类型&#xff1a;基本运算、整数运算 题目描述&#xff1a; 假设小明的妈妈向公司请了 n 天的假&#xff0c;那么请问小明的妈妈总共请了多少小时的假&#xff0c;多少分钟的假&#xff1f;&#xff08;提示&#xff1a; 1 天有 24 小时&…

关于UDS刷写的一些杂谈

最近在做CAPL编写UDS刷写上位机的工作&#xff0c;后续过来更新现在这里查个眼&#xff0c;以免后面忘记了。 下面放一些可能会用到的知识点&#xff1a; 1.一般的刷写流程如下所示&#xff1a; 红色标记代表为功能寻址。 预编程&#xff1a;10 01&#xff0c;10 83&#xf…

Linux——du, df命令查看磁盘空间使用情况

一、实现原理&#xff1a; df 命令的全称是Disk Free &#xff0c;显而易见它是统计磁盘中空闲的空间&#xff0c;也即空闲的磁盘块数。它是通过文件系统磁盘块分配图进行计算出的。 du 命令的全称是 Disk Used &#xff0c;统计磁盘有已经使用的空间。它是直接统计各文件各目…

HarmonyOS4.0—自定义渐变导航栏开发教程

前言 今天要分享的是一个自定义渐变导航栏&#xff0c;本项目基于鸿蒙4.0。 先看效果&#xff1a; 这种导航栏在开发中也比较常见&#xff0c;特点是导航栏背景色从透明到不透明的渐变&#xff0c;以及导航栏标题和按钮颜色的变化。 系统的导航栏无法满足要求&#xff0c;我们…

8868体育助力西甲赫罗纳 争冠黑马惨遭掀翻

西甲的赫罗纳足球俱乐部是8868体育助力的球队之一&#xff0c;西甲排名第12的赫塔费队迎来了西甲第29轮的较量&#xff0c;赫塔费队此役坐镇自己的主场PK赛前排名第2的争冠超级黑马赫罗纳队。 赛前赫塔费队已经连续4轮联赛不胜&#xff08;2平2负状态低迷&#xff09;&#xff…

力扣 字符串解码

维护一个放数字的栈&#xff0c;一个放字母的栈 遇到[把数字和字母入栈&#xff0c;遇到]把当前字母循环加上数字栈头遍的字母栈头 class Solution { public:string decodeString(string s) {string ans"";stack<int>sz;stack<string>zm;里面是string …

一文讲清!进销存管理系统如何实现锁库及库存冻结?计算月加权平均成本?

进销存管理系统中的锁库及库存冻结如何实现&#xff1f;进销存管理系统如何计算月加权平均成本&#xff1f;进销存管理系统又该如何统计和预测采购需求&#xff1f;这些进销存管理难题困扰着许多企业管理者。本文将结合数年从业经验&#xff0c;深入探讨这些进销存管理难题&…

面试算法-83-不同路径 II

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

saas架构使用实现

saas架构使用实现 saas是什么 多租户架构——是指在同一个系统中&#xff0c;为不同的客户提供不同的部署环境&#xff0c;各个客户之间的数据和操作是相互独立的。这种架构可以大幅降低系统的开发和运维成本&#xff0c;同时也能提高系统的可扩展性和灵活性。每个用户有自己特…

苹果电脑不能删除移动硬盘文件 苹果电脑移动硬盘只读模式如何更改 移动硬盘文件或目录损坏且无法读取怎么办

当我们将移动硬盘插入苹果电脑后&#xff0c;发现无法对移动硬盘中的文件进行编辑该怎么办&#xff1f;相信有不少网友遇到过这类情况。苹果电脑不能删除移动硬盘文件&#xff0c;或无法拷贝硬盘里的文件。今天我为大家解决苹果电脑移动硬盘只读模式如何更改的问题&#xff0c;…

superset 二开增加 flink 数据源连接通过flink sql 查询数据

前言 superset 目前还不支持 flink 的数据源连接&#xff0c;目前我们公司在探索使用数据湖那一套东西&#xff1a; 使用 flink 作为计算引擎使用 paimon oss对象存储对接 flink 作为底层存储使用 superset 通过 flink gateway 查询 paimon 数据形成报表 增加flink数据源 …

git push出错: src refspec dev/xxx does not match any

使用如下命令gitp push出错: git push origin 远端分支名 git push origin dev/xxxx error: src refspec dev/xxxx does not match any error: failed to push some refs to https://git.woa.com/..... 解决方案 1: git push origin 本地分支名:远端分支名 解决方案2&#…

docker进阶篇,docker集群介绍

docker swarm 官网&#xff1a;https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/ 什么是 docker swarm docker swarm 是 docker 官方提供的容器编排和集群管理工具。它允许用户将多个 docker 主机组成一个虚拟的 docker 集群&#xff0c;以便更高效地管理…

互联网环境下工厂生产企业的数字化转型路径研究

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着互联网技术的飞速发展&#xff0c;数字化已经成为企业提升竞争力的重要手段。对于工…

四信雨水情监测系统,助力构建“三道防线”精准防洪

近年来&#xff0c;我国突破历史记录、颠覆传统认知的水旱灾害频繁发生&#xff0c;依靠传统监测预报手段已难以满足当前洪水防御工作的需求。为贯彻“两个坚持、三个转变”的防灾减灾救灾理念&#xff0c;保障人民群众生命财产安全赢得时机&#xff0c;就必须进一步强化应对洪…

Cadence OrCAD使用小技巧

Cadence是公司名&#xff0c;Allegro&#xff08;俗称阿狸狗&#xff09;是该公司旗下的EDA工具品牌&#xff0c;OrCAD是该公司收购公司的EDA工具品牌。 OrCAD这个产品线是Cadence收购来的&#xff0c;Allegro才是嫡系。 注意&#xff1a;dsn不能放在中文路径下。 开机选captur…