最近我经常使用WSL,因为我需要一些本地UNIX工具(模拟器还不够好)。我注意到使用NPM/Yarn时速度的差异是难以置信的。
我做了一个简单的测试来证实我的感觉,测试运行npx create-react-app my-test-app
,WSL结果是Done in 287.56s.
,而GitBash运行Done in 10.46s.
。
这并不是全部,因为在两种情况下,感知时间都更长,但即使基于此--也有一个大问题。我只是不知道在哪里。我正在做的项目使用了数十个库,即使修改其中一个也需要几分钟而不是几秒钟。
这是我能解决的问题吗?如果是的话-到哪里去寻找线索?
其他信息:
- 我的处理器:处理器AMD锐龙7 5800H,搭载Radeon显卡,3201 Mhz,8核,16颗逻辑处理器
- 我正在运行Windows 11,系统和WSL都有最新更新。选择的系统是Ubuntu 20.04
- 我见过一些类似于'npm install' extremely slow on Windows的问题,但它们根本没有触及WSL(我的纯Windows NPM工作得很快)。
- 这个问题不仅限于NPM,它也适用于Yarn
- 我遇到的另一个问题是文件监视没有发生(我需要在每次更改时重新启动服务器)。在一些应用程序中,我没有收到任何错误,有时我会收到以下错误:
Watchpack Error (initial scan): Error: EACCES: permission denied, lstat '/mnt/c/DumpStack.log.tmp'
Watchpack Error (initial scan): Error: EACCES: permission denied, lstat '/mnt/c/hiberfil.sys'
Watchpack Error (initial scan): Error: EACCES: permission denied, lstat '/mnt/c/pagefile.sys'
Watchpack Error (initial scan): Error: EACCES: permission denied, lstat '/mnt/c/swapfile.sys'
npm start
在一个空的(新初始化的)create-react-app
中需要很长时间才能在WSL的浏览器中呈现一些东西,当从GitBash执行时-我可以在2 - 4秒内看到东西- 有可能这纯粹是一个WSL问题,但它在使用NPM/Yarn时伤害最大
2条答案
按热度按时间a2mppw5e1#
既然你提到了在Git Bash中执行相同的文件(性能良好),我就在这里做一个假设,如果我错了,请纠正我,我会删除这个答案,并寻找其他可能性。
如果您的文件存储在
/mnt/c
(Git Bash下的C:
或/C
)或任何其他Windows驱动器上,这将得到解释(也是意料之中的),因为它们可能需要由Git Bash访问。WSL2使用9P协议来访问Windows驱动器,目前已知与以下设备相比,它 * 非常 * 慢:
我见过一个大型repo(WSL2 Linux内核Github)的
git clone
在Windows驱动器上的WSL2上需要8分钟,但在根文件系统上只需几秒钟。两种可能性:
wsl --set-version <distroname> 1
将您的WSL转换为版本1。既然你无论如何都要做一个备份,你也可以通过
wsl --import
把你的备份作为--version 1
(作为最后一个参数)来创建一个示例的副本。WSL1和WSL2都有它们的用途,你会发现保留它们是很有帮助的。有关确切语法的详细信息,请参见this answer。
/home/username/src/
。8xiog9wr2#
如果你看看微软的Comparing WSL 1 and WSL 2,"* 操作系统文件系统的性能 *"在WSL2中明显更差。
我的案例属于使用WSL 1而不是WSL 2的异常
这意味着我需要切换到版本1。
测试之前
之后测试