一尘不染

延迟加载node.js

node.js

我想知道require()在node.js中使用是否等效于延迟加载?

例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好require()在该函数内部使用它,以便仅在调用该函数时才包含所需的包。

我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I
/ O吗,还是将其添加到内存中?

如果是这种情况,我应该走多远,我应该尝试编写尽可能多的代码来编写node.js包吗?


阅读 413

收藏
2020-07-07

共1个答案

一尘不染

require()正在按需加载。加载模块后,如果再次运行require()调用,则不会重新加载模块。通过将其放入函数而不是顶层模块代码中,可以延迟其加载,或者如果您从未实际调用该函数,则可以避免加载。但是,由于require()是同步的并从磁盘加载模块,因此最佳实践是在应用程序启动服务请求之前先加载应用程序启动时需要的任何模块,然后确保在应用程序运行时仅发生异步IO。

节点是单线程的,因此加载模块的内存占用不是按连接进行的,而是按进程进行的。一次性加载模块即可将其存入内存。

只需遵守此处的约定,并在开始处理请求之前在应用程序的顶级范围内需要您需要的模块。我认为这是一种情况,如果您必须询问是否需要以一种不寻常的方式编写代码,那么就不需要以一种不寻常的方式编写代码。

2020-07-07