JavaScript 框架生态系统的最新动态!

大家好,我是 ConardLi

JavaScript 的生态系统一直以它的变化速度飞快而著称。在今天快速变化的 JavaScript 框架生态中,稍不留神你就可能错过许多新东西。每当你觉得自己对最新的工具和技术驾轻就熟时,新的创新浪潮又会带来一切改变。

去一年,JavaScript 框架生态又发生了不小的变化,在今年的 Google I/O 开发者大会中,《Navigating the JavaScript framework ecosystem》 主题向我们整理和介绍了我们应该关注的重点内容。

图片

一个明显的趋势,各大 JavaScript 框架正在逐渐趋于融合,貌似大家都在实现哪几项内容,下面我们来一起看看过去一段时间这些框架的重点变化。

React

去年,React Server Components 的发布引入了一种新的 React 组件编写方式。

图片

从那时起,React 团队一直在致力于开发各种新功能,包括 React Compiler 和 Sever Action 等功能:

  • Server ComponentsReact Server Components 是在服务器上获取数据并在传送到客户端之前渲染的组件,这样可以将渲染工作移至服务端,并减少需要传送到客户端的代码量。
  • React CompilerReact Compiler 是一个可以自动进行组件 memoize 的编译器。可以通过减少不必要的重新渲染来提高性能。React 团队表示开发人员可以在不进行任何代码更改的情况下采用 React Compiler
图片
  • Server ActionsServer Actions 实现了客户端到服务器端的通信。借助 Server Actions,我们可以定义可以直接从 React 组件中调用的服务端功能,消除了手动 API 调用和复杂状态管理的需要,这在数据变更和表单提交等方面特别有用。
图片
  • 资源加载:React 一直在开发用于预加载和加载资源(如脚本、样式、字体和图片)的声明式 API
  • 离屏渲染:离屏渲染是 “React 中用于在后台渲染屏幕的即将推出的功能,无需额外的性能开销。你可以将其视为 content-visibility CSS 属性的一个版本,不仅适用于 DOM 元素,还适用于 React 组件。”

Vue

Vue.js 作为一个广受欢迎的框架,它经受住了时间的考验,其功能不仅影响了 Vue 的用户,还对更广泛的生态系统产生了影响。例如,很多实现了 signals(信号)机制的框架都从 Vue 中获得了灵感,像 Vite 这样广泛使用的工具也追溯到 Vue 生态。

Vite 最近发布了 Vue 3.4 ,它包含了一系列性能提升。首先,这些性能提升涉及到 Vue 的响应式系统的改进。比如,现在计算属性(computed properties)只有在计算值变化时才会触发效果。此外,数组的 shiftunshift、和 splice 方法现在只触发一次同步效果。再者,多个计算依赖的变化也只会触发一次同步效果。这些改进的最终结果是减少了不必要的组件重新渲染。

图片

Vue 3.4 还包含了对 Vue 模板解析器的完全重写。由于这次更改,解析器现在可以大约在一半的时间内解析单文件组件(single file components)。作为最终用户,这些变化意味着你会看到稍微更快的构建时间,以及对于像 Vue TypeScript 和其他依赖于 Vue 解析器的插件执行时间的改进。

展望未来,最让我感到兴奋的 Vue 功能之一是 Vue 的 Vapor 模式。 Vapor 模式是一种面向性能的、可选的编译策略,目前正在开发中。给定相同的 Vue 单文件组件,Vapor 模式将生成比现有 Vue 标准编译策略更高效的 JavaScript 代码。你无需为整个应用使用 Vapor 模式,可以选择在特定组件上逐个应用。然而,如果你在整个应用中使用 Vapor 模式,它将消除对 Vue 虚拟 DOM 的需求,这将减小你的打包体积。

图片

Angular

Angular 最近的发布中包含了许多重大变化,包括信号(Signals)、可延迟视图(Deferrable views)、NgOptimizedImage、非破坏性水合(Non-destructive hydration)和部分水合(Partial hydration)。一些亮点包括:

  • 信号(Signals):信号是多个框架(包括现在的 Angular )用于跟踪应用程序状态的一种新的方法。Angular Signals 可以通过减少在变更检测期间需要进行的计算次数来改善运行时性能,包括交互到下一次绘制(INP)。
