首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么与本地Windows NPM/纱线处理相比,WSL非常慢?

为什么与本地Windows NPM/纱线处理相比,WSL非常慢?
EN

Stack Overflow用户
提问于 2021-08-29 11:29:59
回答 2查看 46.8K关注 0票数 59

最近我经常使用WSL,因为我需要一些本地UNIX工具(而且模拟器不够好)。我注意到,与NPM/纱线工作时的速度差异是难以置信的。

我做了一个简单的测试来证实我的感受。测试正在运行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 Core(s),16个逻辑处理器
  • 我正在运行Windows 11,并对系统和WSL进行了所有最新更新。所选系统为Ubuntu 20.04
  • 我看到了一些类似于在Windows上“'npm安装”非常慢的问题,但它们根本不涉及WSL (而且我的纯Windows运行得很快)。
  • 这个问题不仅限于NPM,也适用于纱线
  • 我遇到的另一个问题是文件监视没有发生(我需要在每次更改后重新启动服务器)。在某些应用程序中,我没有任何错误,有时我得到以下信息: Watchpack错误(初始扫描):错误: EACCES:权限被拒绝,lstat '/mnt/c/DumpStack.log.tmp‘Watchpack错误(初始扫描):错误: EACCES:许可被拒绝,lstat '/mnt/c/hiberfil.sys’Watchpack错误(初始扫描):Error: EACCES:许可被拒绝,lstat '/mnt/c/pagefile.sys‘Watchpack错误(初始扫描):错误: EACCES:权限拒绝,lstat '/mnt/c/swapfile.sys’
  • 在一个空的(刚初始化的) npm start中,create-react-app需要很长时间才能在WSL浏览器中呈现某些内容,当从GitBash执行时,我可以在2-4秒内看到内容。
  • 有可能这纯粹是一个WSL问题,但使用NPM/Yarn时伤害最大
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-29 15:40:17

既然您提到在Git Bash中执行相同的文件(具有适当的性能),我将在这里做一个假设。如果我错了,请纠正我,我会删除答案,寻找另一种可能性。

如果您的文件存储在/mnt/c (a.k.a )上,这将得到解释(并且是预期的)。C:,或Git下的/C )或任何其他Windows驱动器,因为它们可能需要被Git访问。

WSL2使用9P协议访问Windows驱动器,目前所知的访问速度非常慢:

  • 原生NTFS (显然)
  • ext4在WSL2使用的虚拟磁盘上的文件系统
  • 甚至是Windows驱动下的WSL1的性能

我看到了一个大型回购系统()的git clone,在WSL2驱动器上WSL2只需8分钟,而根文件系统只需几秒钟。

有两种可能性:

  • 如果可能(对于大多数节点项目也是如此),使用wsl --set-version <distroname> 1将您的WSL转换为版本1。我总是建议先使用wsl --export进行备份。 而且,由于您正在进行备份,所以您最好通过wsl --import将备份作为--version 1 (作为最后一个参数)来创建实例的副本。WSL1和WSL2都有它们的用途,您可能会发现将两者保持在一起是有帮助的。 有关确切语法的更多细节,请参见这个答案
  • 或者将项目移到WSL根目录下的某个地方,比如/home/username/src/
票数 63
EN

Stack Overflow用户

发布于 2021-11-15 01:59:05

建立在@notthedr01ds的回应之上。

如果你看一下微软的WSL 1和WSL 2的比较,“跨操作系统的性能”在WSL2中会明显更差。

我的案子落入了使用WSL 1而不是WSL 2的例外情况

  • 您的项目文件必须存储在Windows文件系统中。WSL 1可以更快地访问从Windows挂载的文件。
    • 如果您将使用您的WSL Linux发行版访问Windows文件系统上的项目文件,并且这些文件不能存储在Linux文件系统上,则使用WSL 1将在操作系统文件系统中获得更快的性能。

这意味着我需要切换到版本1。

代码语言:javascript
复制
wsl --set-version Ubuntu 1
Conversion in progress, this may take a few minutes...
Conversion complete.

试验前

代码语言:javascript
复制
>time git status
...
real    0m6.436s
user    0m0.055s
sys     0m36.380s

后测

代码语言:javascript
复制
> time git status
...
real    0m0.126s
user    0m0.016s
sys     0m0.641s
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68972448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档