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

一个工作三年的前端是如何做性能优化的

你是怎么做性能优化的?关于这一个问题,也是我们前端开发程序员经常会讨论到的问题,接下来这篇文章将总结一下前端方面的性能优化及方式。
在这里插入图片描述

为什么要做性能优化

性能优化是为了提高网页的加载速度和相应速度,给用户带来更好的体验和用户满意度,同时还能减少服务器的负载压力,以此来提升程序的稳定性,具体有以下几个因素:

  • 提高用户体验
  • 增加页面访问量
  • 提高搜索引擎排名
  • 减少服务器压力
  • 节约成本
  • 提高用户留存率

性能优化方式有那些

HTML&CSS

  • 减少DOM数量,减轻浏览器渲染计算负担。
  • 使用异步和延迟加载js文件,避免js文件阻塞页面渲染c
  • 压缩HTML、CSS代码体积,删除不要的代码,合并CSS文件,减少HTTP请求次数和请求大小。
  • 减少CSS选择器的复杂程度,复杂度与阿高浏览器解析时间越长。
  • 避免使用CSS表达式在javascript代码中
  • 使用css渲染合成层如transform、opacity、will-change等,提高页面相应速度减少卡顿现象。
  • 动画使用CSS3过渡,减少动画复杂度,还可以使用硬件加速。

JS

  • 减少DOM操作数量
  • 避免使用with语句、eval函数,避免引擎难以优化。
  • 尽量使用原生方法,执行效率高。
  • 将js文件放到文件页面底部,避免阻塞页面渲染
  • 使用事件委托,减少事件绑定次数。
  • 合理使用缓存,避免重复请求数据。

Vue

  • 合理使用watch和computed,数据变化就会执行,避免使用太多,减少不必要的开销
  • 合理使用组件,提高代码可维护性的同时也会降低代码组件的耦合性
  • 使用路由懒加载,在需要的时候才会进行加载,避免一次性加载太多路由,导致页面阻塞
  • 使用Vuex缓存数据
  • 合理使用mixins,抽离公共代码封装成模块,避免重复代码。
  • 合理使用v-if 、v-show
  • v-for 不要和v-if一起使用,v-for的优先级会比v-if高
  • v-for中不要用index做key,要保证key的唯一性
  • 使用异步组件,避免一次性加载太多组件
  • 避免使用v-html,存在安全访问风险和性能问题,可以使用v-text
  • 使用keep-alive缓存组件,避免组件重复加载

Webpack优化

  • 代码切割,使用code splitting将代码进行分割,避免将所有代码打包到一个文件,减少响应体积。
  • 按需加载代码,在使用使用的时候加载代码。
  • 压缩代码体积,可以减小代码体积
  • 优化静态资源,使用字体图标、雪碧图、webp格式的图片、svg图标等
  • 使用Tree Shaking 删除未被引用的代码
  • 开启gzip压缩
  • 静态资源使用CDN加载,减少服务器压力

网络优化

  • 使用HTTP/2
  • 减少、合并HTTP请求,通过合并CSS、JS文件、精灵图等方式减少请求数量。
  • 压缩文件, 开启nginx,Gzip对静态资源压缩
  • 使用HTTP缓存,如强缓存、协商缓存
  • 使用CDN,将网站资源分布到各地服务器上,减少访问延迟
  • 域名分片,多域名(地理位置的请求距离)
  • 通过设置http头中的cache-control和expires的属性,可设定浏览器缓存,缓存时间可以是数天,甚至是几个月。

