前端 Web 性能清单

news2024/10/7 15:31:07
  • 💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】
  • 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】
  • 💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】

提高 Web 应用程序的性能是很重要的。我们希望页面加载得更快、更流畅,并且没有太多的布局变化。在这篇文章中,我想将关于这些的所有知识一一列出来。

预加载密钥请求/预连接到所需的源

在你的 HTML 中声明预加载链接,以指示浏览器尽快下载关键资源。

<head>
  <link rel="preload" href="critical.css" as="style">
  <link rel="preload" href="critical.js" as="script">
</head>

考虑添加 preconnect 或 dns-prefetch 资源提示以建立与重要第三方来源的早期连接。

<link rel="preconnect" href="https://example.com">
<link rel="dns-prefetch" href="https://example.com">.

dns-prefetch 的工作方式与 preconnect 完全相同,但具有更广泛的浏览器支持。

减少第三方使用

第三方代码会显着影响加载性能。但是,你可以通过以下方式修改你使用此第三方库的方式:

  • 使用 async 或 defer 属性加载脚本以避免阻塞文档解析。
  • 如果第三方服务器速度慢,则自行托管脚本。
  • 如果脚本没有为你的站点增加明确的价值,请将其删除。
  • 使用 link rel=preconnectlink rel=dns-prefetch 对托管第三方脚本的域执行 DNS 查找。

消除渲染阻塞资源

资源阻止了页面的第一次绘制。考虑内联交付关键的 JS/CSS 并推迟所有非关键的 JS/样式。你可以通过仅提供所需的代码和样式来减小页面的大小。

确定关键代码后,将该代码从呈现阻止 URL 移动到 HTML 页面中的内联脚本标记。

在 HTML 页面头部的样式块中内嵌第一次绘制所需的关键样式,并使用预加载链接异步加载其余样式。

缩小/删除不必要的 CSS 和 JS

当你构建一个大型应用程序时,你将到达一个地方,你的项目可能有更多它实际需要和使用的代码。

使用CSS Minification或Terser JS Plugin等工具。

要消除未使用的 css,可以使用PurgeCSS之类的工具。

要消除不必要的 JavaScript,你可以使用前面提到的 Terser 或利用Tree Shaking来消除死代码。你还可以使用代码拆分,它将代码拆分为可以按需加载的包。

扫描模块以查找重复项

从包中删除大型重复的 JavaScript 模块以减少最终包的大小。

在这里插入图片描述
使用Webpack 捆绑分析器

减少执行时间

代码拆分、缩小和压缩、删除未使用代码和缓存技术的结合将大大缩短执行时间。

考虑减少解析、编译和执行 JS 所花费的时间。你可能会发现交付较小的 JS 有效负载有助于此。
这个想法是优化我们的 JS 和 CSS 代码,最小化它并删除未使用的代码,以及我们正在使用的第三方库。

保持主文档的服务器响应时间较短,因为所有其他请求都依赖于它。

图像处理

适当大小的图像

提供适当大小的图像以保存蜂窝数据并缩短加载时间。

<img src="cat-large.jpg" srcset="cat-small.jpg 480w, cat-large.jpg 1080w" sizes="50vw">

高效编码图像

优化的图像加载速度更快,消耗的蜂窝数据更少。
使用你的图像 CDN 服务或图像压缩应该就足够了。

以下一代格式提供图像

WebP 或 Avif 等图像格式通常提供比 PNG 或 JPEG 更好的压缩,这意味着下载速度更快,数据消耗更少。

图像元素具有明确的宽度和高度

在图像元素上设置明确的宽度和高度,以减少布局偏移并改善 CLS。

预加载最大内容绘画 (LCP)

预加载 LCP 元素使用的图像以缩短 LCP 时间。

<link rel="preload" href="/path/to/image.jpg" as="image">
head() {
 return {
    link: [
      {
        rel: 'preload',
        as: 'image',
        href: 'path/to/lcp/image',
      },
    ],
  }
}

字体

在 webfont 加载期间所有文本仍然可见
利用字体显示 CSS 功能确保文本在加载网络字体时用户可见。

@font-face {
  font-family: 'Arial';
  font-display: swap;
}

font-display API 指定字体的显示方式。swap 告诉浏览器使用该字体的文本应该立即使用系统字体显示。自定义字体准备就绪后,它将替换系统字体。

例如,对于 Google 字体,只需将 &display=swap 参数添加到 Google 字体 URL 的末尾即可:

<link href="https://fonts.googleapis.com/css?family=Roboto:400,700&**display=swap**" rel="stylesheet">

要避免什么?

大的布局变化

Cumulative Layout Shift (CLS) 是一项 Core Web Vitals 指标,通过对不是由用户交互引起的所有布局偏移求和来计算。

避免过大的 DOM 大小

大型 DOM 会增加内存使用量,导致更长的样式计算,并产生代价高昂的布局回流。

