构建现代 Web App:五大核心前端架构原则(译)

大家好,这里是大家的林语冰。本期《前端翻译计划》分享的是来自 Vue 官方资讯推荐的一篇博客,略有删改。

免责声明

本文属于是语冰的直男翻译了属于是,仅供粉丝参考,英文原味版请临幸 Building modern Web Applications: 5 Essential Frontend Architecture Principles

在本文中,我将介绍构建现代前端的五个架构原则。我第一次听说这些原则是在纳塔利娅·文迪托(Natalia Venditto)的一次精彩演讲中。它们让我大开眼界,所以我尝试更详细地解释这些原则和我对它们的解读。

在她的演讲中,她将前端架构的原则分为两部分。

  • 我们应该始终坚持的原则
    • 原则 1:异步或延迟加载,考虑关键路径
    • 原则 2:tree-shake,刻意打包和消灭死代码
    • 原则 3:定义并遵守性能预算
  • 我们应该尽可能遵循的原则
    • 原则 4:坚持 Web 平台 API 和 Web 标准
    • 原则 5:使用新一代前端框架

无论如何,这些要点都非常有用,理论上指导您开发前端,以便您实现质量目标,比如性能效率、可移植性、兼容性、可扩展性和弹性。

异步或延迟加载,考虑关键路径

这是我们应该始终遵循的原则。

前端开发中,图像、字体和 JS(JavaScript) 等 Web 资产的加载策略是关键。

值得一看的是谷歌核心指标。核心指标是定义 Web App 用户体验的指标。谷歌搜索引擎也会对这些指标进行精密检查。

尤其在在客户端渲染方案中,JS 模块加载至关重要。因此,如果我们想加载 JS,主要有三种方法可以实现:

  • 标准方案(不推荐)
  • defer 关键字(根据此原则推荐)
  • async 关键字(根据此原则推荐)

标准方案

让我们来瞄一眼标准方式。标准方式是 html 标记中的普通 <script> 标签,如下所示:

html 复制代码
<html>
  <head>
    ...
  </head>
  <body>
    ...
    <script src="script.js" />
    ...
  </body>
</html>

如果我们在这种情况下查看浏览器的时间线和行为,这种加载 JS 方式的缺点如下所示。

从这个角度来看,存在两个短板:

  • 加载和执行的脚本能且仅能在加载前读取 DOM。
  • 如果是"重量级"脚本,它可以阻塞整个浏览器。

延迟方案

使用 defer 方式加载 JS 文件或代码是一种更优雅的技术方案。defer 告诉浏览器继续进行 DOM 解析并在后台加载脚本。解析 DOM 并加载脚本后,将执行脚本。这引导了非阻塞的首次初始渲染。

html 复制代码
<p>...</p>
<script defer src="my-fancy-script.js"></script>
<!-- 此 p 标签会被直接渲染 -->
<p>...</p>

异步方案

加载具有 async 属性的脚本会将加载标识为完全独立。这意味着,浏览器不会等待异步脚本。它是完全独立加载和执行的。

html 复制代码
<p>...</p>
<script async src="my-fancy-script.js"></script>
<!-- This p tag will be directly rendered -->
<p>...</p>

原则 2:tree-shake,可以打包并消除死代码

这是我们应该始终遵循的原则。

JS 打包是一种将多个 JS 文件打包到一个文件中的方案。打包可以减少 http 请求数量并简化缓存。tree-shaking 是一种优化技术,可从 JS 包中移除未使用的代码。这可以显著减小打包体积,从而缩短页面加载时间和提高整体前端性能。

通过激活 tree-shaking,我得到了以下好处:

  • 减小打包体积:tree-shaking 可以显著减小 JS 打包体积。这可以缩短页面加载时间和提高整体性能。
  • 改进缓存:较小打包更可能被浏览器缓存。这可以进一步缩短回访者的加载时间。
  • 减少带宽使用:较小打包使用较少的带宽。

如果您正在构建一个现代 JS App,您绝对应该使用 tree-shaking。这是提高 App 性能的一种简单有效的方案。

不同的现代 JS 打包器支持 tree-shaking:

  • Webpack
  • Parcel
  • Rollup
  • Vite
  • ......

原则 3:定义并遵守性能预算

这是我们应该始终遵循的原则。

