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

Web 性能入门指南-3.5 优化单页应用程序 (SPA)

🌸 欢迎来到前端后花园!这里是一个温馨的小角落,专为热爱前端技术的你打造。没有华丽的辞藻,只有真诚的分享。希望你能在这里找到实用的内容,学到新知识,同时也欢迎你畅所欲言,分享你的思考和见解。
Web 性能入门指南专栏:我们将一起探讨如何提升网站的性能,从监控到分析,再到诊断和优化,每一步都力求实用、有效。让我们一起努力,让每一个网页都能以最佳状态展现在用户面前。🌱💻

单页应用程序 (SPA) 具有独特的页面速度优化挑战。让我们来看看 SPA 的一些常见 Web 性能问题,以及如何优化它们。

https://blog-img.speedcurve.com/img/501/spa.gif?auto=format,compress&fit=max&w=2000

传统网页(有时称为多页应用程序或 MPA)通过允许用户导航到不同的页面来工作,而单页应用程序 (SPA) 则通过使用 JavaScript 在应用程序的不同部分之间执行页内转换来工作。

关键区别在于,在 MPA 中,浏览器在每个页面之间执行完整导航。在 SPA 中,应用程序负责加载新内容并将其显示在页面上。

因此,SPA 通常要求用户在初始页面加载时下载更多 JavaScript。它们不仅需要当前页面的 JavaScript,还需要处理页面间转换的 JavaScript。

减少页面上的 JavaScript 数量

在网页的所有资源类型中,JavaScript 对页面性能的影响是最大的。减少页面上的 JavaScript 数量可以改善几乎所有页面速度指标,包括最大内容绘制 (LCP)、下一次绘制交互 (INP) 和总阻塞时间 (TBT)。

大多数性能工具都认识到了这一点。例如,当 JavaScript 执行时间超过 2 秒时,Lighthouse 会发出警告,而当 JavaScript 执行时间超过 3.5 秒时,审核失败。

有多种方法可以减少页面上的 JavaScript 数量:

  • 代码分割 JavaScript以仅发送用户需要的内容。

  • 缩小 JavaScript压缩 HTTP 响应以减少总负载大小。

  • 删除未使用的 JavaScript以减少有效负载大小以及编译、解析和执行时间。

尽可能在服务器上呈现页面内容

通过在服务器上渲染尽可能多的内容,可以改善 SPA 中的“最大内容绘制”等指标。这样,浏览器就可以在后台加载 SPA 的 JavaScript 时向用户显示他们正在寻找的内容。

预加载用户可能需要的资源

当浏览器必须下载新资源时,SPA 中的页面转换可能会很慢。您可以通过智能地预加载用户可能很快需要的资源来缓解这种情况。例如,您可以在用户将鼠标悬停在链接或按钮上时开始加载资源,而不是等到他们点击它。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Golang | Leetcode Golang题解之第242题有效的字母异位词
  • Linux下开放指定端口
  • 【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)
  • 双向长短期记忆网络(BiLSTM)及其Python和MATLAB实现
  • Six common classification algorithms in machine learning
  • 来自Transformers的双向编码器表示(BERT) 通俗解释
  • java中处理stream.filter()
  • myBatis的基本操作(持续更新中。。。)
  • Windows配置Qt+VLC
  • 使用 node --inspect 命令调试js文件执行
  • 【LeetCode】day18:530 - 二叉搜索树的最小绝对差, 501 - 二叉搜索树中的众数, 236 - 二叉树的最近公共祖先
  • python爬虫Selenium模块及测试案例详解
  • 大语言模型-Transformer-Attention Is All You Need
  • 如何发一篇顶会论文? 涉及3D高斯,slam,自动驾驶,三维点云等等
  • 学生管理系统(C语言)(Easy-x)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【笔记】你不知道的JS读书笔记——Promise
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android交互
  • flutter的key在widget list的作用以及必要性
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Laravel 中的一个后期静态绑定
  • PAT A1050
  • spring学习第二天
  • Tornado学习笔记(1)
  • 爱情 北京女病人
  • 安装python包到指定虚拟环境
  • 笨办法学C 练习34:动态数组
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从setTimeout-setInterval看JS线程
  • 给github项目添加CI badge
  • 关于 Cirru Editor 存储格式
  • 前端临床手札——文件上传
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • #define、const、typedef的差别
  • #NOIP 2014#Day.2 T3 解方程
  • (办公)springboot配置aop处理请求.
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (分布式缓存)Redis持久化
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (黑马点评)二、短信登录功能实现
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (排序详解之 堆排序)
  • (七)Flink Watermark
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原)本想说脏话,奈何已放下
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)shell调试方法
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net 调用海康SDK以及常见的坑解释