解决 Windows 系统使用 Homestead 运行 Laravel 本地项目响应缓慢问题
169

注意: 此方法可能带来未知副作用,请操作之前务必备份原配置文件!!

使用 win7 电脑学习第二本教程,发现项目运行起来切换页面每次都要 7-10 s,很不正常啊,部署到服务器发现加载仅需要 200 ms 左右。
file

尝试过增加虚拟机配置, 但是没有任何效果, 经过验证也不是数据库的原因,通过网上查询了解到, 是因为 VirtualBox 的 IO 引起的。

解决方案是安装NFS Plugin参考文章(英文)

英文不好的小伙伴接着看 ~

首先,命令行进入 Homestead 启动 vagrant

> cd ~/Homestead && vagrant up

然后运行安装命令

$ vagrant plugin install vagrant-winnfsd

file

如上图,安装成功后修改配置文件

修改配置文件前建议先备份,以免修改后出现问题!

文件1:homestead/scripts/homestead.rb

# Register All Of The Configured Shared Folders
if settings.include? 'folders'
    settings["folders"].each do |folder|
        if File.exists? File.expand_path(folder["map"])
            mount_opts = []

            if (folder["type"] == "nfs")
                mount_opts = folder["mount_options"] ? folder["mount_options"] : ['actimeo=1', 'nolock']
            elsif (folder["type"] == "smb")
                mount_opts = folder["mount_options"] ? folder["mount_options"] : ['vers=3.02', 'mfsymlinks']
            end

            # For b/w compatibility keep separate 'mount_opts', but merge with options
            options = (folder["options"] || {}).merge({ mount_options: mount_opts })

            # Double-splat (**) operator only works with symbol keys, so convert
            options.keys.each{|k| options[k.to_sym] = options.delete(k) }

            config.vm.synced_folder folder["map"], folder["to"], type: folder["type"] ||= nil, **options

            # Bindfs support to fix shared folder (NFS) permission issue on Mac
            if Vagrant.has_plugin?("vagrant-bindfs")
                config.bindfs.bind_folder folder["to"], folder["to"]
            end
        else
            config.vm.provision "shell" do |s|
                s.inline = ">&2 echo \"Unable to mount one of your folders. Please check your folders in Homestead.yaml\""
            end
        end
    end
end

查找此段代码(可能略有不同),替换为以下内容

if settings.include? 'folders'
  settings["folders"].sort! { |a,b| a["map"].length <=> b["map"].length }

  settings["folders"].each do |folder|
    config.vm.synced_folder folder["map"], folder["to"], 
    id: folder["map"],
    :nfs => true,
    :mount_options => ['nolock,vers=3,udp,noatime']
  end
end

文件2:Homestead.yaml

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      type: nfs

重启 Homestead 使配置文件生效,大功告成。再次运行项目响应时间已经正常了,希望帮助有相同情况的小伙伴!
file

本帖由 Summer 于 6个月前 加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 71
Toiu

看到立马就搞了下, 效果还是可以的 不过我原来没那么慢 之前普通页面 2秒 左右的响应时间, 安装后基本在1秒左右 效果还不错.

6个月前
Yvan

@刘滔 哈哈,我的原来最慢的时候 十二秒。。。慢的吓人

6个月前
Toiu

@Yvan 现在好咯 再也不会被无数次的零零碎碎的等待消磨生命了... 点赞

6个月前
Summer

已经增加至文档里 —— Windows 下的 Homestead 开发环境搭建

6个月前
Yvan

@Summer 感谢龙哥 :smiling_imp: 第二本教程学习一半了,真心强大,干货满满!期待你的安卓和IOS开发 ~

6个月前
黑将军

666,加载速度果然快很多

6个月前
Yvan

@黑将军 哈哈,也看下这样配置之后会不会有其他影响,目前我这边是一切正常!

6个月前
黑将军

@Yvan 目前好像没啥影响,一切正常,赞 :+1:

6个月前
Toiu

@黑将军
@Yvan 好气哦~ 你们都没事, 我这 storage 软链的图片就加载不了

6个月前
Yvan

@Toiu 文件夹权限问题? sudo chmod -R 775 storage/

6个月前
Toiu

@Yvan 看过了 是777的 我配置退回去原来的 重启又好了, 再搞过来 重启, 又挂了~

6个月前
Yvan

@Toiu laravel中通过url访问存储在storage下面的图片 ,或者搜索下,我直接存了张图片到这个文件夹好像也无法读取

6个月前
Toiu

我用软链的 而且 在正常模式下是可以访问到的, 应该不是路径的问题, 可能是配置中某种高端问题:smile:

6个月前
黑将军

@Toiu 我没有用软链,没发现这个问题 :joy:

6个月前
lmaster

@Yvan 兄弟,这个你是怎么发现的,能否给下你的思路,我觉得这个才是重点(最好是那种流水式小说体,比如:今天我搭建Homestead 跑了下larabbs发现页面加载很慢 1s-2s,但是在服务器上很快<80ms,我的电脑也是i7-7xxxK,性能也不输服务器的,但是我的系统是win10,难道是这个问题。。。。。。编不下去了)。兄弟,真的想知道,每次遇到这种奇奇怪怪的东西,你们是怎么想的,然后去怎么搜索答案,我们这类萌新该怎么做,要学什么。望大手给个思路啊