多个页面重定向

重定向在页面加载之前引入了额外的延迟。

为现代浏览器提供遗留 JavaScript

Polyfill 和转换使旧版浏览器能够使用新的 JavaScript 功能。但是,对于现代浏览器来说,很多都不是必需的。

巨大的网络有效载荷

大型网络有效载荷使用户付出了真金白银,并且与较长的加载时间高度相关。

  • 推迟请求直到需要它们。
  • 将请求优化到尽可能小,最小化和压缩,尽可能使用 WebP 处理图像。图片 CDN 将始终保持我们的性能!
  • 缓存请求,这样页面就不会在重复访问时重新下载资源。

document.write()

对于连接速度较慢的用户,通过 document.write() 动态注入的外部脚本会使页面加载延迟数十秒。

非合成动画

未合成的动画可能很重并会增加 CLS。请改用translate和scaleCSS 属性。

概括

你现在对提高 Web 性能有了更多的了解。请记住,提高性能不是你可以坐下来解决的问题。这是一个持续的过程,应该定期解决性能问题,这样你网站的新功能(肯定需要)不会破坏性能。

好书推荐

《前端工程化:基于Vue.js 3.0的设计与实践》

在这里插入图片描述

本书以Vue.js的3.0版本为核心技术栈,围绕“前端工程化”和TypeScript的知识点展开讲解,根据笔者多年的前端开发和一线团队管理经验,将Vue 3的知识点按照工程师做项目的实施顺序梳理成章,一步一步帮助读者进行前端工程化和Vue 3的开发。从前端工程化开始到TypeScript语言的学习,再到使用TypeScript开发Vue 3项目,通过循序渐进的学习过程提升读者在前端工程化领域的实战能力。

📚 京东自营购买链接:《前端工程化:基于Vue.js 3.0的设计与实践》

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

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

相关文章

HS6621系列低功耗国产蓝牙芯片 支持蓝牙5.1

HS6621CxC是一个功耗优化的蓝牙低功耗和专有的2.4 ghz应用真正的芯片上系统(SOC)解决方案。它集成了一个具有蓝牙基带和丰富外设的低功耗射频收发器I0扩展。HS6621CxC还集成了电源管理&#xff0c;提供高效率电源管理。它的目标是2.4 G蓝牙低功耗系统&#xff0c;人机界面设备(…

尚无忧【已对接硬件】共享自习室,共享麻将馆,共享茶室,共享空间,共享台球室,共享健身房无人值thinkphp开发

1、定位功能&#xff1a;可定位附近是否有店 2、能通过关键字搜索现有的店铺 3、个性轮播图展示&#xff0c;系统公告消息提醒 4、个性化功能展示&#xff0c;智能排序&#xff0c;距离、价格排序 5、现有店铺清单展示&#xff0c;订房可查看房间单价&#xff0c;根据日期、…

面试了一位6年的软件测试,一问三不知,他还反怼我...

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

linux 修改 /etc/locale.conf无效问题处理办法

问题背景&#xff1a; 我在做测试系统文档转换成其他格式文档时&#xff0c;按照系统要求配置系统的编码格式为&#xff1a;utf-8 但是 尤其是设置&#xff1a;LC_ALLZh_CN.UTF- 8 但是 即使 我已经设置了 /etc/locale.conf内容如下&#xff1a; 并且source /etc/locale.con…

【FPGA-DSP】第十期:sysgen算法封装与调用

参考视频教程第10期 - sysgen算法封装与调用 - 基于FPGA的数字信号处理系统开发笔记_哔哩哔哩_bilibili 该教程主要实现如何将sysgen编写的算法模块给实际的应用起来 添加封装有两种方式&#xff1a; 在Vivado中使用ip核添加算法模块封装在Sysgen中将算法模块封装 Sysgen开发…

为何使用 B+ 树而非二叉查找树或 B 树做索引?

二叉树 B-Tree BTree 一、为何使用 B 树而非二叉查找树做索引&#xff1f; 我们知道二叉树的查找效率为 O(logn)&#xff0c;当树过高时&#xff0c;查找效率会下降。另外由于我们的索引文件并不小&#xff0c;所以是存储在磁盘上的。 文件系统需要从磁盘读取数据时&#xff0c…

【Vue工程】010-UnoCSS 即时按需原子 CSS 引擎

【Vue工程】010-UnoCSS 即时按需原子 CSS 引擎 文章目录 【Vue工程】010-UnoCSS 即时按需原子 CSS 引擎一、概述1、简介2、官网 二、基本使用1、安装2、修改 vite.config.ts3、根目录创建 uno.config.ts4、在 main.ts 中引入5、VS Code 安装 UnoCSS 插件6、在组件中使用7、访问…

ABAP 好用的事务码工具记录(持续更新)