常见性能优化有哪些关键指标?

  • 首屏加载时间First Contentful Paint(FCP):首次内容绘制时间,指浏览器首次绘制页面中至少一个文本、图像、非白色背景色的canvas/svg元素等的时间,代表页面首屏加载的时间点。
  • 首次绘制时间First Paint(FP):首次绘制时间,指浏览器首次在屏幕上渲染像素的时间,代表页面开始渲染的时间点。
  • 最大内容绘制时间Largest Contentful Paint(LCP):最大内容绘制时间,指页面上最大的可见元素(文本、图像、视频等)绘制完成的时间,代表用户视觉上感知到页面加载完成的时间点。
  • 用户可交互时间Time to Interactive(TTI):可交互时间,指页面加载完成并且用户能够与页面进行交互的时间,代表用户可以开始操作页面的时间点。
  • 页面总阻塞时间Total Blocking Time (TBT):页面上出现阻塞的时间,指在页面变得完全交互之前,用户与页面上的元素交互时出现阻塞的时间。TBT应该尽可能小,通常应该在300毫秒以内。
  • 搜索引擎优化Search Engine Optimization (SEO):网站在搜索引擎中的排名和可见性。评分范围从0到100,100分表示网站符合所有SEO最佳实践。

相关文章:

一个工作三年的前端是如何做性能优化的

你是怎么做性能优化的?关于这一个问题,也是我们前端开发程序员经常会讨论到的问题,接下来这篇文章将总结一下前端方面的性能优化及方式。 为什么要做性能优化 性能优化是为了提高网页的加载速度和相应速度,给用户带来更好的体验…...

如何确定自己的armbian系统是不是ARM64架构

使用 arch 命令: arch 命令会返回当前系统的架构信息。 arch系统是ARM64架构,返回 aarch64。系统是ARM32架构,它会返回 armv7l 或类似的值。 使用 uname 命令: 确认系统架构的方法是使用 uname 命令 uname -a这会显示系统的详…...

leetcode_1155 掷骰子等于目标和的方法数

1. 题意 n个k面的骰子,投掷出骰子的点数之和为target的所有可能。 掷骰子等于目标和的方法数 2. 题解 动态规划,实际上相当于一个0-1背包。 令 d p [ i ] [ j ] dp[i][j] dp[i][j]为前 i i i个骰子和为j的方案数 则 d p [ i ] [ j ] ∑ t 1 k d p…...

2023年中国精准放疗未来展望分析:将朝着精准化、数字化和智能化发展[图]

肿瘤放射治疗是利用放射线治疗肿瘤的一种局部治疗方法。放射线包括放射性同位素产生的α、β、γ射线和各类x射线治疗机或加速器产生的x射线、电子线、质子束及其他粒子束等。放射治疗在肿瘤治疗中的作用和地位日益突出,已成为治疗恶性肿瘤的主要手段之一。 现代放…...

大数据之LibrA数据库常见术语(二)

Cgroups Control Groups,控制组(FusionInsight LibrA中也称之为优先级组)。SUSE Linux和RedHat内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制。 CLI Command-line Interface,命令行界面。应用程序和用户交互…...

华为面试题

一、实习 1、健康险核心 batch 自动查询和一键重启 2、后端如何实现免密登录 Spring Boot与Spring Security: 如果你使用的是Spring框架,Spring Security可以为你提供大量的安全功能。创建一个基于Spring Boot的新项目,并添加Spring Securi…...

进阶JAVA篇-深入了解 List 系列集合

目录 1.0 List 类的说明 1.1 List 类的常用方法 1.2 List 集合的遍历方式 2.0 ArrayList 集合的底层原理 2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因: 2.2 ArrayList 集合的优缺点 3.0 LinkedList 集合的底层原理 3.1 从 LinkedList 集合的底层原理来了…...

typeof 与 instanceof 区别

typeof 和 instanceof 是 JavaScript 中用于检测数据类型的运算符,它们在使用和功能上有一些区别。 typeof 运算符: typeof 运算符用于检测给定值的数据类型,返回一个表示数据类型的字符串。typeof 可以用于检测基本数据类型(如字符串、数字、布尔值)和函数,也可以用于检…...

python 之计算矩阵乘法

文章目录 总的介绍例子 总的介绍 np.matmul 是NumPy库中的矩阵乘法函数,用于执行矩阵乘法操作。矩阵乘法是线性代数中的一种常见操作,用于将两个矩阵相乘以生成新的矩阵。在神经网络、机器学习和科学计算中,矩阵乘法经常用于变换和组合数据。…...

【Linux】进程优先级|进程并发概念|在vim中批量化注释

