当前位置: 首页 > 知识库问答 >
问题:

在需要相同包的多个模块中组织代码是否会降低Node.js中的性能?

能文华
2023-03-14

我正在与Node.js和Puppeteer合作,我正在使用Puppeteer刮取多个网站。我正在考虑通过将每个站点实现分离到自己的文件来组织代码。所以我会有like example.com.js example2.com.js等

其中每一个将需要相同的模块(puppeteer/jsdom)并将导出一个包含变量和函数的对象。这样,我就可以在index.js文件中导入所有这些模块。

我读过关于Nodejs缓存模块的文章,而且这种代码组织方式是标准的,但是,在我的例子中,如果我有100个不同的网站想要删除,那么我将有100个模块需要在其中的每一个中(puppeteer/jsdom),所以如果Nodejs缓存这些模块,我仍然使用100个不同的变量来存储这些模块。

const puppeteer = require('puppeteer');

因此,我将在100个文件中包含这行代码,即使Nodejs缓存了Puppeteer模块,我仍然在创建100个Puppeteer变量,如果我将所有代码都写在一个文件中,我可能只创建一个变量。

我是不是漏了什么?

共有1个答案

潘自强
2023-03-14

从这里的官方文件

模块在第一次加载后缓存。这意味着(除其他外)对require(“foo”)的每次调用都将返回完全相同的对象,如果它将解析为相同的文件。

关于“NodeJS正在缓存Puppeteer模块”的说法是正确的,但“我仍在创建100个Puppeteer变量”不是正确的。所以,我会说,不要担心:),您可以继续在多个文件中组织您的代码。

 类似资料:
  • 问题内容: 这样做,即ConcurrentHashMap(所有非retreival操作,等)需要在被包裹块?我知道所有这些操作都是线程安全的,因此这样做有真正的好处/需要吗?使用的唯一操作是和。 问题答案: 不,这样做会失去您的利益。您也可以使用with 或锁定整个表(这是在中包装操作时要执行的操作,因为隐含的监视器是整个对象实例。) 目的是通过允许在表上进行并发读/写而不锁定整个表来提高并发代码

  • 问题内容: 最近,我碰上了这篇文章如何写在Node.js的一个单 我知道以下 状态的文档: 第一次加载模块后将对其进行缓存。多次调用可能不会导致模块代码多次执行。 因此,似乎每个需要的模块都可以轻松地用作单例,而无需单例样板代码。 题: 上面的文章是否提供了有关创建单例的解决方案? 问题答案: 这基本上与nodejs缓存有关。干净利落。 https://nodejs.org/api/modules

  • 问题内容: 我想在我的JavaScript代码中包含几个JSON文件,这些文件与JavaScript源文件位于同一目录中。 如果我想包含另一个JavaScript文件,可以直接使用。现在,我正在使用和获取JSON,我认为这是执行此操作的丑陋方法。 是否有类似的要求,使我能够加载JSON文件? 问题答案: 从节点v0.5.x开始,是的,您可以像需要js文件一样要求JSON。 在ES6中:

  • 问题内容: 当在之外使用Go模块(go版本> = 1.11)时,找不到在本地包中分解出某些代码的方法。 我没有导入任何需要包含在内的外部依赖项,我只是想在本地组织此Go模块的源代码。 文件: 该文件(假装为本地软件包): 文件(命令): 执行时: 如果是我,那么我明白了。 如果是我,那么我明白了。 如果我使用软件包别名,那么我会再次看到:。 我找不到使本地软件包与go模块一起使用的方法。 上面的代

  • 我们的redisson.yaml文件内容: 我们使用hibernate与postgresql数据库交互,它是我们的hibernate连接属性文件内容:

  • 问题内容: 我已经用Python编写了一个工作程序,该程序基本上可以解析一批二进制文件,然后将数据提取到数据结构中。每个文件大约需要一秒钟的时间来解析,这意味着数千个文件要花费数小时。我已经成功实现了线程解析的线程版本的批处理解析方法。我在100个具有不同线程数的文件上测试了该方法,并对每次运行进行了计时。结果如下(0个线程是指我的原始,预线程化代码,1个线程是指生成一个线程的新版本)。 尽管生成