Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除源文件后,Node.js应用程序仍能正常工作_Javascript_Node.js_Caching - Fatal编程技术网

Javascript 删除源文件后,Node.js应用程序仍能正常工作

Javascript 删除源文件后,Node.js应用程序仍能正常工作,javascript,node.js,caching,Javascript,Node.js,Caching,我有一个Node.js应用程序,即使我从计算机上完全删除它的源文件,它也可以工作 怎么可能呢 我听说Node.js应用程序会自动缓存源文件以提高工作效率 这是否意味着这些文件仍然存在于某个地方?尽管JavaScript是一种解释语言,node.js还是会将源文件编译成本机代码。一旦启动了应用程序,就可以删除JavaScript文件,并且它将继续运行,因为代码已经编译完毕 以下是Wikipedia关于node的v8引擎的摘录,可以帮助您更好地了解正在发生的事情: V8将JavaScript编译为本

我有一个Node.js应用程序,即使我从计算机上完全删除它的源文件,它也可以工作

怎么可能呢

我听说Node.js应用程序会自动缓存源文件以提高工作效率


这是否意味着这些文件仍然存在于某个地方?

尽管JavaScript是一种解释语言,node.js还是会将源文件编译成本机代码。一旦启动了应用程序,就可以删除JavaScript文件,并且它将继续运行,因为代码已经编译完毕

以下是Wikipedia关于node的v8引擎的摘录,可以帮助您更好地了解正在发生的事情:

V8将JavaScript编译为本机机器代码IA-32、x86-64、ARM、, PowerPC、IBM s390或MIPS在执行它之前先执行ISAs,而不是更多 传统技术,如解释字节码或编译 将整个程序转换为机器代码,并从文件系统执行。这个 编译后的代码被额外优化和重新优化 基于代码执行的启发式,在运行时动态执行 轮廓使用的优化技术包括内联、省略 昂贵的运行时属性和内联缓存等

如David784所述:


可能值得注意的是,这种编译是根据需要在 原因例如,如果您有一个单独的require./other.js 对于回调,在此之前不会解释/编译other.js 调用回调函数


因此,一旦删除特定操作,应用程序可能会正常工作,但一旦使用了新的依赖项,node将无法找到应用程序文件,并将不可避免地崩溃。

不清楚您的意思。删除源时,节点应用程序当前是否正在运行?或者您是否删除并成功启动应用程序?node.js不会缓存源文件。一旦需要/导入它们,它就会对其进行解释。在典型的节点应用程序中,脚本不会被多次解释。即使你需要两次相同的JS文件,它也只会执行一次。大概你指的是在应用程序运行时能够删除源文件?这是因为Node使用JIT编译,JS被编译并加载到mem中,因此文件在执行过程中不会被锁定或使用……尝试重新设置应用程序,你会发现没有隐藏的缓存在运行:仅供参考,这与在windows上运行.exe应用程序,然后删除.exe没有什么不同,应用程序会继续运行。这是因为代码已经加载到内存中。因此,删除文件不会影响正在运行的应用程序。您甚至可以使用函数a{require'./something'.a=5;}和函数b{console.logrequire'./something'.}/{a:5}将任何require用作排序的本地存储,直到应用程序结束。值得注意的是,此编译是根据需要进行的。例如,如果回调中有一个require'./other.js',则在调用该回调之前不会解释/编译other.js。@David784很棒的一点。将该信息添加到主要答案中以获得可见性。