在我学习的过程中,我发现许多开发人员在应用中使用了大量的软件包。我确信应用程序中不需要这些软件包的大部分功能。
太多的软件包是否会以类似于客户端多个javascript库的方式降低服务器性能?这是一个较小的或没有问题,因为每次新访问都没有下载软件包吗?
答案 0 :(得分:1)
仅仅因为node_modules中的文件系统上安装了一个模块并不意味着应用程序入口点的任何代码实际上都需要/导入它。
模块在导入时会被加载,这通常在开始时几乎全部被加载,尽管如果你愿意,你可以在某些情况下动态加载一些模块。
不,当然没有在每个请求上重新加载包。节点服务器保持运行,直到它崩溃或您停止它。每个请求都由同一个正在运行的服务器处理,并且已经加载了相同的模块集,除非请求导致它加载新模块,这是不寻常的。影响服务器性能的因素通常不是磁盘上的模块数量或大小,而是这些模块正在执行的实际活动。对于许多应用程序,大多数模块在提供请求时使用它们之前什么都不做,因此将100个模块加载到内存中或10个模块中,如果没有请求,它们仍然无效。
更多模块将在运行时使用更多内存。如果你有很多加载,理论上这可能会占用一个非常小的服务器上的内存,这会破坏性能。但它必须是资源非常少的服务器。
如果创建一个应用程序,即使1个模块正在忙于进行一些CPU密集型处理,或者1个模块正在执行同步IO任务,或者一个模块通过导致大量垃圾收集来破坏内存,那么这将阻止应用程序自单线程以来有效地处理请求。但是,如果你有一个模块行为不正常,这将是一个问题,而不是你的应用程序使用/加载了很多模块。绝大多数模块提供了一些不同步或CPU密集的小功能,因此拥有大量模块并不会真正增加出现行为不端模块的可能性。
然而,安装许多依赖模块可能需要几分钟时间。但是,如果您使用较新版本的npm并远离动力不足的服务器(如AWS的“免费”小型EC2实例),这通常不会成为问题。