javascript - 如何计算 Node.js 包的加载时间损失?

标签 javascript node.js google-cloud-functions

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

到目前为止,我了解到冷启动的最大惩罚是使用 require 语句加载依赖项。作为一名软件工程师,科学思维告诉我,它将基于文件数量、文件大小、依赖项数量、缓存。然而,也许优化更多的是一门艺术而不是科学,因此我们非常感谢您根据自己的经验提供的任何指示或反馈。

我的问题是

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

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

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

最佳答案

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

对它进行基准测试没有问题(只需确保测量文件的第一个需求,因为模块已缓存)。

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

关于javascript - 如何计算 Node.js 包的加载时间损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50248097/

相关文章:

javascript - placeholder-not-working-for-internet-explorer 如果输入类型是密码,仍然显示 *********

node.js - 环回模型关系

node.js - Firebase 云功能不发送异步推送通知

javascript - 如何计算动态添加元素的类名

javascript - 为什么不是 Server.Transfer 为什么只有 Response.Redirect

javascript - Object.defineProperty 有时会抛出异常

node.js - Firebase 云函数本地代码更改未反射(reflect)在模拟器中

google-app-engine - 谷歌云功能 - AttributeError : 'module' object has no attribute 'DEFAULT_MAX_REDIRECTS'

javascript - 用于模拟 Google 服务 iframe 中按钮点击的 Bookmarklet

javascript - 一个 HTTP 请求和一条 WebSocket 消息,然后断开连接——网络上什么更昂贵?