性能优化类 SM50-某个程序RUNNING时间过长的时候&#xff0c;可以直接跳转到对应程序位置。 使用说明&#xff1a;一般选择仅活动进程&#xff0c;过滤列表中的活动程序和用户名&#xff0c;这样可以快速的定位到进程。 通过管理>>程序>>调试直接跳转到程序运行的…

VS2019配置opencv4.6.0手把手一步一步实现

引言&#xff1a;配置环境真是让人痛苦不堪&#xff0c;踩了无数个坑&#xff0c;网上的文章五花八门&#xff0c;完全不知道参考哪个&#xff0c;直接劝退。为了能顺利配置&#xff0c;此处进行记录&#xff0c;以后可以回过头来看&#xff0c;也分享给大家。 我提供了两种方…

基于AT89C51单片机的温度检测报警设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87777752?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 基于51单片机设计一个温度检测报警器&#xff0c;至少具有以下功能&#xff1a;温度的检测和超…

音频信号处理库librosa

参考&#xff1a; 1. librosa官网 2. librosa语音信号处理 3. 语音信号处理库 ——Librosa 4. librosa音频处理教程 5. Python音频信号处理库函数librosa介绍 0 谱分析函数 1. librosa 读取信号 librosa.load(path, sr22050, monoTrue, offset0.0, durationNone)读取音频文件…

深度linux社区版 20.8 安装 nvidia-docker,启动Stable Deffision WebUI docker 容器

以下为失败的记录&#xff0c;成功方法直接跳到末尾。 环境 说明&#xff1a; 深度apt 源中无法直接安装nvidia-docker 下载源码 github地址&#xff1a; GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs 下载最新release https:…

Win10系统D盘满了怎么清理隐藏的垃圾文件?

Win10系统D盘满了怎么清理隐藏的垃圾文件&#xff1f;电脑磁盘满了之后&#xff0c;就无法存在其它的文件了&#xff0c;有用户的电脑D盘空间满了&#xff0c;那么这个情况怎么去将里面隐藏的一些垃圾文件进行清理呢?接下来我们一起来看看解决的方法分享吧。 方法一&#xff1…

Java EE 初阶---多线程(三)

五、阻塞队列 目录 五、阻塞队列 5.1 阻塞队列是什么 &#xff1f; 5.1.1 生产者消费者模型 ​编辑 5.1.2 标准库中的阻塞队列 5.1.3 消息队列 5.1.4 消息队列的作用 5.2 实现一个阻塞队列 虚假唤醒 六、线程池 6.1 线程池是什么&#xff1f; 6.2 怎么使用线程池&#xf…

5G通信-帧结构及RE和RB

一.NR的帧结构&#xff08;可以参考38.211&#xff09; NR的时间单位由大到小依次为帧&#xff0c;子帧&#xff0c;时隙&#xff0c;符号。 其中一帧数据&#xff08;10ms&#xff09;由10个子帧组成&#xff0c; 一个子帧&#xff08;1ms&#xff09;由若干个时隙组成&#…

3个方案,绕过微信小程序官方审核

描述 虽然绕过官方审核&#xff0c;是不推荐的行为&#xff0c;但是官方的做法有点难以接受。偶尔会碰见奇葩理由被拒绝。例如&#xff1a;类目不对、功能过于简单、涉及金融(其实没有)、涉及官方素材等等。之前小程序不多的时候&#xff0c;你总是求着我加入开发&#xff1b;…

MYSQL相关之不常见变量、排序函数、JDBC数据库与Java连接

用户自定义变量 局部变量--->只在当前begin/end代码块中有效 sql 复制代码 create procedure add ( in a int, in b int ) begin declare c int default 0; set c a b; select c as c; end; 2.用户变量--->在客户端链接到数据库实例整个过程中用户变量都是有效的。…

商户查询的缓存——缓存穿透

4.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 解决方案&#xff1a; 1.缓存空对象&#xff08;简单粗暴&#xff09; 2.布隆过滤 代码实现&#xff1a; Autowired private String…

在米文动力 EVO Orin 设备 Jetson AGX Orin 下配置 YOLOV5 的环境说明

声明&#xff1a;本博文的配置大部分参考 Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch、Tensorrt最全教程 1 前言 本文设备内置的模组是 Nvidia Jetson AGX Orin 32GB&#xff0c;算力达到 200 TOPS&#xff0c;aarch64 架构 本文主要参考《Jetson AGX Orin安装Anac…

发明专利公开 -- CSS动画精准实现时钟

上一篇【setTimeout不准时&#xff0c;CSS精准实现计时器功能】的博文&#xff0c;最后提到了通过 CSS 动画实现计时器的方式。 本文详情描述如何通过 CSS 完整实现时钟效果&#xff0c;这也是团队 21 年专利的一项内容&#xff08;专利公布号&#xff1a;CN114003087A&#x…