6个月前
Yvan

@lmaster 我也是萌新…… 学习 laravel 还不到 2 个月呢!很多东西还不理解,只是感觉如果项目在开发者的电脑上都不能流畅运行,那将来面对更低配的普通用户,体验是要多糟糕。然后部署上线(阿里云低配 ECS 服务器),发现页面加载时间仅仅200毫秒左右,这就证明了代码没问题,问题出在本地环境,家里使用 iMac 并没有出现这种情况,但在公司的 win 系统这么慢,然后就去度娘(英文太渣谷歌有压力啊)搜索 win系统运行laravel页面加载缓慢、 win7 Homestead 运行 laravel 页面加载缓慢 等等关键词去搜索,会有很多相关文章,多看几篇找到最普遍的解决方案,然后去亲自测试,备份好之前的文件,然后就折腾吧 ~ 问答区置顶文章 断言:不懂《提问的智慧》的人不会从初级程序员水平毕业 对我启发很大,强烈建议阅读 《提问的智慧》原文,解决问题的过程也是学习的过程,加油、共勉!也希望自己能在 2018 年转行进入 IT 行业!

6个月前

你好,为什么我安装后更改完文件 vagrant reload 重启后提示

Path D:/Code with path alias /D/Code already known

我忽略这个提示进入虚拟机后,cd Code/ 后虚拟机就会卡住

文件 homestead/scripts/homestead.rb:

if settings.include? 'folders'
  settings["folders"].sort! { |a,b| a["map"].length <=> b["map"].length }

  settings["folders"].each do |folder|
    config.vm.synced_folder folder["map"], folder["to"], 
    id: folder["map"],
    :nfs => true,
    :mount_options => ['nolock,vers=3,udp,noatime']
  end
end

文件 Homestead.yaml:

folders:
    - map: D:/Code
      to: /home/vagrant/Code
      type: nfs
6个月前
Yvan

@sayhe110 不应该是 cd ~/Code 吗?

6个月前

@Yvan 我虚拟机启动后目录是 ~ 所以我直接 cd /Code 了,,,现在虚拟机就是会一直卡,这是咋回事

6个月前
Yvan

@sayhe110 我也是萌新…… 搞不懂了 :joy:

6个月前

@Summer 老大,

根据这个优化流程走了一遍反馈下我这边出现的已知问题:

首先页面加载确实比未优化前快很多,原先1-2S,现在已经降到80ms左右 :metal: ,但是严重的副作用是 browserSync 的同步刷新出现了严重的迟滞,会产生不定期的迟滞,经常要过5-6s才会反应过来并刷新 :rage:,我这边webpack.mix.js的代码配置如下:

mix.js('resources/assets/js/app.js' , 'public/js')
    .sass('resources/assets/sass/app.scss' , 'public/css')
 mix.browserSync({
    host : '192.168.10.10' ,
    proxy : 'larabbs.test' ,   
    open : false ,
    files : [
        'app/**/*.php',
        'resources/views/**/*.php',
        'public/js/*.js',
        'public/css/*.css'
    ] ,
    watchOptions : {
        usePolling : true ,
        interval : 500
    }
});

经过多次尝试,发现只有不对文件:homestead/scripts/homestead.rb 文件进行修改,才能让 browserSync 恢复正常反应,但是页面的加载速度会保持在500ms左右,是否有两全其美的解决办法??

6个月前

WIN10本地开发 homestead真的慢的要死要死的, 这个用用看会快多少。

6个月前
Yvan

@Teles 记得备份,原来的配置文件~ 不知道会不会带来一些副作用。win 系统的坑好多啊,Mac 上就不用这样!

6个月前

@Yvan 没事没事,,你已经很厉害了

6个月前

file

这个问题....有遇到过的吗

6个月前

install 被墙了怎么办?

