写点什么

Rich Harris:使用 Svelte 5.0 你将编写更少的代码

  • 2024-08-01
    北京
  • 本文字数:3209 字

    阅读完需:约 11 分钟

大小:1.48M时长:08:38
Rich Harris:使用 Svelte 5.0 你将编写更少的代码

导读:在现代应用程序的开发征途中,开发者们持续遭遇着日新月异的万幸技术挑战与抉择。近期,Svelte 框架迎来了其里程碑式的 5.0 版本,该版本承诺在功能与性能上实现质的飞跃,为用户带来前所未有的体验。Svelte 的缔造者 Rich Harris 在一次访谈中,详尽阐述了这一新版本所蕴含的优势与革新,包括显著提升的灵活性、令人瞩目的速度提升,以及更为精炼的代码编写艺术。然而,面对 React Server Components(RSC)这股新兴技术潮流的兴起,Harris 也坦诚地指出了伴随而来的挑战,特别是组件分离策略的调整与数据获取复杂性的增加。

 

本文中,我们将与读者一同深入剖析 Harris 对于 Svelte 5.0 的独到见解,探讨他是如何巧妙应对框架设计中的种种难题,并展望 React Server Components 对前端开发流程可能带来的深远影响。通过细致入微的技术剖析与实战应用的探讨,我们将揭示这场技术革新背后的核心议题与应对策略。无论你是 Svelte 的忠实拥趸,还是对前端开发技术世界充满好奇的探索者,本文都将为你奉上一场思想盛宴,激发你的深刻思考与洞见。

 

Svelte 5 在各个方面都实现了 “质的飞跃”,其创始人 Rich Harris 在最近的一次播客访谈中信心满满地表示。

 

“它变得更为强大、可靠,体积缩减,速度提升,灵活性增强,且组合性更加出色,”Harris 强调道。“采用 Svelte 5,你将发现相比 Svelte 4,所需编写的代码量大幅减少,同时开发体验也将更加愉悦。”

 

在参与 The Modern Web 播客关于 React 服务器组件与 Svelte 5 的讨论中,Harris 透露了 Svelte 5 引入的细粒度通用响应性特性,这一创新让开发者不再受限于 Svelte 组件本身。同场参与讨论的还有播客主持人 Tracy LeeBen LeshAdam Rackis

 

“你能够在 .cell.json.cell.ts 模块中直接声明响应状态,这简直令人兴奋,”Harris 分享道。“而 Svelte 3 和 Svelte 4 中备受用户喜爱的所有功能,如丰富的动画原语、流畅的过渡效果、作用域 CSS 以及超高速的服务器端渲染等,都得以保留并进一步优化。”

 

Harris 进一步指出,Svelte 5 提供了一个 “与组件框架无缝对接” 的应用框架,且经过精心打磨,体验更佳。他还特别针对以往对编译器的批评做出了回应。

 

“过去,有人批评 Svelte 的编译器输出杂乱无章,担心如果组件众多,最终生成的包体积可能会超过一些大型框架。但现在,这些问题都已不复存在,因为我们的编译器输出变得更加精简高效,”Harris 解释道。“总而言之,Svelte 5 在各个方面都实现了显著的进步。”

 

目前,Svelte 5 已作为发布候选版本面世,并设有一个专为开发者设计的演示平台

 

Svelte 选择 Signals 的背后故事

 

Svelte 的诞生恰逢 Signals 技术风靡之时,其创始人 Harris 欣然表示,Svelte 最终选择采用 Signals 技术是一个明智之举。

 

“这意味着编译器生成的代码异常清晰易懂,且我们无需编写过多代码,因为 Signals 自带了许多便捷功能,” 他解释道,“我们的 Signals 实现极其高效,不仅内存占用低,性能也出类拔萃。作为编译器,我们能够做出其他框架难以企及的设计选择。”

 

“坦白说,Svelte 在框架界其实算是一个相对保守的选手。”

——Svelte 创始人 Rich Harris

 

Signals,作为处理应用状态变化的响应式基础构件,赋予了开发者轻松管理并响应应用内变动的强大能力。Harris 追溯其历史渊源,指出其概念可上溯至 2008 年的 Knockout 框架。Lesh 补充说,那时它们被称为可观察对象,但 Harris 强调其易用性并不尽如人意。

 

