performance - 为什么从网络驱动器加载猫鼬包非常慢?
问题描述
当启动存储在我的网络驱动器上的 NodeJS 应用程序时,它需要猫鼬(也在同一网络驱动器上的 node_modules 中),应用程序启动大约需要 15-20 秒。(本地驱动器上的测试应用程序加载猫鼬要快得多。)我的网络驱动器位于 100Mbit 有线以太网网络上,每次测试的实际传输速度约为 80Mbit。Mongoose 包本身只有大约 1.75MB。它是否严重加载了 150MB 的其他模块?还是我可以调整或改进的其他事情?
感谢您的任何提示。
解决方案
当跨网络工作时,通常不是带宽而是延迟是瓶颈。
NodeJS,由于它的模块化特性,本质上是文件系统重的;一个典型的node_modules
文件夹可以包含数千个小.js
文件,访问它们需要多次往返文件系统,而且速度可能非常慢。
要仅加载依赖项,需要访问mongoose
452 个文件。.js
此外,NodeJS 在搜索.js
文件时使用启发式算法,因为可以通过不同的方式构建 Node 项目。这需要在读取特定文件之前首先列出一个目录(因此每个文件需要额外的一两次往返)。
为了感受它,例如尝试通过网络复制 1,000 个小文件。平均吞吐量将远低于单个大文件。
推荐阅读
- visual-studio - 如何从 TFS Checkin 隐藏敏感信息
- discord - 反应中的角色
- scala - 为实现通用 Trait 的案例类创建 DataSet
- linux-kernel - 我们如何从内核驱动程序中识别缓冲区属于用户空间或内核空间
- r - R:在绘图区域之外添加文本(字段)
- sql - 如何在全文查询中识别哪个词是命中的?
- php - 在 PHP 中按大小搜索查询
- swift - 为什么我不能在带有 Vapor 4 的自定义控制器中使用过滤器?
- nim-lang - 如何在 nim 中按键对 CountTable 进行排序?
- c# - 使用 12 小时制将日期时间值转换为时间