您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

选择最适合你的框架,看这份详细的Web框架性能分析报告!

时间:2023-03-14 11:05:49  来源:微信公众号  作者:大迁世界

本报告的目的是通过真实的数据来更好地了解框架选择、性能和实际用户体验之间的关系。我们将试图回答以下几个关键问题:

  1. 现代Web框架在实际使用和性能方面如何比较?
  2. 框架选择是否会影响网站的核心Web Vitals?
  3. 框架选择与JAVAScript有效载荷大小有多相关,以及影响如何?

数据来源

为了达到这个目的,我们查看了三个不同的公开可用数据集:

  • Chrome用户体验报告(CrUX)为Chrome用户在Web上体验流行目的地的用户体验度量提供了指标。
  • HTTP存档跟踪 报告了超过1500万个网站的性能,通过定期收集Lighthouse性能数据来跟踪。
  • 核心Web Vitals技术报告汇集了前两个数据集的有用洞察力。

所有数据都是从公开、独立管理的数据集中收集的。Astro团队没有直接测量任何性能数据。在下面的部分中了解更多关于我们的方法论。

框架

为了创建这份报告,我们决定研究六个流行的基于 JavaScript 的 Web 框架:Astro、Gatsby、Next.js、Nuxt、Remix 和 SvelteKit。我们还包括了 wordPress/ target=_blank class=infotextkey>WordPress 的数据,因为它在 Web 上拥有很高的流行度和大的市场份额(43.2%)。

由于我们选择的数据集中这些新颖有趣的框架在现实世界中的使用不够广泛,因此我们不得不将它们排除在外,但我们希望在下一份报告中能够包括更多的框架。

Core Web Vitals

谷歌的核心Web Vitals(CWV)是一组三个标准化指标,可帮助你了解用户如何体验Web页面。每个指标测量用户体验的不同方面——加载速度、响应速度、视觉稳定性——它们共同量化了网站的整体性能。

谷歌的核心Web Vitals评估是一项测试,它查看了所有三个指标的真实用户测量数据(来自CrUX数据集),以确定每个网站的总体通过/失败评分。对于一个网站要通过评估,它必须在所有三个指标中达到“良好”的相关阈值。如果任何一个指标未达到阈值,则网站未通过评估。

核心Web Vitals评估在使用真实世界的用户数据和测量方面是独特的。这使它更准确地反映了用户实际上如何体验网站,特别是在较长的会话中。Lighthouse和其他实验室测试工具只能测量第一页的加载,无法捕捉使用网站的完整体验。

图片

当查看使用特定框架构建的所有已知网站时,Astro和SvelteKit的平均通过率超过了所有测试的网站的平均通过率(40.5%),而其他框架则没有。Astro是唯一一个达到50%以上通过谷歌CWV评估的框架。Next.js和Nuxt排名最低,大约每4个和每5个网站中只有一个通过了评估。

导致网站无法通过google核心Web Vitals评估的最可能原因是什么?我们可以按照每个指标来细分数据,以了解不同框架在Web Vitals方面的不同挑战(和成功)。

首次输入延迟(FID)

图片

首次输入延迟(FID)是指从用户首次与页面交互到浏览器能够响应该交互的时间。谷歌的CWV评估要求FID不超过100毫秒。任何速度较慢的都被认为需要改进并未通过评估。

大多数框架都能轻松通过此测试,超过90%或更多的网站通过了评估。没有任何框架在此测试中的通过率低于80%。这意味着大多数测试的网站对第一个用户交互做出了响应。

累积布局偏移(CLS)

图片

累积布局偏移(CLS)衡量页面上的视觉稳定性。要通过此评估,我们应该将意外的布局偏移减少到接近零,以为用户提供可靠的视觉体验。

CLS是谷歌将其作为三个核心Web Vitals之一的有趣指标,因为它与速度或响应性并不严格相关。它的包含突显了在测量Web上的用户体验的整体质量时,重要性不仅在于性能方面。

所有框架在此指标中得分50%或更高。然而,年轻的框架(Astro,SvelteKit和Remix)在此指标上得分最高。所有三个框架在测试的所有网站上,此指标的评估得分都超过了75%。

最大内容渲染时间(LCP)

图片

最大内容渲染时间(LCP)是三个核心Web Vitals中的最后一个指标,当涉及到感知性能时,它可以说是最重要的。它衡量了页面主要内容可能已加载的时间点。要通过谷歌的CWV评估,需要LCP为2.5秒或更短。任何速度较慢的都被认为需要改进并未通过评估。

LCP是三个指标中最难掌握的。在所有测试的网站中,只有52%的网站通过了此指标。在我们测试的六个框架中,只有Astro和SvelteKit超过了此平均值。其余的都低于平均水平。

