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:cachephp 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 工匠优化最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中添加常量的最佳实践是啥? (长名单)

Laravel 形式的最佳实践?隐藏输入或路由参数?

Laravel 数据库日志 - 最佳实践是啥

Laravel 策略最佳实践

Laravel 迁移 - 永远保留它们?啥是最佳实践?

Laravel 中批量更新关系的最佳实践