写点什么

JavaScript 开发的挑战与未来:简化与创新的平衡

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

    阅读完需:约 8 分钟

大小:1.15M时长:06:43
JavaScript开发的挑战与未来:简化与创新的平衡

JavaScript 代码交付领域正在发生重大变革,开发者们已经开始注意到这些变化。从 ReactConf 参会者对新近开源的 React 编译器的热情程度来看,社区对于优化 Web 代码交付的工具和标准有着巨大的需求。改进客户端代码交付解决方案不仅涉及代码编译,也在彻底改变代码打包、压缩、分割、摇树优化、转译和模块化的方式。这听起来有点复杂?确实如此,但即使你不完全理解这些技术的工作原理,重要的是你要知道这些复杂的转换器和优化器都是为了提升客户端体验而设计的,无论是通过加快浏览器的加载速度来改善最终用户体验,还是通过简化和快速构建来改善开发者体验。


作为一名需要记住大量 React 代码的开发者,我迫不及待地想要摆脱这一切。所以我对即将到来的 React 编译器感到无比兴奋。#reactconf


— Drew Butler (@DrewButlerMe) 2024 年 5 月 15 日


由于向浏览器传输代码(HTML、CSS 和 JavaScript)和资源(图片、字体和视频)的生态系统正在迅速发生演变,我们有必要停下来思考一番。Web 开发领域最近发生的事件(无论是争议还是新技术的发布)不仅对那些直接参与编码的开发者产生了影响,也对提供相关产品和服务的供应商产生了影响,并且这些事件还改变了风险资本的融资环境。关于这个领域有很多东西可以说,所以我不会试图在一篇文章中涵盖所有内容。我会用一系列文章来阐述为什么 JavaScript 项目构建步骤和向浏览器传输代码对于创新和投资来说是一个值得关注的领域。


为什么要编译或优化?


代码编译,即把人类可读的代码翻译成机器可读的代码的过程,以及优化,比如为不同设备生成多种大小和格式的过程,在大多数 Web 开发中都是一个标准的过程。然而,这个构建步骤正在发生演变,有时甚至回归到早期不那么复杂的模式。


在很大程度上,是 Ryan Dahl 在 2009 年开发的运行时环境 Node.js 把我们带到了如今这种重构建的 Web 开发时代。与过去在 index.html 文件中直接添加脚本代码的标准做法不同,Node 让开发者能够使用 JavaScript 编写服务器和后端代码。虽然这一变化具有革命性,但这一变化也给 Web 开发带来了更多层次的复杂性。


但开发者对 Node 的依赖在很大程度上已经成为前端领域一个越来越明显的趋势,这种趋势使得 JavaScript 密集型的单页应用程序(SPA),如 React、Vue 和 Angular,所需的繁重构建过程变得司空见惯。它也反映了 Web 开发中的一种过度偏重,即过分强调开发者体验而不是用户体验。新的构建过程常常与开发者的幸福感相关,因为他们可以通过高级抽象的构建步骤来转换机器可读的代码。然而,开发者的快乐是以牺牲最终用户的 Web 体验为代价,尤其是那些使用旧设备和网络条件不佳的用户。


从 2010 年初开始,为了让服务器端 JavaScript 在浏览器中运行,催生了一系列开发者工具,这些工具旨在为浏览器打包 Node/npm 环境,包括 Browserify(2011 年)、Grunt(2012 年)、Gulp(2013 年)、Babel(2014 年)、Webpack(2014 年)、Rollup(2015 年)、SWC(2019 年)、Vite(2020 年)、ESBuild(2020 年)和 Rspack(2022 年),等等。今天,许多来自前端社区的开发者和风险投资提供支持的公司正在开发 Node 的替代品或至少是向后兼容的替代品,如 Deno(A 轮,Shasta Ventures、Sequoia Capital 等)和 Bun(种子轮,Y Combinator 和 Kleiner Perkins)。他们在争论 Web 开发是否应该摒弃编译器、打包器、优化器等,回归到 HTML、CSS 和 JS 基础。例如,在 2021 年,David Heinemeier Hansson(DHH)发表了一篇题为“无需 JavaScript 打包或转译的现代 Web 应用”的帖子,他在文章中表达了对复杂构建过程的反对。他写道:


使用 Babel 进行转译开启了一个复杂转译流程和工具的时代。使用最新的、尚未被所有浏览器广泛支持的 JavaScript 语言特性来编写代码并非没有代价。代价是不断扩大的复杂性网络,而这显然不是终点。


虽然 DHH 列举了许多可以结束打包和编译需求的创新举措,包括 ES6、HTML2、import map,但他意识到更重要的一步是浏览器的改进,这些改进使得构建步骤变得越来越没有必要。得益于引擎和标准的改进,开发者现在能够在浏览器中原生地完成各种任务。即使没有编译,前端工程师现在也能够编写嵌套 CSS(告别 Sass)并使用 WebAssembly 执行代码。


开发者已经注意到这些扩展能力,并开始思考它们对 Web 开发未来的意义。随着替代方案变得愈加主流,一些工程师,如 Prahlad Yeri,开始提出想“Node.js 有未来吗?”这样的问题。最近一期的 JSParty 播客也讨论了“Web 开发需要构建步骤吗?”这个话题。尽管 JSParty 小组成员不出所料地得出“视具体情况而定”的结论,但主持人 Kevin Ball 认为这个问题的核心在于:


