Laravel 工匠优化最佳实践
Posted
技术标签:
【中文标题】Laravel 工匠优化最佳实践【英文标题】:Laravel artisan optimize Best Practices 【发布时间】:2015-10-31 23:14:23 【问题描述】:我正在尝试完全理解 Laravel (5.1) artisan optimize
命令和最佳实践,但似乎缺少文档。我没有在生产服务器上安装 Composer,所以具体来说,我想知道在必须推送到生产环境的开发中运行 artisan optimize --force
时修改或创建了哪些文件。目标是不要在生产中炸毁应用程序!运行命令后,我看到以下文件已被修改:
\bootstrap\cache\compiled.php
\vendor\composer\ - the entire directory
\vendor\autoload.php
我是不是想多了,还是我只是将这些文件推送到生产环境就可以了?此外,关于何时运行 artisan optimize
的最佳做法是什么?每次创建新模型时?那么控制器、路由和辅助类呢?
最后,我看到\bootstrap\cache\compiled.php
文件高达 548KB 和将近 17K 行!这真的被认为是最优的吗?
【问题讨论】:
您当然可以简单地将compiled.php 和vendor 文件夹推送到生产环境以便部署。实际上,与使用 composer/artisan 相比,这样做有一些优势,例如不依赖额外的 3rd 方服务器来部署您的应用程序。但我从未听说有人这样做,所以我不敢称其为“最佳实践”。 【参考方案1】:[编辑 - 正如@crishoj 所说,从 Laravel 5.5 开始,不再需要 php artisan optimize]
正常的 Laravel 实践是在你的生产服务器上安装 composer。
这些是Envoyer(由 Laravel 的创建者制作)在生产环境中部署应用程序的步骤——我在下面对它们进行了注释:
# Install application dependencies, such as the Laravel framework itself.
#
# If you run composer update in development and commit the `composer.lock`
# file to your repository, then `composer install` will install the exact
# same versions in production.
composer install --no-interaction
# Clear the old boostrap/cache/compiled.php
php artisan clear-compiled
# Recreate boostrap/cache/compiled.php
php artisan optimize
# Migrate any database changes
php artisan migrate
【讨论】:
composer install --no-interaction --no-dev 用于生产优化。 提供比数百个小文件更好的性能。在使用 APC 时,您有任何证据或基准吗?我不清楚它为什么会有所帮助。跨度> @Yehosef 只是个人经验;不过,这是一个微不足道的测试。只需在有和没有bootstrap\cache\compiled.php
的情况下为您的网站计时。请务必向我们提供您的新证据!我是基准测试的忠实拥护者——请参阅我的 Laravel 基准测试github.com/claar/laravel-benchmarks
现在我们还可以添加php artisan config:cache
和php artisan route:cache
,但是它们必须在服务器上运行,因为配置值链接到绝对路径,因此如果您在您的服务器上生成配置缓存,它们将无法工作dev 机器,然后复制到生产服务器。
不需要运行php artisan clear-compiled
,因为php artisan optimize
会覆盖compiled.php。【参考方案2】:
从Laravel 5.5 开始,不再需要php artisan optimize
。
【讨论】:
php artisan optimize:clear
用于清除缓存仍然运行良好【参考方案3】:
您还可以利用 laravel 包通过缓存页面部分来轻松优化您的应用程序
https://github.com/imanghafoori1/laravel-widgetize
【讨论】:
以上是关于Laravel 工匠优化最佳实践的主要内容,如果未能解决你的问题,请参考以下文章