我最近经常使用 WSL,因为我需要一些本机 UNIX 工具(并且模拟器还不够好)。我注意到使用 NPM/Yarn 时的速度差异令人难以置信。
我进行了一个简单的测试,证实了我的感受。测试正在运行npx create-react-app my-test-app
WSL 结果是Done in 287.56s.
当 GitBash 完成时Done in 10.46s.
.
这并不是全部情况,因为两种情况下的感知时间都更长,但即使基于此 - 某个地方也存在一个大问题。我只是不知道在哪里。我正在从事的项目使用了数十个库,即使更改其中一个也需要几分钟而不是几秒钟。
这是我可以解决的问题吗?如果是这样——去哪里寻找线索?
附加信息:
-
我的处理器:AMD Ryzen 7 5800H 处理器,带 Radeon Graphics,3201 Mhz,8 核,16 个逻辑处理器
-
我运行的是 Windows 11,并且系统和 WSL 均已更新到最新版本。选择的系统是Ubuntu 20.04
-
我见过一些有点类似的问题“npm install”在 Windows 上非常慢 https://stackoverflow.com/questions/29395211/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 时它是最痛苦的
既然您提到从 Git Bash 中执行相同的文件(具有适当的性能),我将在这里做出一个假设。如果我错了,请纠正我,我会删除答案并寻找另一种可能性。
如果您的文件存储在/mnt/c
(又名C:
, or /C
Git Bash 下)或任何其他 Windows 驱动器,因为它们可能需要由 Git Bash 访问。
WSL2 uses the 9P protocol to access Windows drives, and it is currently (See Footnote) known to be very slow when compared to:
- 本机 NTFS(显然)
- WSL2 使用的虚拟磁盘上的 ext4 文件系统
- 甚至 WSL1 与 Windows 驱动器的性能
我见过一个git clone
大型存储库(WSL2 Linux 内核 Github)在 Windows 驱动器上的 WSL2 上需要 8 分钟,但在根文件系统上只需要几秒钟。
两种可能性:
-
如果可能(对于大多数 Node 项目来说),请将您的 WSL 转换为版本 1:wsl --set-version <distroname> 1
。我总是建议使用以下命令进行备份wsl --export
first.
既然你无论如何都要进行备份,你不妨创建一个copy实例的wsl --import
将您的备份设置为--version 1
(作为最后一个参数)。 WSL1 和 WSL2 都有其用途,您可能会发现保留两者很有帮助。
See 这个答案 https://stackoverflow.com/a/66067679/11810933有关确切语法的更多详细信息..
-
或者只是将项目移动到 WSL 根目录下的某个位置,例如/home/username/src/
.
Footnote:
根据最近的发展,这一领域可能有改善的希望。 9P 的补丁已在上游发布,据报道可显着提升性能。看这个 Github 线程评论 https://github.com/microsoft/WSL/discussions/9412#discussioncomment-5173052(和父线程)了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)