大家好,我是 ConardLi。
JavaScript 的生态系统一直以它的变化速度飞快而著称。在今天快速变化的 JavaScript
框架生态中,稍不留神你就可能错过许多新东西。每当你觉得自己对最新的工具和技术驾轻就熟时,新的创新浪潮又会带来一切改变。
去一年,JavaScript
框架生态又发生了不小的变化,在今年的 Google I/O
开发者大会中,《Navigating the JavaScript framework ecosystem
》 主题向我们整理和介绍了我们应该关注的重点内容。
一个明显的趋势,各大 JavaScript
框架正在逐渐趋于融合,貌似大家都在实现哪几项内容,下面我们来一起看看过去一段时间这些框架的重点变化。
去年,React Server Components
的发布引入了一种新的 React
组件编写方式。
从那时起,React
团队一直在致力于开发各种新功能,包括 React Compiler
和 Sever Action
等功能:
Server Components
:React Server Components
是在服务器上获取数据并在传送到客户端之前渲染的组件,这样可以将渲染工作移至服务端,并减少需要传送到客户端的代码量。React Compiler
:React Compiler
是一个可以自动进行组件 memoize
的编译器。可以通过减少不必要的重新渲染来提高性能。React
团队表示开发人员可以在不进行任何代码更改的情况下采用 React Compiler
。Server Actions
:Server Actions
实现了客户端到服务器端的通信。借助 Server Actions
,我们可以定义可以直接从 React
组件中调用的服务端功能,消除了手动 API
调用和复杂状态管理的需要,这在数据变更和表单提交等方面特别有用。React
一直在开发用于预加载和加载资源(如脚本、样式、字体和图片)的声明式 API
。content-visibility CSS
属性的一个版本,不仅适用于 DOM
元素,还适用于 React
组件。”Vue.js
作为一个广受欢迎的框架,它经受住了时间的考验,其功能不仅影响了 Vue
的用户,还对更广泛的生态系统产生了影响。例如,很多实现了 signals
(信号)机制的框架都从 Vue
中获得了灵感,像 Vite
这样广泛使用的工具也追溯到 Vue
生态。
Vite
最近发布了 Vue 3.4
,它包含了一系列性能提升。首先,这些性能提升涉及到 Vue
的响应式系统的改进。比如,现在计算属性(computed properties
)只有在计算值变化时才会触发效果。此外,数组的 shift
、unshift
、和 splice
方法现在只触发一次同步效果。再者,多个计算依赖的变化也只会触发一次同步效果。这些改进的最终结果是减少了不必要的组件重新渲染。
Vue 3.4
还包含了对 Vue
模板解析器的完全重写。由于这次更改,解析器现在可以大约在一半的时间内解析单文件组件(single file components
)。作为最终用户,这些变化意味着你会看到稍微更快的构建时间,以及对于像 Vue TypeScript
和其他依赖于 Vue
解析器的插件执行时间的改进。
展望未来,最让我感到兴奋的 Vue
功能之一是 Vue
的 Vapor
模式。 Vapor
模式是一种面向性能的、可选的编译策略,目前正在开发中。给定相同的 Vue
单文件组件,Vapor
模式将生成比现有 Vue
标准编译策略更高效的 JavaScript
代码。你无需为整个应用使用 Vapor
模式,可以选择在特定组件上逐个应用。然而,如果你在整个应用中使用 Vapor
模式,它将消除对 Vue
虚拟 DOM
的需求,这将减小你的打包体积。
Angular
最近的发布中包含了许多重大变化,包括信号(Signals
)、可延迟视图(Deferrable views
)、NgOptimizedImage
、非破坏性水合(Non-destructive hydration
)和部分水合(Partial hydration
)。一些亮点包括:
Signals
):信号是多个框架(包括现在的 Angular
)用于跟踪应用程序状态的一种新的方法。Angular Signals
可以通过减少在变更检测期间需要进行的计算次数来改善运行时性能,包括交互到下一次绘制(INP
)。Deferrable views
):可延迟视图使得可以推迟加载特定的组件、指令和管道。例如,您可以推迟加载一个依赖项,直到内容进入视口或直到主线程处于空闲状态。NgOptimizedImage
:NgOptimizedImage
是 Angular
的图片组件,自动采用最佳的图像加载方法。Non-destructive hydration
):非破坏性水合修复了在服务器端渲染的 Angular
应用程序的 DOM
在客户端重新构建时可能出现的闪烁问题。Partial hydration
):通过部分水合,默认情况下,在页面呈现时浏览器不加载页面的任何 JavaScript
。相反,随着用户与页面的交互,页面的特定部分会进行水合。在过去的几年里,Next.js
作为构建在 React
之上的框架,已经在开发者中爆炸性地流行起来。Next.js
起初作为一个项目推出,为 React
应用提供服务器端渲染、代码拆分等功能。今天,经过多年的发展,Next.js
继续为 React
生态系统引入新功能,目前它是支持 React
的一些较新功能(如 React
服务器组件、Suspense
和 Sever Actions
)的唯一框架。
最近对 Next.js
的一项重大变革是引入了 App Router
。App 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
是基于 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
。
在 JavaScript
框架的世界中,性能始终是开发者追求的核心。在这方面,Svelte
框架显得独树一帜。它以高效的编译策略受到开发者的亲来,不同于直接将代码传送至浏览器,Svelte
的编译器会将 Svelte
代码转换成高度优化的 JavaScript
代码。这种方法不仅有助于减少打包体积,还使 Svelte
成为响应性至关重要的应用场景的绝佳选择。
Svelte 5
引入了一项名为 Runes
的新特性,该特性改变了你在 Svelte
应用中管理响应式的方式。Runes
背后运用信号来实现细粒度的响应式。通过使用 state Rune
声明响应式状态,不同于简单地使用 let
声明,state Rune
清楚地向你和编译器指示数据声明为响应式状态。要声明派生状态,即从另一个状态推导出的状态,你可以使用 derived Rune
。最后,要触发效果,可以使用 effect Rune
。effect
函数将自动订阅其读取的任何状态值,并在 DOM
更新后触发回调。这些仅是 Svelte 5
新 Runes
语法的简要概述,你现在就可以在单个组件的基础上或整个应用中尝试这种新特性。
作为 Svelte
的应用框架,SvelteKit
提供了诸如路由、服务器端渲染和静态网站生成以及部署工具等功能。近期,Svelte
发布了 SvelteKit 2
,它包括多种改进,如采用 Vite 5
、支持浅层路由和引入图像组件的新特性。图像组件集成了你所期望的图像组件特性,但我认为最酷的方面是,即使你不使用 Svelte
,也能够利用它 — Svelte
图像组件可在任何基于 Vite
的项目中使用。
Remix
,一个全栈 Web
框架,正在开发者社区中获得越来越多的关注,下面是 Remix
近期推出了几个重要的更新:
Remix 2.0
发布:Remix 2.0
于2023年9月发布,为框架带来了重大改进和新功能。Vite
的稳定支持:Remix
现在提供对 Vite
的稳定支持,Vite
是一个快速轻量级的构建工具,提供更快的开发构建和改进的性能。SPA
模式:Remix
引入了 SPA
模式,允许构建纯静态站点,无需在生产中使用 JavaScript
服务器。这使开发人员能够利用 Remix
的强大功能,如基于文件的路由、自动代码拆分等,同时保持静态站点部署的简单性。Astro
,一款现代静态站点构建工具,以其创新的 Web
开发方式引起了社区不小的轰动。其专注于性能和开发者体验,下面是 Astro
近期发布的几个令人兴奋的功能和更新:
Astro Islands
:Astro Islands
允许开发人员构建与页面其余部分隔离的交互式 UI
组件,这样可以实现高效更新和最佳性能。Astro
现在支持混合渲染,结合静态站点生成和服务器端渲染的优势,提高了灵活性。View Transitions 支持
:Astro
内置支持 View Transitions API
,可以实现平滑无缝的页面过渡。Astro Dev Toolbar
:Astro Dev Toolbar
提供了一套强大的工具,用于调试和优化 Astro
应用程序。框架为我们提供了构建卓越网络体验的工具,但其真正的力量在于你的技能、创造力和利用这些框架的能力。 JavaScript
框架的生态是动态的、不断发展的,充满了无限的可能性。
大家对近期 JavaScript
框架的生态发展情况有什么看法呢?欢迎在评论区留言。