图片
  • 可延迟视图(Deferrable views):可延迟视图使得可以推迟加载特定的组件、指令和管道。例如,您可以推迟加载一个依赖项,直到内容进入视口或直到主线程处于空闲状态。
图片
  • NgOptimizedImageNgOptimizedImage 是 Angular 的图片组件,自动采用最佳的图像加载方法。
图片
  • 非破坏性水合(Non-destructive hydration):非破坏性水合修复了在服务器端渲染的 Angular 应用程序的 DOM 在客户端重新构建时可能出现的闪烁问题。
图片
  • 部分水合(Partial hydration):通过部分水合,默认情况下,在页面呈现时浏览器不加载页面的任何 JavaScript。相反,随着用户与页面的交互,页面的特定部分会进行水合。
图片

Next.js

在过去的几年里,Next.js 作为构建在 React 之上的框架,已经在开发者中爆炸性地流行起来。Next.js 起初作为一个项目推出,为 React 应用提供服务器端渲染、代码拆分等功能。今天,经过多年的发展,Next.js 继续为 React 生态系统引入新功能,目前它是支持 React 的一些较新功能(如 React 服务器组件、Suspense 和 Sever Actions)的唯一框架。

最近对 Next.js 的一项重大变革是引入了 App RouterApp Router 为 Next.js 应用内的路由提供了一种新的结构化和管理方式。更重要的是,App Router 使得使用 Next.js 的新功能(如共享布局、嵌套路由)以及新的 React APIs(例如 React 服务器组件、Suspense 和 Sever Actions)成为可能。

图片

Next.js 目前的应用通常使用 Webpack 作为构建工具。然而,Vercel 一直在开发 Webpack 的继任者 —— Turbopack 。一旦准备就绪,TurboPack 将提供明显更快的开发构建,并且也将支持热模块替换。

图片

部分预渲染(Partial Prerendering)是一种新的页面渲染方法,构建在 React Suspense API 之上。它使用静态加载壳来渲染页面,但为页面内的动态内容留下空白,这些内容将异步加载。因此,你可以在提供可缓存的静态页面的同时,将动态数据融入到页面内容中,从而获得多种性能优势。

图片

另外,我还想提一提 Vercel 的 v0 工具,它使用 AI 来生成使用 React、Tailwind CSS 构建的用户界面。你可以通过描述所需创建的内容,例如表单、列表,或上传所需结果的图像来提示 v0。这不仅是个很酷的想法,我认为这可能是我们首次见到 AI 被纳入框架工具中的例子。随着 AI 成为一个热门话题,看到 v0 和类似工具如何在未来几年发展将会非常有趣。

图片

Nuxt

Nuxt 是基于 Vue 的应用框架,以提供卓越的开发者体验而闻名。Nuxt 内置了服务器端渲染功能,支持如 Nitro 和 Vite 这样的现代工具,并且拥有一个包含 200 多个 Nuxt 模块的丰富生态系统,这些模块提供了为你的 Nuxt 应用集成从分析、数据库到 SEO 和 UI 等各种功能的即插即用界面。

Nuxt 最近一直致力于通过其开发者工具进一步改善开发者体验。与一般的浏览器扩展不同,Nuxt Dev Tools 作为一个浮动面板出现在你的应用旁边的浏览器中,这使得它们能够提供非常详细和视觉上丰富的界面。除此之外,Nuxt Dev Tools 还支持社区模块,意味着使用类似 Vitest 或 Tailwind CSS 这样有针对 Nuxt Dev Tools UI 的工具时,这些 UI 将出现在 Nuxt Dev Tools 中。

图片

Nuxt 核心团队还在开发新模块以进一步增强框架能力。其中一个是 Nuxt Fonts ,它旨在简化在应用中使用和配置字体的工作,处理许多关于字体的最佳实践,例如添加资源提示、生成备用字体以及缓存第三方字体提供商的字体。

图片

另一个模块是 Nuxt Scripts 和 Assets,它提供一系列实用程序来帮助你优化加载第三方资源。例如,使用 useScript 可组合式函数(composable)使你能够精细控制第三方脚本的加载时机和方式。

图片

