单核Windows 7机器上的Node.js电子应用程序在文件I/O上很慢
Node.js Electron Applications for Single Core Windows 7 machines are slow on file I/O
我正在一台单核windows 7机器上运行一个电子应用程序。似乎每当我使用fs库执行几乎任何文件I/O时,CPU在电子过程中峰值到100%,并且执行文件I/O可能需要长达一分钟的时间。
一个特别慢的函数是fs.readFileAsync()
。我正在读取的文件非常小,但是执行它似乎需要很长时间。
我也在双核的Windows 7、Windows 8.1、Windows 10和Ubuntu 15.10上运行了这段代码,这些操作系统都没有遇到这个问题,似乎只有单核的Windows 7机器才会出现这个问题。(所以我几乎肯定写的代码没有问题)。
有人知道为什么会发生这种情况吗?这个问题有什么解决办法吗?核的数量会影响电子应用程序的性能,这似乎很奇怪。同样,这只是Windows 7,所以单核Windows 8.1或Windows 10机器不会显示此行为。
Electron在主进程中不能很好地处理这样的任务。电子也不是多线程的。
即使你正在运行单核,我建议使用node的"child_process"在电子主进程之外运行文件读/写(或任何繁重的任务)。这应该可以解决应用程序中的任何奇怪的打嗝或口吃,并且通常可以加快速度。
还请记住,电子是基于chrome和节点是基于v8,这是chrome的核心。这些因素结合在一起,使得电子本质上是资源密集型的,而性能通常是电子的缺点。好处显然是能够快速创建跨平台应用。总的来说,1核机器可能不太适合运行1个电子应用程序,我们什么时候没有过1核机器?十年?
这让我想起了这个问题和我所见过的其他问题。
电子应用程序中的require("fs")
实际上并没有得到Node的fs
模块。它使用了Electron提供的另一个版本的fs
。Electron团队的建议是在执行文件操作时使用require("original-fs")
。
有一个开放的问题来记录这个:
Electron直接修改
fs
模块来支持ASAR文件,但是对于不需要ASAR支持的用例来说,这可能是一个性能负担,并且支持那些"原始的"用例。fs模块在require('original-fs')
下可用。
如果你遇到减速,我会尝试使用original-fs
。
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 将文件从应用程序文件夹复制到JQM/Phonegap应用程序中的根文件夹
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- 下载HTML5/Javascript MOBILE应用程序中的PDF文件
- 如何在dojo应用程序构建概要文件中加载json文件
- 如何从Node Webkit应用程序中退出外部CMD文件
- 访问离线jquery应用程序中的本地文件
- 使用angularjs和node.js时的Web应用程序文件夹结构
- 将Rails后端添加到JS/HTML/CSS应用程序时,正确的文件位置是什么
- Project和作为web应用程序发布的多个doGet()脚本文件——需要澄清
- 我如何知道js文件之间的javascript应用程序代码流
- 在Node Webkit应用程序中从DOM单击按钮时运行批处理文件
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- PHP文件没有't从Javascript应用程序获取$_POST
- 加载Js文件应用程序加载
- 在Windows Metro风格的Javascript应用程序中读取文件内容
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 如何打开文件对象(HTML)并在谷歌应用程序脚本中解析它
- 在另一个可浏览的应用程序中包含已绑定的文件
- TypeScript 1.8,多个.ts文件中的单个文件-应用程序结构