文章目录 前言tips——如何在vim中批量化注释进程更深度理解一、什么是进程优先级二、 为什么要有优先级三、Linux怎么设置优先级查看进程优先级的命令PRI and NI用top命令更改已存在进程的nice: 如何根据优先级开展调度呢?五、其他概念并发(…...

高效使用python之xlwt库编辑写入excel表内容

头条号:科雷软件测试 学习目录 了解下电脑中的excel表格文件格式 安装xlwt库 xlwt库写入表格内容 1 导入xlwt库 2 用一个图展示下xlwt常用的函数 3 往表格写入一些内容并保存 4 设置样式 1 先初始化XFStyle 2 设置字体font 3 设置边框 4 设置对齐方式 …...

【前端】Layui小功能收集整理

目录 1、layui 鼠标悬浮提示文字 2、关闭当前窗口并刷新父页面 3、子iframe关闭/传值/刷新父页面 1、layui 鼠标悬浮提示文字 鼠标放在图标上悬浮显示提示信息&#xff0c;效果图如下 <div style"float:left; line-height:40px">道试题 <i class"l…...

Django 地址接口开发

应用 Mixin 混合类进行收货地址接口开发 python ../manage.py startapp address继承了mixins扩展类&#xff0c;进到里面可以稍微看下源码 该方法帮我们实现了获取验证及保存的功能 address/views from rest_framework.generics import GenericAPIView from rest_framewo…...

.net6部署到linux上(CentOS Linux 7)

目录 一、先在linux上配置.net环境 添加 Microsoft 包存储库 安装 SDK 安装运行时 检查 SDK 版本可使用终端查看当前安装的 .NET SDK 版本。 打开终端并运行以下命令。 二、创建.net6 mvc项目 并发布 创建项目 修改默认端口 打包发布到文件夹 运行打包项目查看项目是否…...

docsify搭建个人博客——简单公共知识库

整站建设流程&#xff1a;安装docsify > 排错>配置封面> 配搜索> 启动> 放md类的文章> 自动生成目录&#xff1b; 更新文章流程&#xff1a; 把目录文章放到docsify\docs目录下&#xff0c;然后双击docsify-autosidebar.exe即可&#xff08;它会重新生成目录…...

Ubuntu18.04如何安装搜狗、网易云音乐、百度网盘、金山WPS、谷歌浏览器、微信、Maven、Pycharm、Anaconda、MySQL8.0等软件

目录 1.搜狗输入法 下载 安装 卸载 2.网易云音乐 下载 安装 3.百度网盘 下载 安装 4.金山WPS 下载 安装 5.谷歌浏览器 下载 安装 6.微信 下载安装 7.Maven 下载 安装 配置镜像源 8.Pycharm 下载 安装 9.Anaconda 下载 安装 卸载 10.MySQL8.0 下载…...

【算法练习Day24】递增子序列全排列全排列 II

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 递增子序列容易出错的地方 …...

web3之链上情报平台Arkham

文章目录 web3之链上情报平台Arkham什么是Arkham链上情报交易所 Arkham Intel Exchange相较于传统情报交易方式,Arkham Intel Exchange下优势 web3之链上情报平台Arkham 什么是Arkham 官网&#xff1a;https://zh.arkhamintelligence.com/ 官方&#xff1a;https://platform.…...

浅谈uniapp中开发安卓原生插件

其实官方文档介绍的比较清楚而且详细,但是有时候他太墨迹,你一下子找不到自己想要的,所以我总结了一下开发的提纲,也是为了自己方便下次使用。 1.第一步,下载官方提供的Android的示例工程,然后倒入UniPlugin-Hello-AS工程请在App离线SDK中查找,之后Android studio,编译运行项目…...

音频格式WAV

查找wav文件头关键struct 位置&#xff0c;当然也可查找avi文件头。用这个方法找到avi文件data位置后&#xff0c;可直接读出文件的每一帧图片。当然avi数据的标志位不是data,可以是00dc等。 WAV音频头文件有三个关键struct&#xff1a;RIFF, fmt,data。 AVI 视频文件头的关键…...

Python数据分析实战:用np.random.normal生成正态分布数据的5个实用场景

Python数据分析实战&#xff1a;用np.random.normal生成正态分布数据的5个实用场景 正态分布作为统计学中最基础也最重要的概率分布之一&#xff0c;在数据分析、机器学习、金融建模等领域无处不在。许多自然现象和人类行为都呈现出正态分布的特征&#xff0c;比如身高、考试成…...

GTE-Pro语义引擎效果展示:跨年度文档语义关联(2023制度→2024执行细则)

GTE-Pro语义引擎效果展示&#xff1a;跨年度文档语义关联&#xff08;2023制度→2024执行细则&#xff09; 今天想和大家分享一个特别有意思的案例&#xff0c;也是我们团队最近用GTE-Pro语义引擎解决的一个实际问题。 想象一下这个场景&#xff1a;你是一家公司的员工&#…...

光度立体三维重建中的光源标定:从理论到Matlab实践

1. 光度立体三维重建与光源标定的基础概念 想象一下你正在用手电筒照射一个苹果&#xff0c;随着手电筒角度的变化&#xff0c;苹果表面的明暗也会跟着改变。光度立体三维重建就是利用这个原理&#xff0c;通过分析物体在不同光照条件下的明暗变化&#xff0c;来还原物体的三维…...

OpenClaw自动化测试:用Phi-3-mini-128k-instruct批量执行Python脚本

OpenClaw自动化测试&#xff1a;用Phi-3-mini-128k-instruct批量执行Python脚本 1. 为什么需要自动化测试助手 作为一个经常需要验证各种Python脚本的开发者&#xff0c;我发现自己陷入了重复劳动的困境。每次修改代码后&#xff0c;都要手动切换到终端&#xff0c;输入命令执…...

胡桃讲编程・蓝屏急救进阶:磁盘修复 + 引导修复 + 网络修复,排除法根治顽固蓝屏

&#xff08;微星 GL62M 7REX 地下程序员实操版 | 上期指令无效必看&#xff09;哈喽各位自学开发、被蓝屏折磨到头疼的小伙伴们&#xff0c;我是胡桃&#xff5e;上一期咱们讲了三种高频蓝屏触发场景&#xff0c;还有系统修复的基础命令&#xff0c;不少朋友留言说&#xff1a…...

基于CURSOR的APP自动化测试框架实战指南(一)

1. 为什么选择CURSOR搭建APP自动化测试框架 第一次接触APP自动化测试时&#xff0c;我被各种工具和框架搞得晕头转向。直到遇到CURSOR&#xff0c;才发现原来搭建测试框架可以这么简单。CURSOR最大的优势在于它把复杂的配置过程封装成了可视化操作&#xff0c;就像用积木搭房子…...

别再对着黑乎乎的标签图发愁了!手把手教你给农业大棚遥感数据集上色(附Python代码)

农业大棚遥感数据可视化&#xff1a;用Python给黑白标签注入色彩生命 当你第一次打开农业大棚遥感数据集的标签文件时&#xff0c;那片漆黑是否让你感到困惑&#xff1f;作为一名刚接触遥感图像分割的开发者&#xff0c;我完全理解这种挫败感——你明明知道这些像素值代表着不同…...

终极C++编码标准指南:基于C++核心规范的AI驱动最佳实践

终极C编码标准指南&#xff1a;基于C核心规范的AI驱动最佳实践 【免费下载链接】everything-claude-code The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Curso…...

告别迷茫!新手如何从RTKLIB命令行程序入手,快速理解GNSS解算全流程

从命令行程序切入&#xff1a;RTKLIB新手实战指南 1. 为什么从命令行程序开始学习RTKLIB&#xff1f; 当你第一次打开RTKLIB的源码目录&#xff0c;面对数十万行代码和复杂的界面程序&#xff0c;很容易陷入"从哪开始"的困惑。作为过来人&#xff0c;我强烈建议从命令…...

Noto Emoji 开源表情库解决方案:从入门到精通完全指南

Noto Emoji 开源表情库解决方案&#xff1a;从入门到精通完全指南 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 在数字化沟通场景中&#xff0c;表情符号已成为跨越语言障碍的重要工具。然而&#xff0c;不同…...