如何望待 TC39 的挑案 Module Fragments?

日期:2021-08-05/ 分类:足球大赢家即时比分网

本文转载自微信公多号「勾勾的前端世界」,作者添班的打工人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` 注解片段。

举个例子,上代码:

// filename: app.js   // 定义一个模块 #count  module "#count" {   let i = 0;    // 模块导出一个函数   export function count() {     i++;     return i;   } }  // 定义另表一个模块 #uppercase module "#uppercase" {   // 导出一个函数   export function uppercase(string) {     return string.toUpperCase();   } }  // 导入模块,此处与 ES 标准化模块语法相反, import { count } from "#count"; import { uppercase } from "#uppercase";  console.log(count()); // 1 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,声援此挑案的给吾点赞走一波……

鸿蒙官方战略配相符共建——HarmonyOS技术社区