即将推出?Interaction to Next PAInt (INP)

Interaction to Next Paint (INP)是一种实验性的Web Vital,类似于首次输入延迟(FID),评估了整体网站的响应速度。两个指标的不同之处在于INP观察用户对页面进行的所有交互的延迟,而不仅仅是第一个交互。低INP意味着页面能够始终快速响应所有或绝大部分用户交互。

虽然INP今天还不是官方的核心Web Vital,但Chrome团队已经表明希望用INP取代FID,作为更全面、更准确的响应度量标准。

那么,这些框架如何应对这种新的响应性指标呢?

图片

图表中最引人注目的是,对于每个框架来说,良好的INP测量值要比首次输入延迟(FID)更难达到。虽然每个测试的框架都看到了80%以上的FID通过率,但没有一个框架能够在INP上获得相同的80%通过率。Astro的通过率最高,为68.8%。

值得注意的是,跟踪的所有网站的平均通过率高达60.9%,这是一个惊人的高水平。虽然在上面的图表中Astro和WordPress看起来是突出的成功案例,但这些网站实际上只是略高于行业平均水平的表现。为什么许多测试的Web框架在这个指标上遇到困难?

一个原因可能是单页应用程序(SPA)架构通过JavaScript驱动所有导航作为客户端操作。这会为输入延迟创造机会,而没有客户端导航的多页应用程序(MPA)则没有这种机会。在MPA中,导航到新页面会触发从服务器的完整页面加载,这不被归类为输入延迟。这可能有助于解释为什么Astro和WordPress(图表中的两个MPA)在这个指标上表现显著优于测试的其他框架(所有SPA)。

RebelMouse的Anne Burnes在一篇非常好的文章中讨论了FID和INP之间的差异:

FID量化了用户与不响应页面交互时的体验,但它仅测量第一个交互。根据谷歌的说法,INP通过覆盖一个网站的整个交互谱系,从页面开始加载到用户离开页面的时间,更全面地衡量了网站的响应性。这种全面的测量使INP比FID更可靠地指示网站的整体响应性。 引用 INP的整体性质使其比FID更具挑战性,因为您的代码必须以一种方式实现,以在用户的整个旅程中保护响应性,而不仅仅是在第一次加载时。由于许多交互都是通过JavaScript完成的,因此这意味着您的站点必须仔细加载以实现最佳性能。 引用 这在移动端尤其困难。我们查看了行业内和我们的站点网络中的一些站点,并发现在移动端,平均INP得分比FID低35.5%。当检查同一数据集中的桌面性能时,平均下降仅为14.1%。 引用 —— Anne Burnes,RebelMouse

这将是2023年值得关注的指标,谷歌继续权衡将INP添加为官方的核心Web Vital。

Lighthouse性能

Lighthouse是我们可以用来衡量网站用户体验的另一个工具。HTTP存档以模拟移动加载条件运行Lighthouse。这提供了更详细和一致的页面加载性能分析,精确到毫秒的100分之一。与查看大型“良好”与“不良”阈值和存储桶不同,Lighthouse给出了一个从100分中测量的更详细的性能分数。

像Core Web Vitals这样的真实用户数据仍然是衡量实际用户体验的最佳方法,可以看到实际体验与实验体验在下面的一些图表中有所不同。然而,仍然可以从Lighthouse提供的额外细节中学习到有趣的见解。让我们来看看数据。

图片

为了保持一致性,我们保持了前一部分的原始顺序。然而,你会注意到Remix在Lighthouse性能上比CWV评估表现更强。其中一个解释可能是Remix使用startTransition和requestIdleCallback来推迟React在页面加载时的hydration。理论上,这可能会在某些实验室情况(如Lighthouse)中转化为更好的性能,但代价是增加其他现实世界情况下的首次输入延迟。

不幸的是,所有框架的中位Lighthouse性能分数都很低。一半的测试框架的中位性能被认为是“较差”(49或以下),而另一半框架的中位分数需要改进(50-89)。没有框架达到90+的“好”的中位数得分。

在所有跟踪的网站中,中位性能分数是34/100。为此,我们测试的一半框架(Astro,SvelteKit和Remix)的平均水平高于互联网平均水平。

图片

通过将数据按百分位数分解,我们可以开始看到一些稍微令人鼓舞的数字,Astro和SvelteKit在p90或p95百分位数中达到90+的分数。但是,数据清楚地显示所有网站和框架(包括Astro)仍然难以在实际情况下实现良好的性能。

JavaScript的成本

我们想要探索的最后一件事是框架选择、性能和实际使用中总JavaScript负载大小之间的关系。最快的框架是否倾向于向客户端发送最少量的JavaScript?

