【问题标题】:How do I calculate the load time penalty for Node.js package?如何计算 Node.js 包的加载时间损失?
【发布时间】:2018-05-09 07:45:21
【问题描述】:

为了提供一些背景信息,我有兴趣了解如何优化在 Google Cloud Function 上运行的 Node.js Express 应用程序的冷启动时间。

到目前为止,我了解到冷启动的最大损失是使用 require 语句加载依赖项。作为一名软件工程师,科学头脑告诉我它将基于文件的数量、文件的大小、依赖项的数量、缓存。但是,也许优化更像是一门艺术而不是科学,因此非常感谢您从自己的经验中获得的任何指示或反馈。

我的问题是

  1. 如果我用两个 process.hrtime() 语句包围 const x = require('x') 并测量时间差,我会测量“x”的整个包加载时间的加载时间吗?

  2. 如果是这样,这是否包括在此包中加载所有文件?这个包需要的依赖项怎么样——它们是什么时候加载的(这引出了我的第三个问题 3)。

  3. 如果 require 语句位于条件块内,例如if (condition) { const x = require('x'); },它在什么时候“加载”以及“加载”的真正含义是什么(即在内存中,解析,执行等)?它会在运行时到达(或未到达)语句的那一刻“加载”,还是无论程序何时开始执行都会发生require

【问题讨论】:

    标签: javascript node.js google-cloud-functions


    【解决方案1】:

    是的,require 只是一个普通函数,如果模块在内存中则返回,如果不在则加载它,这意味着读取文件,解析并执行它(当然它可能涉及要求其他依赖项)。

    对其进行基准测试没有问题(只要确保您测量文件的 first 要求,因为模块已缓存)。

    如果 require 在您的文件中但未执行(例如,因为它位于 if 语句的后面),则它不会比文件中没有更多的效果。并且在到达语句之前不会发生加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多