确定试图解决的业务问题,并做尽可能少的事情——我们只需要拥有控制问题所需的最小一组事物,将其余的事情尽可能多地转移给工具、平台等。


超越 KISS 原则


这种“少即是多”的哲学在软件工程社区引起了共鸣,尤其是那些关注 Web 开发和 JavaScript 生态系统的人。大家似乎都认同当前的复杂性是不可持续的,而且在很大程度上是不必要的。本月早些时候,我在 RenderATL 技术会议上与 Request Metrics 和 TrackJS 的 CEO Todd Gardner 谈到了他在 JavaScript 构建领域所看到的情况。对于复杂性问题的共鸣,他反思道:


前端工程社区有一些非常聪明的人,但有时候聪明的人也需要面对挑战,为自己创造出新的问题。


对于 JavaScript 开发者来说,遵循 KISS 原则的呼声越来越高,但编译器和打包器的数量却在不断增加。事实上,当 Web 构建工具 Farm 推出时,在 Hacker News 上引发了热烈的讨论。JavaScript 构建领域需要做一些改变,而这些改变又是什么?开发者如何在性能和简单性之间找到平衡?哪些因素最有利于产品在当今市场中充分利用浏览器的客户端计算和交互能力?最后,选择使用 Rust 开发这些东西背后的原因又是什么?


【声明:本文由 InfoQ 翻译,未经许可禁止转载。】


原文链接:https://redmonk.com/kholterhoff/2024/06/25/the-problem-of-javascript-code-delivery/

2024-08-01 12:228380

评论 2 条评论

发布
用户头像
感觉啥都没说
2024-08-01 14:47 · 日本
回复
是的,感觉没说啥
2024-08-02 07:25 · 广东
回复
没有更多了
发现更多内容

如何优化大场景实时渲染?HMS Core 3D Engine这么做

HarmonyOS SDK

HMS Core

HTTP报文内容

穿过生命散发芬芳

HTTP 12月月更

我对管理角色带团队的一些经验分享

大东(AIP智能体运营专员)

我对中台的理解和企业数字中台建设的思考

大东(AIP智能体运营专员)

Java程序员培训机构怎么选

小谷哥

【经验总结】HDI与普通PCB的4点主要区别

华秋PCB

工艺 PCB PCB设计

RocketMQ Schema——让消息成为流动的结构化数据

Apache RocketMQ

RocketMQ

我把整个研发中台拆分过程的一些心得总结

大东(AIP智能体运营专员)

培训班出来前端程序员好找吗?

小谷哥

数据存储,消息队列的高可用保障

C++后台开发

数据库 数据结构 消息队列 后端开发 linux开发

Amazon 4.7 星评,领域新经典,了解服务设计就读它

图灵社区

产品经理 设计模式 服务设计

Clickhouse表引擎探究-ReplacingMergeTree

京东科技开发者

Clickhouse 数据分片 数据验证 存储数据 MergeTree

参加大数据培训可以找到工作吗

小谷哥

隐匿于喧嚣城市的世外桃源,「武汉浮生艺术馆」开放小程序预约通道,顺利举办多场艺术展览

天天预约

小程序 SaaS 预约工具 展览 艺术馆

我把传统业务架构升级到业务中台架构的心得

大东(AIP智能体运营专员)

在北京选择哪家大数据培训机构

小谷哥

学习掌握哪些前端技术才能找到好工作?

小谷哥

企业转型难?火山引擎数智平台提供数智升级新路径

字节跳动数据平台

大数据 数据中台 12 月 PK 榜

Laravel中HasOne和BelongsTo的区别

ModStart

新华三推出人工智能模型训练平台,让智慧算力触手可及

脑极体

软件测试培训 | 在霍格沃兹测试开发学社学习是种怎样的体验?

霍格沃兹测试开发学社

阿里云视觉智能开放平台——人脸活体检测算法重磅升级

夏夜许游

服务升级 人脸活体检测 人脸人体

大咖说·开源人说|数据库 PolarDB 开源的商业逻辑与价值思考

大咖说

数据库 阿里云 开源

迁移速度与计算性能兼得!天翼云DirtyLimit技术大显身手

天翼云开发者社区

虚拟机 迁移 弹性计算

汽车之家基于 Milvus 的向量检索平台实践

Zilliz

数据库 向量检索 Milvus

专利解析|数据中台—数据流配置弹框交互优化方法

元年技术洞察

数据中台 数字化转型 专利解析

重磅!TDengine 3.2.0 正式发布

TDengine

数据库 tdengine 时序数据库

在新基建数字化的时代,寻找自我的突破和价值创造

大东(AIP智能体运营专员)

智能合约DAPP开发WEB3.0系统搭建技术

薇電13242772558

智能合约

小游戏流量变现都有哪些窍门?

FinFish

小游戏 微信小程序-游戏 小程序游戏 微信小游戏

直播|HashData信创概览

酷克数据HashData

信创

JavaScript开发的挑战与未来:简化与创新的平衡_架构/框架_kate holterhoff(RedMonk)_InfoQ精选文章