写点什么

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:577642

评论

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

手慢无!阿里云神作《Spring Boot进阶原理实战》真的太全了!

做梦都在改BUG

Java 微服务 Spring Boot 框架

MySQL 语句中 where 条件后为什么写上1=1 , 是什么意思?

Java你猿哥

Java MySQL sql 后端 ssm

厉害了!阿里内部都用的Spring+MyBatis源码手册,实战理论两不误

Java你猿哥

spring 面试 Spring Boot mybatis 面经

数据出境是什么意思?我国数据出境合规要求是什么?

行云管家

数据 数据安全 堡垒机 数据出境

低代码平台搭建CRM 加速重构业务模式

力软低代码开发平台

2023字节、腾讯、阿里等6家大厂Java开发面试真题+高频面试题总结

小小怪下士

Java java程序员 java面试 Java面试题

Dubbo 正式支持 Spring 6 & Spring Boot 3

Java你猿哥

Java spring Spring Boot dubbo ssm

弯道超车!阿里高工新产Java面试速成指南,面试骚操作都在里面了

Java你猿哥

Java 面试 面经 Java工程师 春招

最佳实践 | 用腾讯云智能语音打造智能对话机器人

牵着蜗牛去散步

腾讯云 腾讯 语音识别 语音合成 智能对话机器人

阿里巴巴为什么不建议直接使用@Async注解?

Java你猿哥

Java ssm java8 Async Java工程师

什么是“语法糖”?Java中有哪些常见糖?

Java你猿哥

Java ssm Java工程师 语法糖

从 1000+ 参赛项目突围,涛思数据荣获 ITEC 2022 全球创业赛成长组二等奖

TDengine

tdengine 物联网 时序数据库 数字经济 大数据 开源

MySQL8.0 优化器介绍(一)

GreatSQL

MySQL greatsql greatsql社区

太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记

Java你猿哥

Java 数据结构 算法 数据结构算法 左程云

在 Kubernetes 中部署应用交付服务(第 2 部分)

NGINX开源社区

nginx Kubernetes

Bytebase vs Flyway

Bytebase

数据库 版本控制 变更

LED透明屏私人定制势不可挡

Dylan

电子 LED显示屏 屏幕

运动健康路线导入,助力用户轻松导航

HarmonyOS SDK

HMS Core

凭借左程云(左神)的这份 “程序员代码面试指南”我入职了字节

Java你猿哥

Java 算法 数组 二叉树 面经

2周时间就掌握了Spring boot,原来是收藏了这样一份文档资料

三十而立

Java spring

消费级AR眼镜爆发将近:Rokid+无影突破算力,打造“第三块屏幕”

云布道师

无影

是找茬? 还是装 B?阿里面试每轮必问的“Spring Boot”意义何在?

三十而立

微服务架构下你不得不知的3种部署策略

做梦都在改BUG

Java 架构 微服务

机器学习算法(九): 基于线性判别模型的LDA手写数字分类识别

汀丶人工智能

人工智能 数据挖掘 机器学习 LDA算法

数据库 CI/CD 工具 -- Bytebase 介绍

Se7en

限时公开,2023 年阿里巴巴 Java 面试权威指南(全彩版)

架构师之道

Java 面试

马鞍山等级测评机构有哪些?有几家?在哪里?

行云管家

等保测评 等级测评 马鞍山

置顶两个月!《程序员如何向架构师转型》神作在Github持续霸榜

做梦都在改BUG

Java 程序员 系统设计 架构师

用注解的方式优雅实现Ression分布式锁

做梦都在改BUG

Java 分布式锁 Ression

干货分享|袋鼠云数栈离线开发平台在小文件治理上的探索实践之路

袋鼠云数栈

大数据 平台开发

不懂就问:MySQL delete 表数据,磁盘空间为什么没有被释放?

Java你猿哥

Java MySQL 数据库 innodb Java工程师

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