You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Intel MacBook Pro上Laravel Sail运行缓慢,求优化及替代方案

Laravel Sail 请求缓慢优化方案与工具选择建议

问题背景

本地开发使用Laravel Sail时,每次请求耗时2-3秒,提供的docker-compose.yml配置如下:

# For more information: https://laravel.com/docs/sail
version: '3'
services:
    laravel.test:
        build:
            context: ./docker/8.2
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.2/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${HMR_PORT:-8080}:8080'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html:cached'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
    mysql:
        platform: linux/x86_64
        image: 'mysql:5.7'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: "%"
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sail-mysql:/var/lib/mysql:cached'
            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh:cached'
        networks:
            - sail
        healthcheck:
            test: [ "CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}" ]
            retries: 3
            timeout: 5s

    soketi:
        image: 'quay.io/soketi/soketi:latest-16-alpine'
        environment:
            SOKETI_DEBUG: '1'
            SOKETI_METRICS_SERVER_PORT: '9601'
        ports:
            - '${SOKETI_PORT:-6001}:6001'
            - '${SOKETI_METRICS_SERVER_PORT:-9601}:9601'
        networks:
            - sail


    
networks:
    sail:
        driver: bridge
volumes:
    sail-mysql:
        driver: local
    sail-redis:
        driver: local

一、Sail 性能优化方案

1. 调整文件挂载策略

将Laravel容器的挂载规则从:cached改为:delegated(更适合macOS/Windows开发场景,降低宿主机与容器的文件同步开销):

volumes:
    - '.:/var/www/html:delegated'

2. 禁用不必要的服务

如果当前开发不依赖Soketi,直接注释掉该服务以减少资源占用:

#    soketi:
#        image: 'quay.io/soketi/soketi:latest-16-alpine'
#        environment:
#            SOKETI_DEBUG: '1'
#            SOKETI_METRICS_SERVER_PORT: '9601'
#        ports:
#            - '${SOKETI_PORT:-6001}:6001'
#            - '${SOKETI_METRICS_SERVER_PORT:-9601}:9601'
#        networks:
#            - sail

3. 优化MySQL配置

  • 升级MySQL版本:将mysql:5.7替换为mysql:8.0(性能更优),ARM架构设备保留platform: linux/x86_64参数。
  • 添加性能优化指令:在MySQL服务中加入command参数调整内存与缓存:
mysql:
    # 其他配置不变
    command: --default-authentication-plugin=mysql_native_password --innodb_buffer_pool_size=256M --query_cache_type=1 --query_cache_size=64M

可根据自身内存情况调整innodb_buffer_pool_size(建议设为系统内存的1/4)。

4. 关闭Xdebug(调试时再开启)

确保.env中配置SAIL_XDEBUG_MODE=off,Xdebug会大幅拖慢请求速度,仅在调试场景启用。

5. 启用OPcache

在Sail的PHP配置文件(docker/8.2/php.ini)中添加或修改OPcache配置:

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

OPcache会缓存编译后的PHP脚本,减少重复编译开销。

6. 切换缓存与会话驱动至Redis

在Laravel的.env中配置:

CACHE_DRIVER=redis
SESSION_DRIVER=redis

Redis性能远优于文件缓存,可减少数据库查询与文件IO消耗。

二、是否需要切换到Valet或Homestead?

  • Valet:适合个人轻量开发,无需Docker,性能接近原生PHP环境,配置简单,macOS用户友好。如果不需要多环境隔离(如不同PHP版本),Valet速度会显著快于Sail。
  • Homestead:基于Vagrant的虚拟机,性能介于Sail与Valet之间,适合需要完整Linux环境的场景,但配置与启动效率不如Valet。
  • 切换建议:先尝试上述Sail优化方案,若速度仍未达标再考虑切换。Sail的核心优势是环境一致性(与生产环境对齐),团队协作场景优先优化Sail;个人开发追求极致速度,Valet是更优选择。

内容的提问来源于stack exchange,提问作者arya_la

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:55:41