在前端开发中,设置并遵守性能预算对于创建快速、响应迅速且用户友好的 Web App 至关重要。

性能预算为各种指标设定了可接受的效果目标,比如谷歌网络指标,比如首次输入延迟(FID)、最大内容绘制(LCP)和互动时间(TTI)。

通过设置这些指标,开发者可以确定性能优化工作的优先级,并确保其 App 满足用户欲望。

设置和遵守性能预算的关键步骤

  1. 设定性能目标:确定对用户体验至关重要的关键性能指标。这些指标可以包括 FID、LCP、TTI 和其他基于用户需求和欲望的指标。
  2. 性能分析:使用 Lighthouse 等工具测评 App 的当前性能。这将使您在进行任何优化之前对 App 的性能有一个基本的了解。
  3. 识别巨型阻塞型打包:使用打包分析器(比如 webpack-bundle-analyzer)来识别导致性能问题的特定前端打包。
  4. 明确优化优先级:根据已识别的性能瓶颈,确定优化的优先级,首先解决最关键的问题。专注于改进对用户体验影响最大的指标。
  5. 持续监控性能:持续监控 Web App 的性能,以确保其保持在设定的性能预算范围内。将 Lighthouse CI 等工具集成到 CI/CD 管道中,以自动执行性能测试和报告。
  6. 按需调整性能预算:随着 App 的发展和用户期望的变化,请查看性能预算并根据需要调整阈值。这将确保 Web App 继续提供高质量的用户体验。

通过执行这些步骤,您可以有效地设置和遵守性能预算,并确保前端 App 在速度、响应能力和整体用户体验方面满足用户欲望。

原则 4:坚持 Web 平台 API 和 Web 标准

这是我们应尽可能遵循的原则。

此原则乃下里巴人。尽可能利用 Web 平台 API 和 Web 标准的强大功能。

首先要熟悉 HTML、CSS 和 JS 等原生 Web 标准。这听起来易如反掌,但果真如此吗?

此外,它还涉及原生 Web 平台 API 的功能,举个栗子:

  • Web Storage API
  • Geolocation API
  • Media Capture and Streams API
  • Notifications API
  • Web RTC API
  • Payment Request API
  • ......

有了这些知识,您将能够创建高大上的 Web App。

原则 5:使用新一代前端框架

这是我们应尽可能遵循的原则。

这有利于使用现代和创新的前端开发框架来创建用户界面。

与传统框架相比,这些框架具有多项优势,包括但不限于:

  1. 提高性能和效率:新一代框架旨在优化性能并减少创建高级用户界面所需的代码量。这样可以加快渲染速度、提高响应速度并更有效地利用资源。
  2. 提高开发者的工作效率:这些框架通常提供一种更结构化的方法来创建和维护复杂的 App。这可以显著提高开发效率,并减少将新功能推向市场所需的时间。
  3. 活跃且不断发展的社区:这些框架通常拥有庞大且活跃的开发者社区,它们为其开发做出贡献,提供支持并分享知识。这培养了一个充满活力的工具、库和最佳实践生态系统,进一步增强了开发体验。

其中一些框架的列表:

  • React
  • Vue.js
  • Angular
  • Svelte
  • Solid.js
  • Lit
  • Qwik

您现在收看的是前端翻译计划,学废了的小伙伴可以订阅此专栏合集,我们每天佛系投稿,欢迎持续关注前端生态。谢谢大家的点赞,掰掰~

相关推荐
RadiumAg几秒前
记一道有趣的面试题
前端·javascript
yangzhi_emo5 分钟前
ES6笔记2
开发语言·前端·javascript
yanlele21 分钟前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
中微子2 小时前
React状态管理最佳实践
前端
烛阴2 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
中微子2 小时前
JavaScript 事件与 React 合成事件完全指南:从入门到精通
前端
Hexene...2 小时前
【前端Vue】如何实现echarts图表根据父元素宽度自适应大小
前端·vue.js·echarts
初遇你时动了情2 小时前
腾讯地图 vue3 使用 封装 地图组件
javascript·vue.js·腾讯地图
dssxyz2 小时前
uniapp打包微信小程序主包过大问题_uniapp 微信小程序时主包太大和vendor.js过大
javascript·微信小程序·uni-app
天天扭码3 小时前
《很全面的前端面试题》——HTML篇
前端·面试·html