Node.js如何在运行时快速执行同步'require()'调用?使用Java,我们可以在执行之前使用像Maven这样的构建工具构建二进制文件。但是使用Node.js我们实际上没有构建工具,但是我们的Node.js代码中嵌入的CommonJS同步require()语句肯定必须是我们Node.js程序中最慢的代码行,但是它们如何运行考虑到他们正在运行时加载文件?
以下是有关CommonJS模块的一些信息: http://fredkschott.com/post/2014/06/require-and-the-module-system/
答案 0 :(得分:6)
以下几个原因导致require()
的性能在node.js程序中通常不是问题:
文件是从本地硬盘驱动器(相对较快)获取的,而不是通过互联网获取。并且,本地操作系统也有硬盘驱动器缓存,因此文件甚至可能不是来自硬盘驱动器,而是来自内存缓存。
当性能通常不是问题时,大多数模块在服务器启动时加载。在特定服务器请求期间加载新模块是很少见的,这通常是性能真正重要的地方。
模块被缓存,因此一旦加载任何模块,加载,解析和运行模块就已经被缓存,并且只是立即从缓存中返回。
V8相对较快。
也就是说,如果你在给定的http请求操作中运行了很多全新的require()
语句(新的语句使得模块没有被缓存),那么它会严重减慢对该请求的处理速度以及服务器的瞬时可扩展性。但是,因为你不能一遍又一遍地重复这个操作(因为一旦你的模块现在被缓存了,一旦你这样做了),它通常不会引起问题。
但是,为了获得良好的服务器响应时间,您可能不希望在服务器请求中第一次执行require()
。通常最好在服务器初始化时加载它,以便它被缓存或预加载,并且您不必使用您的一个node.js线程在服务器请求期间执行同步require()
。