🌐 今日要闻
打破信息壁垒,走近全球前端。Hello World 大家好,我是林语冰。
欢迎阅读《Web 周刊》,上周 Web 开发圈的主要情报包括:
- 👍 TS 登顶 GitHub 第一语言,官宣了 最后一个 JS 主版本
- ✅ JS 推出
Temporal最新功能,取代Date时间减屎 - 🚫 Node 社区爆发反 AI 运动,“理解债务“是 AI 编程的隐形成本
- ☑️ CSS
light-dark()函数亮暗切换或将支持图片
PS:本文附带甜妹解说的动画视频,粉丝请搜索哔哩哔哩@Web情报局。
🎉 每周热搜
🔗 TypeScript 6.0 官宣
TypeScript 是 GitHub 去年 涨粉最快 的编程语言,并且已经赶超 JS 和 Python,成为 GitHub 第一编程语言 了。
TS 团队官宣 v6.0 正式发布,这是 最后一个 基于 JS 源码库的主版本,TS 7.0 开始要移植到 Go 语言了。
这个主版本涵盖了超多新功能和破坏性更新,主要包括:
- 支持 JS 的最新功能,比如 ES2026
map.getOrInsert()方法和TemporalAPI(Stage4) - 爆改了大量默认编译选项,比如
target默认是 JS 现行版(目前是es2025),之后每年自动更新,要求最低版本为es6,不再支持es5 - 废弃了超多过时功能,比如
module只支持 ESM 和 CJS,UMD 等非主流模块通通被砍掉了
TS 6.0 是主版本更新,更多技术细节另请参阅 TS 官方博客。
🛜 官方情报
🔗 JS 推出 Temporal 时间减屎
全球 JS 现状调查民主投票选出的 JS 最大痛点是缺少静态类型,这可以采用 TS 来缓解;而第二大痛点就是 Date 的历史包袱。
举个栗子,Date 的月份计算机制比较反直觉:
const month = new Date("2026-03-31");
console.log(month.getMonth());
// 三月返回 2 ?
month.setMonth(month.getMonth() + 1);
const nextMonth = new Date(month);
console.log(nextMonth.getMonth());
// 4...三月 + 1 是 五月?
可以看到,月份计算类似 Array 的索引从 0 开始,且月份加一有时会自动偏移到 下下个月,比如这里三月的下个月是五月。
技术上讲,JS Date 直接移植自 java.utils.Date,由于它存在大量“设计屎山“,Java 在 2010 年代就把它优化掉了。但 JS 为了向后兼容,被 Date 坑了 30 多年。
对此,开发者会采用第三方库来“曲线救国“,但库附带的全球时区数据无法轻易 tree-shaking(树摇优化),会导致项目体积膨胀。
即便如此,库开发也利大于弊,date-fns 等日期库的周下载量过亿,证明了 JS 需要一个更现代化的日期 API。
为此,moment 库的维护者在 2017 年制定了 Temporal 提案,同年立即进入 Stage1,迄今迭代九年只为“时间减屎“。
今天,Temporal 终于进入 Stage4,将取代 Date 并正式上线,它的月份计算等机制更符合直觉:
const month = Temporal.PlainDate.from("2026-03-31");
console.log(month.month);
// 三月返回数字 3
const nextMonth = month.add({ months: 1 });
console.log(nextMonth.month);
// 三月 + 1 是四月
Temporal 是一个类似 JSON 的 全局命名空间对象,它无法通过 new 来实例化,而是通过几个类提供了 200+ 实用方法。
根据 ECMAScript 官方测试,Temporal 是目前 测试量最大 的模块,也是“后 ES6 时代“以来最大的新功能。
感谢 TC39、库维护者、提案贡献者和彭博社等人,彻底解决了一个 JS 的长期痛点。
🔗 Node 社区爆发“反 AI 运动“
事件导火索是 Node 成员之一“Fastify 之父“联手 AI 提交了一个约 两万行代码 的巨型 PR,引起了热议。
有人认为高品质的 AI 代码要求昂贵硬件和付费服务才能参与,这种“隐形特权“违背了开源精神。
另一位谷歌专家指出,AI 编程还存在“理解债务“的隐性成本,这是 AI 生成的海量代码与人能够理解的代码量之间的差距。
举个栗子,如果 AI 采用 Monad(单子) 来做函数式编程,但我不懂什么是“自函子范畴上的幺半群“,那么项目就会不断积累理解债务。
长此以往,AI 编程不利于开源项目的可持续发展。于是,Node 社区联名签署了请愿书,希望在 Node 等 基建项目 中禁用 AI。
“Fastify 之父“强调,人件 + 软件是一种优势,AI 只是将开发瓶颈转移到了 Code Review(代码审核)环节,重点是要明确人也必须对 AI 生成的代码负责。
这让我想起了《人月神话》的比喻,生小孩需要怀胎十月,即使投入十倍人力,也没法把生产周期缩短为一个月。人件的瓶颈始终存在。
最终,Node 背后的 OpenJS 基金会还是允许 AI 贡献源码。好险大部分开发者还算明智,它们原则上允许 AI 辅助编程,但实践中拒绝海量代码的提交。
🔗 Node 研发整数哈希算法
Node 团队为 V8 研发了一种具有最低限度抗 HashDoS(哈希泛洪)能力、且可快速逆向的整数哈希算法。
该算法具有足够的不可预测性,能有效防止盲目攻击者触发严重的性能瓶颈。
同时,运行时持有的密钥可以高效地对其进行逆向操作,从而恢复原始整数值,这对于维护 V8 引擎的性能优化至关重要。
🚦 版本更新
🔗 Astro v6.1
Astro 是 GitHub 第三 SSG(静态站点生成器),它支持在一个框架里编写主流 UI 框架的组件,包括 React / Vue / Svelte 等。
Astro 发布了 v6.1 次版本,比如新增 image.service.config,允许全局设置 png / jpeg 等不同图像编码的默认值,搭配原本每张图片的单独设置一起使用。
🔗 Next v16.2
Next 是 GitHub 第一全栈框架。
Next 发布了 v16.2 次版本,渲染速度飙升,RSC(服务器组件)之前采用 JSON.parse() 方法及其第二个实参 reviver() 回调,底层机制存在性能瓶颈;现在改用一元 JSON.parse() 方法 + 递归遍历提速,这个 JSON 技巧值得借鉴一下。
// 之前:
JSON.parse(text, reviver);
// 现在:
JSON.parse(text);
其次,新增稳定版 Adapters(适配器)API,之前 Cloudflare 联手 AI 将 Next 移植到 Vite,创建了更易于部署到不同平台的 vinext 项目,Adapter API 也是为此而生。
此外,新增 prefetchInlining 配置,去年 Next 爆发致命漏洞,部分用户反馈升级到 Next 16 后,Vercel 托管经费暴涨,但性能不增反减,Next 团队用了大约半年终于上线了实验性 prefetchInlining 配置,fix 了这个隐形的经费性能杀手。
const nextConfig = {
experimental: {
prefetchInlining: true,
},
};
💡 前端信息差
🔗 React 其实没有发明 RSC
React 生态里常常出现一些让人头大的“新概念“,一位 Next 成员解释道,RSC 等概念并非 React 原创。
SSR(服务端渲染)类似于 Express,所以你无法访问到浏览器(客户端)的 window 对象。
RSC 类似于 Pug 模板引擎,所以你无法设置 onClick() 方法。
if name == "Pug"
button(class="btn") Hello Pug
else
button(class="btn") My name is #{name}
Hydration 类似于 jQuery,所以你使用 jQuery 也可能遭遇水合错误。
从概念上讲,这些新概念只是新瓶装旧酒,把旧概念在 React 生态里重新发明了一遍,关键在于透过现象看本质。
🔗 light-dark() 或将支持图像
CSS light-dark() 函数常用于深浅主题,但目前它只适用颜色切换。
有时我们还想根据深浅主题,自动应用对应风格的 Logo 或背景图片等,这需要借助下列代码:
:root {
--bg-image: url(light-pattern.png);
}
@media (prefers-color-scheme: dark) {
:root {
--bg-image: url(dark-pattern.png);
}
}
.element {
background-image: var(--bg-image);
}
这种方案的问题在于图片的设置分散,不利于代码维护,而且只支持全局的 prefers-color-scheme。
现在,light-dark() 函数有新进展,或将支持图片切换亮暗模式:
.element {
color-scheme: dark;
background-image: light-dark(url(light-pattern.png), url(dark-pattern.png));
}
这种方案可以在统一位置设置图片,而且支持局部的 color-scheme。
🛠️ 工具推荐
最后分享一个关于 JS Date 的问答网站:🔗 JS Date WTF。
这个网站里大约有 30 道选择题,你可以自己动手刷刷看,学习一下 Date 的各种怪癖或极端情况,网站会根据你的回答进一步解释。
相信大家搞懂了 Date 的设计屎山之后,对比学习 JS 新出的 Temporal API 时,一定会事半功倍。
🙏 特别鸣谢
以上就是本期《Web 周刊》的全部内容了,希望对你有所帮助。
👍 感谢大家按赞跟转发分享本文,你的手动支持是我持续更新的最大动力。
😘 已经关注我的粉丝们,我们下期再见啦,掰掰~~