本文介绍了与本机Windows NPM/纱线处理相比,为什么WSL处理速度极慢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近经常使用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处理速度极慢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 09:26