Laravel 8和Laravel Sail在Windows 10上的开发速度较慢。如何加速?

11

我该如何重新创建这个项目?

请参考Laravel 8文档Laravel Sail文档创建安装。

我使用sail up命令,这个命令非常好用。它可以构建docker容器,连接它们,并使得开发变得非常容易,特别是对于VSCode。虽然这样可以正常工作,但在WSL2上开发的速度较慢,比如像`sail npm run dev`这样的命令。有没有什么方法可以加快速度?

补充一下:相同的项目在同一台机器上运行至少快10倍。更多信息:我在Docker Desktop for Windows 10上使用i9-10900X处理器、32 GB内存进行测试。

docker-compose.yml

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.0
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.0/app
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${DB_PORT}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
    redis:
        image: 'redis:alpine'
        ports:
            - '${REDIS_PORT}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
    mailhog:
        image: 'mailhog/mailhog:latest'
        ports:
            - 1025:1025
            - 8025:8025
        networks:
            - sail
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local

2
可以确认在Mac上也非常慢! - Andre W.
2个回答

18

如果可能的话,建议使用WSL2来运行Docker。

  1. 安装DockerWSL2
  2. 通过在资源管理器中打开\\wsl$\并导航到您的虚拟机主目录(例如\\wsl$\Ubuntu-20.04\home\thomas)将项目移动到WSL中。

图片描述

  1. 从虚拟机中运行docker-compose up -dsail up

图片描述


我已经尝试解决权限问题,但仍然无法正常工作。看起来是不同的文件夹结构。顺便说一下:'code'目录默认是隐藏的。 - Bart
1
代码是我创建的一个目录。权限问题可以通过在docker-compose中定义用户和组来解决。如果您能指出具体出了什么问题,我可以尝试提供帮助。 - online Thomas
1
从15秒到29毫秒,哇!然而我面临着类似的问题,将代码移动到WSL中包括供应商代码会带来一些权限问题,这些问题可以通过777解决。删除供应商并执行composer install需要具备所有必需扩展的PHP,这违背了使用容器的目的(我猜?)。我有什么遗漏的吗,还是这是必要的恶? - gX.
1
@jeremy_nikolic 由于Linux和Windows权限已经存在一段时间,而且从来没有兼容过,所以我担心这是你需要自己解决的事情。问题是:你可以从WSL-OS(例如Ubuntu)运行命令,在此主机和容器之间共享用户,许多权限问题应该得到解决。 - online Thomas
1
@onlineThomas 感谢您的指导,我只需要执行'sudo chmod -R a+rwx /path/to/project',就可以在wsl虚拟目录上无问题地执行'sail up'命令了,我可以看到本地Web执行性能的显著提升。 - Kadaiser
显示剩余9条评论

2
我本来要解释这个问题,但你可以直接去这里阅读。这是帮助我的东西。当我在默认位置打开一个项目时,VSCode会提醒我并给我这个链接。https://learn.microsoft.com/en-us/windows/wsl/compare-versions 跨操作系统的文件系统性能
我们建议您不要在不同操作系统之间处理文件,除非您有特定的原因这样做。为了获得最快的性能速度,如果您在Linux命令行(Ubuntu、OpenSUSE等)中工作,请将文件存储在WSL文件系统中。如果您在Windows命令行(PowerShell、命令提示符)中工作,请将文件存储在Windows文件系统中。
例如,在存储WSL项目文件时:
- 使用Linux文件系统根目录:`\\wsl$\Ubuntu-18.04\home\<用户名>\Project` - 而不是Windows文件系统根目录:`C:\Users\<用户名>\Project`
所有当前正在运行的发行版(`wsl -l`)都可以通过网络连接访问。要进入其中一个,请运行一个命令[WIN+R](键盘快捷方式)或在文件资源管理器地址栏中输入`\\wsl$`以查找相应的发行版名称并访问其根文件系统。
您还可以在WSL的Linux终端中使用Windows命令。尝试打开一个Linux发行版(如Ubuntu),确保您在Linux home目录下,通过输入以下命令:`cd ~`。然后通过输入以下命令(不要忘记末尾的句点)在文件资源管理器中打开Linux文件系统:`powershell.exe /c start .`

谢谢Clement。我不知道我应该这样做。从现在开始我会这样做的。但愿我有你的OCR工具。 - charlyRoot
克莱门特没有做任何OCR转换,他只是从Microsoft Docs复制并粘贴了文本,并使用SO markdown格式化了它,您也可以这样做。我们永远不应该将文本、代码和错误作为图像发布,您可以在这里阅读相关信息 为什么不在提问时上传代码/错误的图像? - Christos Lytras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接