Harris 进一步阐述了 Signals 技术的采用历程,从 Vue 3 的兴起,到 Solid 框架创始人 Ryan Carniato 对 Solid 优势的广泛宣传,无不彰显着 Signals 技术的影响力。

 

谈及 Svelte,Harris 再次强调:“我们 Svelte 确实在框架界中扮演着相对保守的角色。尽管我们享有创新灵活的美誉,但在设计决策上,我们无疑是行动较为迟缓的一派。这并不是因为我们缺乏开发速度,而是因为我们对自己所构建的产品有着极高的标准和要求。因此,我们花费了大量时间才达到今天的成就。”

 

Harris 盛赞 React Server Components 为 “卓越之作”

 

在播客访谈中,Harris 也被问及了 React Server Components,这一在 React 社区内过去两年间持续引发热议的技术。面对这一既具个人关联又充满挑战的话题,Harris 坦诚而深入地分享了他的看法。

 

“我确实对 React Server Components 持有积极评价,绝非负面 —— 实际上,我认为它们相当出色。”Harris 说道,“对我而言,React Server Components 的最大魅力在于,它们标志着我们在过去十年左右探索旅程中的一个合乎逻辑且至关重要的下一步,即将我们所有的技术和理念汇聚一堂。”

 

他进一步阐述道,前端领域曾有一个 “荒谬的概念”,即将 HTML、JavaScript 和 CSS 三者割裂开来处理。然而,随着 React 等技术的兴起,人们逐渐认识到这种分离的做法并不明智。

 

“大家开始意识到,如果 CSS 与特定标记相关联,而 JavaScript 又与同一标记紧密相连,那么它们理应被整合在一起。因此,我们开始致力于将各种元素融合起来。”Harris 解释道。

 

“在这方面,Svelte 至少在一段时间内是这一理念的积极倡导者之一。我们不仅仅将行为与标记相结合,更将样式也嵌入到组件文件中,从而构建出自给自足、和谐统一的开发单元。”Harris 自豪地表示。

 

“而 React Server Components 之所以吸引我,正是因为它们代表了我们在过去十年探索过程中,将一切元素整合起来的自然延伸。”

——Harris

 

然而,他也指出,尽管这一方向正确,但在数据获取方面仍存在一个缺失的环节。“想象一下,当你将数据传递给组件时,组件可能会在初始化时发送网络请求以获取这些数据,并据此更新内部状态。”Harris 说,“虽然这种方法可行,但它也伴随着诸多弊端。”

 

他特别指出,通过网络进行数据获取可能会带来加载延迟、瀑布流效应及页面杂乱无章等问题。“但更深层次的问题在于,当你将数据与组件绑定时,你往往需要在组件外部编写数据获取逻辑。”Harris 继续道,“这可能导致一个尴尬的局面:即使你删除了某个组件,相关的数据获取代码可能仍然在运行,而你却浑然不知。”

 

“这就像是你移除了需要水的植物,但水龙头却依然在滴水。”Harris 形象地比喻道,“更糟糕的是,如果你在组件树的深处添加了一个新组件,你可能需要更新那些远在天边、甚至由不同团队维护的数据加载函数。这无疑增加了协调的复杂性和难度。”

 

但幸运的是,React Server Components 巧妙地解决了这一难题。“在 React Server Components 中,获取组件数据的代码就位于组件本身内部。”Harris 解释道,“因此,当你不再需要某个组件时,只需简单地将其删除即可,无需担心相关的数据获取逻辑仍在运行。这是一个既简洁又高效的解决方案,我认为在这一点上,React Server Components 的表现无可挑剔。”

 

React Server Components 的 “挑战”

 

Rackis 提问道:“使用 React Server Components 时,会面临哪些挑战呢?”

 

Harris 解释道,挑战主要在于开发者实际上构建了两个相对独立的世界 —— 服务器端组件与客户端组件。

 