对于那些对 Nuxt 的新功能感兴趣但仍处于 Nuxt 2 的开发者来说,官方推出了 Nuxt Bridge 工具,以帮助简化从 Nuxt 2 到 Nuxt 3 的迁移过程。鉴于 Nuxt 2 的生命周期将于2024年6月结束,迁移到 Nuxt 3 变得尤为重要。

图片

在不久的将来,Nuxt 4 的发布将会更加重要,所以要注意观望 Nuxt 4 以及即将推出的模块,如 Nuxt Accessibility、Nuxt Auth 和 Nuxt Hints 。

Svelte

在 JavaScript 框架的世界中,性能始终是开发者追求的核心。在这方面,Svelte 框架显得独树一帜。它以高效的编译策略受到开发者的亲来,不同于直接将代码传送至浏览器,Svelte 的编译器会将 Svelte 代码转换成高度优化的 JavaScript 代码。这种方法不仅有助于减少打包体积,还使 Svelte 成为响应性至关重要的应用场景的绝佳选择。

Svelte 5 引入了一项名为 Runes 的新特性,该特性改变了你在 Svelte 应用中管理响应式的方式。Runes 背后运用信号来实现细粒度的响应式。通过使用 state Rune 声明响应式状态,不同于简单地使用 let 声明,state Rune 清楚地向你和编译器指示数据声明为响应式状态。要声明派生状态,即从另一个状态推导出的状态,你可以使用 derived Rune。最后,要触发效果,可以使用 effect Runeeffect 函数将自动订阅其读取的任何状态值,并在 DOM 更新后触发回调。这些仅是 Svelte 5 新 Runes 语法的简要概述,你现在就可以在单个组件的基础上或整个应用中尝试这种新特性。

作为 Svelte 的应用框架,SvelteKit 提供了诸如路由、服务器端渲染和静态网站生成以及部署工具等功能。近期,Svelte 发布了 SvelteKit 2 ,它包括多种改进,如采用 Vite 5、支持浅层路由和引入图像组件的新特性。图像组件集成了你所期望的图像组件特性,但我认为最酷的方面是,即使你不使用 Svelte ,也能够利用它 — Svelte 图像组件可在任何基于 Vite 的项目中使用。

Remix

Remix,一个全栈 Web 框架,正在开发者社区中获得越来越多的关注,下面是 Remix 近期推出了几个重要的更新:

  • Remix 2.0 发布:Remix 2.0 于2023年9月发布,为框架带来了重大改进和新功能。

  • 对 Vite 的稳定支持:Remix 现在提供对 Vite 的稳定支持,Vite 是一个快速轻量级的构建工具,提供更快的开发构建和改进的性能。

图片
  • SPA 模式:Remix 引入了 SPA 模式,允许构建纯静态站点,无需在生产中使用 JavaScript 服务器。这使开发人员能够利用 Remix 的强大功能,如基于文件的路由、自动代码拆分等,同时保持静态站点部署的简单性。
图片

Astro

Astro,一款现代静态站点构建工具,以其创新的 Web 开发方式引起了社区不小的轰动。其专注于性能和开发者体验,下面是 Astro 近期发布的几个令人兴奋的功能和更新:

  • Astro IslandsAstro Islands 允许开发人员构建与页面其余部分隔离的交互式 UI 组件,这样可以实现高效更新和最佳性能。
图片
  • 混合渲染:Astro 现在支持混合渲染,结合静态站点生成和服务器端渲染的优势,提高了灵活性。

  • 图片和图片组件:新的图片和图片组件,简化了图像处理并提供自动优化。

  • View Transitions 支持 :Astro 内置支持 View Transitions API,可以实现平滑无缝的页面过渡。
图片
  • Astro Dev ToolbarAstro Dev Toolbar 提供了一套强大的工具,用于调试和优化 Astro 应用程序。
图片

最后

框架为我们提供了构建卓越网络体验的工具,但其真正的力量在于你的技能、创造力和利用这些框架的能力。 JavaScript 框架的生态是动态的、不断发展的,充满了无限的可能性。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/88297.html

(0)
guozi's avatarguozi
上一篇 2024年6月3日 下午5:05
下一篇 2024年6月3日 下午5:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注