与本机 Windows NPM/Yarn 处理相比,为什么 WSL 极其缓慢?

2024-04-23

我最近经常使用 WSL,因为我需要一些本机 UNIX 工具(并且模拟器还不够好)。我注意到使用 NPM/Yarn 时的速度差异令人难以置信。

我进行了一个简单的测试,证实了我的感受。测试正在运行npx create-react-app my-test-appWSL 结果是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 /CGit 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(使用前将#替换为@)

与本机 Windows NPM/Yarn 处理相比,为什么 WSL 极其缓慢? 的相关文章

随机推荐

  • Android NDK 链接问题

    我用 NDK 编译了 Sox 等 所以 我拥有所有 Android 友好的共享库 我制造了一个简单的测试文件 http pastebin com rniwQ7Gz它调用 sox 函数 NDK 构建告诉我 undefined referenc
  • 尝试以紧凑模式访问 UITextView 时 iMessage 扩展程序崩溃

    下面是我在 iMessage 应用程序中的完整代码 class MessagesViewController MSMessagesAppViewController IBOutlet weak var messageView UITextV
  • .net Web 应用程序中的异常处理

    我承认 我不关心太多的异常处理 我知道我应该做得更多 但我永远不知道从哪里开始和从哪里停止 我并不懒惰 离得很远 这是因为我对异常处理的矛盾心理感到过度紧张 即使是最小的应用程序中 似乎也有无数个地方可以应用异常处理 但它可能会让人感觉有点
  • Java 中对象序列化和压缩的性能成本

    应用程序不断接收名为Report并将对象放入Disruptor对于三个不同的消费者 在 Eclipse Memory Analysis 的帮助下 每个进程的 Retained Heap SizeReport对象平均为 20KB 该应用程序开
  • 使用 xslt 比较两个 xml 文件?

    我有 2 个 xml 文件 如何使用 xslt 比较两个文件是否相等 如果不等于意味着第二个 xml 中发生了更改 在 XPath 2 0 中你可以简单地使用fn deep equal http www w3 org TR 2005 CR
  • 检测用户何时点击 div 外部

    我正在向用户展示一个模式 灯箱 当用户单击按钮时 模式会显示 页面的其余部分会变暗 平常的东西 不过我想这样做 如果用户单击模式之外的任何元素 我希望模式消失并且页面恢复正常 如何才能做到这一点 我知道我可以为 body 设置一个 oncl
  • 分配不同价值对象的算法建议

    我有以下问题 给定 N 个对象 N 编辑 通过最公平的分配 我的意思是任何两个玩家获得的物体的价值之间的差异是最小的 另一个类似的情况是 我有N个不同价值的硬币 我需要将它们平均分配给M个玩家 有时他们并没有完全分开 我需要找到下一个最佳的
  • 为什么在 Chrome 中定位:粘性不起作用?

    你怎么获得position sticky在职的 我在 Chrome 26 0 1410 43 m 中尝试了以下操作 但它不起作用 thead position webkit sticky position moz sticky positi
  • $routeProvider 不适用于 html5Mode

    我刚刚开始学习 AngularJs 并尝试使用 Angular 路由服务配置部分页面 它适用于哈希格式 但是 当我试图摆脱哈希时 routeProvider 停止工作 JS app config function routeProvider
  • 使用 JavaScript 创建 csv 文件

    有人可以解释一下是否有一种方法可以将 html5 本地存储数据转换为 csv 文件并将其存储在 ipad 中 我有一个带有一些文本字段的 html 页面 当用户单击提交按钮时 它会存储在 html5 本地存储中 然后我需要使用该数据创建一个
  • 了解 3NF:请用简单的英语

    我正在解决一个示例问题 其中我们试图确定以下哪些关系属于第三范式 3NF 以下是我们给出的关系 R1 ABCD ACD gt B AC gt D D gt C AC gt B R2 ABCD AB gt C ABD gt C ABC gt
  • 如何在不缩小的情况下构建 React 的生产版本?

    背景 我或多或少都在关注使用 React 设置本地开发环境的官方指南 https reactjs org tutorial tutorial html setup option 2 local development environment
  • 将新行添加到控制台输出

    在控制台应用程序中 我们将语句写为 Console WriteLine the addition is 0 i 它给出了输出 加法是50 现在我的问题是 我希望答案如下所示 加法是 50 我如何将输出分配给下一行 Console Write
  • 如何使用 Selenium WebDriver 和 Java 单击按钮?

    以下是按钮的 HTML 代码 span span
  • 什么是沙箱?

    我已阅读维基百科文章 http en wikipedia org wiki Sandbox software development 但我不太确定这意味着什么 以及它与版本控制 如果有人可以用非常简单的术语解释什么是沙箱 那将会很有帮助 A
  • 在 WordPress 中查找当前页码

    我在我的 WordPress 模板中添加了以下自定义循环 args array category not in gt array featured cat gt term id posts per page gt 10 post not i
  • 如何找到UITableViewCell的ViewController?

    我需要参考ViewController from a UITableViewCell以显示UIAlertController来自外部班级 我怎样才能找到该参考文献 你可以获得一个实例UIViewController from UITable
  • 适用于 neovim / vim8 的 C# LSP 自动完成客户端

    我尝试了多种方法来使其发挥作用 但似乎没有简单的方法 是的 有大量的插件和配置 但截至 2019 年 10 月 它们无法正常工作 OmniSharp Vim https github com OmniSharp omnisharp vim客
  • 如果在为 MVC 4 设置依赖项解析器之前使用验证,简单注入器会失败

    我们有一个基于 ASP NET MVC 4 的应用程序 该应用程序已有几年历史 我正在努力消除它的一些技术债务 我正在做的事情之一是引入依赖注入 以便我们可以更好地将业务逻辑与数据访问实现分开 并减少编写隔离单元测试的痛苦 我使用了简单注射
  • 与本机 Windows NPM/Yarn 处理相比,为什么 WSL 极其缓慢?

    我最近经常使用 WSL 因为我需要一些本机 UNIX 工具 并且模拟器还不够好 我注意到使用 NPM Yarn 时的速度差异令人难以置信 我进行了一个简单的测试 证实了我的感受 测试正在运行npx create react app my t