“当然,这样做有其合理之处,比如服务器是一个无状态的环境,因此不适合使用状态钩子;而客户端组件则不应直接访问数据库,这些都是显而易见的考虑。” 他进一步说明,“服务器组件与客户端组件之间的行为差异有其存在的理由,但现实情况是,这种差异给开发者带来了不少困惑。”

 

Harris 坦言,即便是作为框架的创建者之一,他也曾对此感到困惑。

 

“我非常理解这种感受。我希望能在整个应用程序中保持一致的思维模型。” 他继续说道,“如果可以,我真希望不必再去思考这些不同组件如何协同工作,以及哪些数据可以序列化等复杂规则。这不仅让我感到困扰,也让许多开发者感到头疼。这就是主要的挑战所在 —— 它确实不简单。”

 

原文链接:

 

https://thenewstack.io/youll-write-less-code-with-svelte-5-0-promises-rich-harris/

 

声明:本文为 InfoQ 翻译整理,未经许可禁止转载。

2024-08-01 11:577758

评论

发布
暂无评论
发现更多内容

你有多少密码是123456

MySQL从删库到跑路

密码管理

在线ASCII艺术字生成工具,SpringBoot banner生成工具

入门小站

工具

jTDS 驱动导致 cpu 100%

顾五木

cpu占用100% 线上程序问题

架构实战营 - 模块 8- 作业

泄矢的呼啦圈

架构实战营

数据仓库的基本要求

奔向架构师

数据仓库 数据架构 7月日更

设计消息队列存储消息数据的MySQL表格

Vincent

架构训练营

【Flutter 专题】91图解 Dart 单线程实现异步处理之 Future (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

Redisson 分布式锁源码 08:MultiLock 加锁与锁释放

程序员小航

Java 源码 分布式锁 redisson redison

Apollo配置中心如何实现配置热发布

慕枫技术笔记

微服务 后端 配置中心

Ubuntu Server 20.04搭建kafka集群

玏佾

kafka kafka配置 kafka数据 Ubuntu20.04

学点项目管理,对咱程序员很重要~

后台技术汇

项目管理 项目管理工具

都说数仓是面向主题建设的,那数仓的主题和主题域又应该怎么划分呢?

白贺BaiHe

数仓 7月日更 数仓主题 主题域 数仓建设

Linux之find xargs

入门小站

Linux

模块一作业

君子意如何

「架构师训练营第 1 期」

external-attacher源码分析(2)-核心处理逻辑分析

良凯尔

Kubernetes 源码分析 Ceph CSI Kubernetes Plugin

Spring源码解析 -- SpringWeb请求映射Map初始化

Java spring 源码解析

🏆「作者推荐」【JVM性能分析】精心准备了一套JVM分析工具的锦囊(上部)

码界西柚

JVM 性能分析 jvm调优 7月日更

免费分享Java Web 开发的优秀图书

Java入门到架构

Java Java书籍推荐

🏆「作者推荐」【JVM 性能分析】精心准备了一套 JVM 分析工具的锦囊(中部)

码界西柚

JVM 性能分析 7月日更

第八课作业

杰语

使用 Open Policy Agent 实现可信镜像仓库检查

张晓辉

Kubernetes 安全 OPA

查找——HASH

若尘

数据结构 hash

利用 Vector 从日志创建指标来提高系统的可观测性

哈德韦

日志 可观测性 Prometheus SRE vector

为什么搞一个副业项目如此之难?

张理查

话题讨论| 帮朋友拼多多助力会导致银行卡被盗刷?

石云升

拼多多 话题讨论 7月日更

Go 语言中一些不太常见的优化

Xargin

性能优化 后端 Go 语言

phpExcel:Excel数据导入导出最佳实战

devpoint

php Excel thinkphp 7月日更

hive 与传统数据库对比

五分钟学大数据

hive 7月日更

yarn 的基本介绍和产生背景

大数据技术指南

YARN 7月日更

完了,又火一个项目

程序员鱼皮

JavaScript GitHub Vue 大前端 React

币安链智能合约Dapp系统开发方案

薇電13242772558

智能合约

Rich Harris:使用 Svelte 5.0 你将编写更少的代码_架构/框架_Loraine Lawson_InfoQ精选文章