动态导入在node.js中有用吗?

问题描述 投票:0回答:1

我对 Node.js/express 相当陌生,到目前为止我真的很喜欢它。

我使用 ES6 语法进行导入。

当我开始我的项目时,我创建了这样的所有路线:

app.get("/getmenu", (req, res) => {
  import("./js/get/getmenu.js").then((result) => {
    result.getMenus(req).then((menu) => {
      res.json(menu);
    })
  });
});

getMenu() 函数中的所有逻辑和数据库调用(存储在 getmenu.js 文件中)。

它工作得很好,但是,现在我更好地了解了事情是如何工作的,我开始问自己动态导入在这种情况下是否有用?一般在节点中?

使用这样的东西不是更容易维护并且性能更高吗:

import {getMenuRoute} from "./routes/getmenuroute.js";
...
app.get("/getmenu", getMenuRoute);

getMenuRoute() 函数中的所有逻辑和数据库调用都在专用文件中。

据我了解,无论如何导入只进行一次。通过动态化它们,我只会加快服务器的启动速度?但是延迟对该路由的第一个请求?导入的函数存储在内存中的某个位置,我是否可以避免使用动态路由创建全局变量?有关系吗?

javascript node.js express routes ecmascript-6
1个回答
0
投票

...我开始问自己动态导入在这种情况下是否有用?

...

使用这样的东西不是更容易维护并且性能更高吗:

import {getMenuRoute} from "./routes/getmenuroute.js";
...
app.get("/getmenu", getMenuRoute);
With all the logic and database call in the getMenuRoute() function in the dedicated file.

这是一个观点问题,但在给定的示例中,我怀疑大多数人都会同意,不,动态

import
不会对你做任何有用的事情。

据我了解,无论如何导入都只进行一次。

对。

通过动态化它们,我只会加快服务器的启动速度?但延迟对该路由的第一个请求?

对。当您导入模块时,将执行该模块的顶级代码。如果您有足够的它们,则可以通过两种方式延迟服务器启动:

  1. 执行代码,并且
  2. 为代码创建的结构分配内存

...我是否可以避免使用动态路由创建全局变量?

不,在这两种情况下都不会创建全局变量。模块中的顶级标识符不是全局标识符。

一般在节点中?

一般来说它绝对有用:

  1. 如果您有数百甚至数千条路线,则在首次使用时动态导入它们可以减少服务器启动时间(正如您所说)。

  2. 如果您需要根据环境(开发、登台、生产、环境的其他特征)在不同的导入之间进行选择,动态导入对于仅导入您实际要运行的代码很有用,并且不是其他环境的代码。

© www.soinside.com 2019 - 2024. All rights reserved.