问题描述
我最近经常使用WSL,因为我需要一些本地的Unix工具(而仿真器还不够好)。我注意到,与NPM/Yarn合作时,速度差异令人难以置信。我做了一个简单的测试,证实了我的感受。测试正在运行npx create-react-app my-test-app
,WSL结果为Done in 287.56s.
,而GitBash以Done in 10.46s.
结束。
这并不是全部情况,因为这两种情况下的感知时间都较高,但即使基于此,也存在一个大问题。我只是不知道在哪里。我正在处理的项目使用了数十个库,即使更改其中一个库也需要几分钟而不是几秒钟。
这是我可以解决的问题吗?如果是,从哪里寻找线索?
其他信息:
我的处理器:配备Radeon显卡的AMD Ryzen 7 5800H处理器,3201兆赫,8核,16个逻辑处理器
我运行的Windows 11包含系统和WSL的所有最新更新。选择的系统是Ubuntu 20.04
我看到了一些类似'npm install' extremely slow on Windows的问题,但它们根本不涉及WSL(而且我的纯Windows NPM运行得很快)。
这个问题不仅限于NPM,纱线也是如此
我遇到的另一个问题是没有进行文件监视(每次更改都需要重新启动服务器)。在某些应用程序中,我没有收到任何错误,有时我收到以下信息:
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时最疼
推荐答案
既然您提到在Git Bash中执行相同的文件(以适当的性能),我将在这里做一个假设。如果我在这个问题上错了,请纠正我,我将删除答案并寻找其他可能性。
如果您的文件存储在/mnt/c
(也就是C:
或/C
(在Git Bash下)或任何其他Windows驱动器,因为它们可能需要由Git Bash访问。WSL2使用9P协议访问Windows驱动器,目前已知与相比,它非常慢
- 本机NTFS(显然)
- WSL2使用的虚拟磁盘上的ext4文件系统
- 甚至使用Windows驱动器的WSL1的性能
我见过一个大型repo(WSL2 Linux内核Github)的git clone
在Windows驱动器上的WSL2上需要8分钟,但在根文件系统上只需要几秒钟。
两种可能性:
如果可能(大多数Node项目都是如此),使用
wsl --set-version <distroname> 1
将您的WSL转换为版本1。我始终建议先使用wsl --export
进行备份。既然您无论如何都要备份,那么您也可以通过
wsl --import
将您的备份设置为--version 1
(作为最后一个参数)来创建实例的副本。WSL1和WSL2都有其用途,您可能会发现将两者保留在一起会很有帮助。有关确切语法的更多详细信息,请参阅this answer
或将项目移至WSL根目录下的某个位置,如
/home/username/src/
。
这篇关于与本机Windows NPM/纱线处理相比,为什么WSL处理速度极慢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!