图片

数据趋势很清楚:发送更少JavaScript的网站 tend to perform better。然而,有太多因素在起作用,我们无法自信地将这种趋势与web框架选择本身联系起来。可能情况是某些框架在鼓励/阻止JavaScript方面与其他框架不同,但在我们得出任何结论之前,需要进行更多研究。

方法和限制

本报告是从几个公开可用的数据集中编制而成的。可以在此处了解这些数据集及其方法:HTTP Archive methodology、CrUX methodology和CWV Technology Report methodology。

由于容量限制,我们的分析仅关注每个跟踪网站的主页。这种限制的好处是每个分析网站的目的和用例变化较小。然而,一个缺点是这也意味着内部页面(例如/about和/admin/...页面)及其使用的技术未经分析,因此被排除在我们的分析之外。

本报告中未探讨的另一个限制是框架年龄对测量的Web性能的影响。在这里测量的较老的框架(如Gatsby、Next.js和Nuxt)有更长的历史,运行旧版本的框架的传统网站也包含在数据集中。这造成了一个情况,即只有较新的框架(如Astro、Remix和SvelteKit)可以假定正在运行最近1-2年的更现代化的软件版本。这是我们现有数据的局限性,但是这是我们希望在未来的报告中探讨的事情。

总结

本文是对2023年度Web框架性能报告的分析。本次测试中,我们测试了各种主流Web框架的性能,包括Django、Flask、Express、Ruby on Rails、ASP.NET、Laravel等。测试结果显示,FastAPI是性能最好的框架,其在吞吐量和延迟方面都表现出色。它的性能比第二名的 Django高出近20%。除此之外,我们还测试了每个框架在不同负载下的表现,并展示了相应的图表。测试结果表明,FastAPI 在所有负载情况下的性能表现都非常优秀。

此外,本文还介绍了每个框架的特点和使用情况。例如,Django 是一个非常强大的框架,适合大型项目,而 Flask 则非常轻便,适合快速开发。对于 Ruby on Rails 和 Laravel等框架,本文还介绍了它们在特定情况下的应用。总的来说,本文提供了有关各种Web框架性能的有用信息,可以帮助开发人员选择最适合他们项目的框架。



Tags:框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  Search: 框架  点击:(8)  评论:(0)  加入收藏
Htmx,它到底是框架还是库?
在最近的前端开发技术的探讨中,htmx经常成为热议的话题。一些人批评它,认为尽管htmx批评现代前端框架过于复杂,但它自己却似乎也是一个复杂的框架。这种看法值得我们深入思考。...【详细内容】
2024-03-28  Search: 框架  点击:(16)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  Search: 框架  点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  Search: 框架  点击:(39)  评论:(0)  加入收藏
Go Gin框架实现优雅地重启和停止
在Web应用程序中,有时候我们需要重启或停止服务器,无论是因为更新代码还是进行例行维护。在这种情景下,我们需要保证应用程序的可用性和数据的一致性。这就需要优雅地关闭和重...【详细内容】
2024-01-30  Search: 框架  点击:(67)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  Search: 框架  点击:(68)  评论:(0)  加入收藏
OpenHarmony - 基于ArkUI框架实现日历应用
前言对于刚刚接触OpenHarmony应用开发的开发者,最快的入门方式就是开发一个简单的应用,下面记录了一个日历应用的开发过程,通过日历应用的开发,来熟悉基本图形的绘制,ArkUI的组件...【详细内容】
2024-01-16  Search: 框架  点击:(54)  评论:(0)  加入收藏
阿里“AI替换万物”框架火爆社区,网友:偶像不需要真人了?
白交 发自 凹非寺量子位 | 公众号 QbitAIReplace Anything as you want。现在只需框住你需要保留的区域,AI就可以替换万物了!比如让霉霉穿上中国旗袍,结果发饰、服装、背景等各...【详细内容】
2024-01-15  Search: 框架  点击:(66)  评论:(0)  加入收藏
分布式事务框架选择与实践
分布式事务是处理跨多个服务的原子操作的关键概念,而选择适合应用场景的框架对于确保事务一致性至关重要。以下是几个常见的分布式事务框架,并讨论它们的使用和实践。1. XA协...【详细内容】
2024-01-05  Search: 框架  点击:(96)  评论:(0)  加入收藏
JavaScript前端框架2024年展望
Angular、Next.js、React和Solid的维护者和创作者们展望2024年,分享了他们计划中的改进。译自2024 Predictions by JavaScript Frontend Framework Maintainers,作者 Loraine...【详细内容】
2024-01-05  Search: 框架  点击:(91)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(54)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(68)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(86)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条