文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何看待 TC39 的提案 Module Fragments?

2024-12-03 00:37

关注

本文转载自微信公众号「勾勾的前端世界」,作者加班的打工人1234。转载本文请联系勾勾的前端世界公众号。

闲逛知乎的时候看到了这个问题,下面只有 2 个回答。贺师俊大佬竟然也关注了这个问题,于是......

以下是知乎原文,欢迎各位去知乎为俺三连:点赞、评论和收藏。

没人邀请,我来勇敢回答一把子这个问题。

首先来看下这个提案到底是什么。

JavaScript module fragments are a syntax for named, inline JS modules, which can be used for bundling multiple modules into a single JavaScript file.

直译一下,JS module fragments 是 JS 模块语法的一个提案,我们也可以叫它 “模块片段”,可用于在单个 JavaScript 文件中写多个模块代码。

简单来说,目前的 ES Modules 是以文件为单位划分的,而 TC39 这个提案的意思是可以更进一步,在同一个 JS 文件中,对代码进行模块的拆分,这有点类似于很多其它编程语言中的 `region` 注释片段。

举个例子,上代码:

  1. // filename: app.js  
  2.  
  3. // 定义一个模块 #count  
  4. module "#count" { 
  5.   let i = 0; 
  6.    // 模块导出一个函数 
  7.   export function count() { 
  8.     i++; 
  9.     return i; 
  10.   } 
  11.  
  12. // 定义另外一个模块 #uppercase 
  13. module "#uppercase" { 
  14.   // 导出一个函数 
  15.   export function uppercase(string) { 
  16.     return string.toUpperCase(); 
  17.   } 
  18.  
  19. // 导入模块,此处与 ES 标准化模块语法一致, 
  20. import { count } from "#count"
  21. import { uppercase } from "#uppercase"
  22.  
  23. console.log(count()); // 1 
  24. console.log(uppercase("daniel")); // "DANIEL" 

没错,这就是提案中的示例代码,我加了注释。

之所以有这样的提案,大家可以在提案中的动机中找到,大致可以总结为小文件在各类环境中的加载成本很高,并且需要借助其他打包工具。

截取一段,用我小学二年级的翻译水平来展示一下:

This proposal adds a syntax to JavaScript to allow for several JavaScript modules in one file. This format can be used as output by bundlers, with low overhead on execution, so that bundlers don't have to emulate as much, and JS engines can see what's going on. It's also convenient to be typed directly by JavaScript developers, and it should be low overhead to fit into existing workflows.

该提案为 JavaScript 增加了一种语法,该语法允许在一个文件中包含多个 JavaScript 模块。这种格式的模块可以被打包输出,以此降低执行成本,因此,传统意义上的打包工具就不再那么重要了,JS 引擎本身可以就可以完成这一系列工作,便于开发者可以直接使用原始的 JavaScript,而且这也很容易让其融入到现有的开发流程之中。

我个人是很支持这个提案的。

从根本上来讲,JavaScript 的诞生太过快速(“草率”),当时也没想到今天会有这么大的应用规模,所以很多高级特性并不完备。

历史上,JavaScript 一直没有模块系统,无法将一个大程序按照各自职责拆分成互相依赖的小模块,再用简单的方法拼装起来。这对构建复杂的大型应用形成了巨大障碍。

现在大家耳详能熟的 Webpack 就是为了更好的解决这一问题而诞生的,不过这一次,不再是社区方案或者工具,终于有人向语言标准下手了,试图从语言层面站出来彻底根治这个问题。

这一语法的出现,在现阶段最大的核心能力就是“模块打包相关”。在该提案的动机里有提到一个非常重要的点:“浏览器预判” ,即浏览器提前预判是否需要预先加载模块,这样一来,就能够区分模块是否需要被加载,从而有效提升加载性能。

当然,如果此提案能够被最终通过,也一定是渐进式的,至于能够释放多大的能量,就看各位大佬的聪明才智了。

xdm,支持此提案的给我点赞走一波……

 

来源:勾勾的前端世界内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