Installing the 'vagrant-winnfsd' plugin. This can take a few minutes...
Vagrant failed to load a configured plugin source. This can be caused
by a variety of issues including: transient connectivity issues, proxy
filtering rejecting access to a configured plugin source, or a configured
plugin source not responding correctly. Please review the error message
below to help resolve the issue:

  Errno::ECONNRESET: An existing connection was forcibly closed by the remote host. - SSL_connect (https://gems.hashicorp.com/specs.4.8.gz)

Source: https://gems.hashicorp.com/
6个月前
韩槑槑

我每次composer require都会都会报同样的错误,只有将vendor删除之后使用install才能恢复正常。
file
通过google搜索答案,发现另一个国外论坛这样解释(地址
file
从图中可以知道通过nfs会导致composr出现问题,虽然是一年前的回答,还是希望知道我这个错误到底是为什么
(VirtualBox 5.2.8, vagrant 2.0.2)

6个月前

用了一段时间,发现webpack打包有时候会失败

6个月前

设置后每页总响应时间从600ms下降到470ms,还是有些作用,但不是特别明显

6个月前
leung0826

file
被强了怎么办?
试试这个
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.org/

6个月前

赞一个,以前也用 Homestead 觉得响应很慢,现在用 docker 了,建议用 docker,速度更快!

6个月前
Toiu

@Yvan 后来发现并不是这里的坑. 删掉软链重新生成就好了 估计是修改之后映射的路径有不同的原因把~

6个月前
Yvan

@Toiu 问题解决了太好了~ 我还在担心这种方式会不会带来严重的副作用 ,哈哈!

6个月前
Toiu

@Yvan 当时脑袋抽了居然没想到是软链的问题, 就没使用了, 前两天突然闪过这个念头 试了一下 果然正常了.

6个月前

@雷 已经解决了,原因是因为被墙了

6个月前

发现一个副作用,优化之后 npm run dev 和 npm run watch-poll 有几率报错,大致原因是没有操作权限,而且sass的响应速度变得非常慢。

6个月前

@Yvan 刚试过了,还是不行呀。yarn install --no-bin-links 这步编译就过不了,也是说权限问题,无法rm和cp,我使用sudo yarn install --no-bin-links才勉强通过编译,然后 npm run dev 和 npm run watch-poll 就会出现不稳定的故障,sass编译延迟也非常缓慢。把优化去掉就没这些问题了。

6个月前

@sayhe110 你这个问题最后是如何解决的,没查到相关。早上来一直卡的不行,然后用了重启大法又可以了

6个月前

@Leon1993 没有搞好,卡了的话我也是重启 :sweat:

6个月前
Toiu

@纸牌屋弗兰克 docker在window环境下好用吗 比如win7

6个月前
Toiu

@纸牌屋弗兰克 多谢推荐

6个月前

@sayhe110 我把原来改的配置还原了之后现在正常了

6个月前

@sayhe110 cd /Code指的是进入根目录的Code目录,你要把/去掉,在~目录下面cd Code就相当于在任何目录cd ~/Code

5个月前

感谢

5个月前
leung0826

@纸牌屋弗兰克 win10 for docker 也有运行慢,同样的问题

5个月前

@leung0826 总要比 Homestead 要快很多吧

5个月前
followyounger

file
win10 总是报错,我也没有解决好。。所以放弃了

5个月前
followyounger

@followyounger

file
是插件,安装失败了

5个月前
followyounger

@followyounger 解决了,插件安装好了之后,就没有问题了。

5个月前

现在这个速度真的是超级快啊

4个月前

@纸牌屋弗兰克 你用 laradock 么??

3个月前

@Chasers9527 是啊,每天用

3个月前

Mac下也不快,有什么办法优化吗

3个月前

@纸牌屋弗兰克 我试了几次 然后放弃了,,,

3个月前

最近电脑出现了一系列的问题,重装系统过后开始配置Laravel环境,使用该方法进行加速过后刷新网页出现 502 BadGateWay 的情况,找了半天,终于找到了问题,总之来说只怪自己没细心看提示,如果出现一样问题的朋友,记得一定要运行:$ vagrant provision

file

3个月前

这个安装之后的确是快了很多,但是我发现这会导致yarn install --no-bin-links报错,本以为是其他原因,但是刚又故意测试了一下的确是因为安装了这个才会导致的,暂时还没找到解决办法,没有人和我遇到一样情况吗?

file

3个月前

有没有人和我一样,初次安装vagrant-winnfsd使用没有问题,隔天重新启动的时候就这样了?

file

2个月前

请教一下各位大大,怎么解决安装vagrant-winnfsd被墙问题?本机win10已经开了蓝灯~

2个月前

安装之后出现这个情况!

file

2个月前

file
file

使用nfs, 还想使用public_network, 有何解决办法

1个月前

@ghmaga 我也是这样 有什么解决办法吗?

1个月前

@leung0826 现在换域名了执行这个可以
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.com/

1个月前

@Carlgao 感谢 安装上了

1个月前

Mac 机器报错。

file

1个月前

@韩槑槑
虽然时隔很久,仍忍不住发问,这到底是什么原理,难道真是WIN 10坑?
昨天我也出现了composer安装第三方包失败,报错跟你一样,然后GOOGLE找到了跟你一样的论坛,最后把type:nfs删除就解决了。
不理解其原理,其二是没了nfs响应速度实在太慢了~

1个月前
韩槑槑

@zgy0777 不清楚诶,没了 nfs 慢就慢呗,反正也只是本地开发使用。

1个月前

感谢 @Carlgao 使用 vagrant plugin install vagrant-winnfsd --plugin-clean-sources --plugin-source https://gems.ruby-china.com/ ,解决了被墙问题,成功装上了

3周前

这样配置了之后,ssh上去,直接在终端打开共享目录还是很慢 = = 有没有遇到终端打开目录很慢的啊,习惯在终端直接调试,ls半天出不来很难受....

1周前

@Teles 并没有吧..我的目前很稳定

6天前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!