在 ES11 中使用 Dynamic Import 导入动态模块

阅读时长 3 分钟读完

什么是 Dynamic Import

Dynamic Import 是 ES11(也称为 ES2020)中的一个新功能,允许我们在运行时按需导入模块。在早期的 ES6 中,我们只能在静态导入期间指定需要导入的模块,但是在 Dynamic Import 中,我们可以根据需要延迟导入模块,直到本质上需要它们为止。

Dynamic Import 和静态导入的语法很相似,但有一个主要的区别是前者不是在加载时执行的。相反,它们返回一个 Promise,该 Promise 在解析完所需的依赖项后,才返回一个成功或失败值。

这个特性增强了应用程序的动态性,因为现在我们可以按需加载和执行代码,而不是在一开始就加载和执行所有代码。

如何使用 Dynamic Import

Dynamic Import 的语法非常简单,我们只需使用 import() 函数即可,它接受一个表示导入模块路径的字符串。下面是一个示例:

代码中的 import('./myModule.js') 表示我们想要延迟导入一个名为 myModule.js 的模块。.then() 中的 module 参数代表导入的模块,我们可以在其中执行所有操作。一个非常重要的点是,我们必须返回 import() 函数的 Promise 对象,以便在导入完成时捕获错误。

一些注意点:

  • 在浏览器中,我们需要所有的模块都支持模块系统,并使用一个 HTTP 服务器。文件协议不受支持。在 Node.js 12.0.0 及更高版本中,Dynamic Import 是原生支持的。

  • 在「阻止跨域访问」(CORS) 和 CSP 策略不允许情况下,我们不能使用 import() 函数,因为它们依赖于浏览器的动态脚本标签,这受到这些安全策略的限制。

Dynamic Import 的优势

Dynamic Import 的优势非常明显,它可以帮助我们更好地优化我们的应用程序。以下是一些例子:

  • 加载时间更快 - 通过按需加载模块,我们可以减少应用程序最初加载的大小,从而加快应用程序的加载时间。

  • 更少的内存使用 - 如果我们只在需要时加载模块,那么我们将避免在我们不需要的时间将其保存在内存中。

  • 更好的缓存控制 - 如果我们使用 Dynamic Import 按需加载应用程序,那么我们可以更好地控制缓存,使我们的应用程序更加高效。

示例代码

-- -------------------- ---- -------
-- ----------
----- -------- ------------ -
  ----- ------ - ----- ------------------------
  ------ -------
-

-- --------
------------------------ -- -
  -----------------
------------ -- -
  -----------------
---

在上面的代码片段中,我们创建了一个异步函数 loadModule(),用于加载一个名为 myModule.js 的模块。然后我们调用该函数并在返回的模块上调用 default() 函数。default() 函数是模块中我们想要执行的任何代码。

结论

在 ES11 中,Dynamic Import 带来了一个非常便利的特性,可以让我们更好地按需加载模块。它为设计更好且更高效的应用程序提供了输入点,因为我们可以根据需要延迟和控制加载时间和内存使用。但是,我们需要注意一些浏览器限制和安全策略,以避免在浏览器中出现问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6753a1d68bd460d3ada673d9

纠错
反馈