性能一直是Laravel的最大话题之一, 但它也确实为很多PHP开发者提供了很多不一样的知识, 这里再次为框架加速一次.
Redis驱动php artisan route:cachephp artisan config:cacheOPcache opcache.validate_timestamps设置为``,让你生产环境的PHP代码永远不自动更新, 类似于其它编译型语言,每次部署代码,需要重启php-fpm来加载新代码Laravel现在已经内置了跨域中间件, 如果只是为APP提供接口,完全就没有跨域的问题, 可以直接注释这个中间件API限制速率的接口, 可能对很多项目场景就不合适Session服务,密码重置服务等等当然要讲的重点还是和API和Admin混合的项目, 使用了一个全栈的框架,相信也有很多项目使用了Laravel-admin或者是Dcat Admin
之前我也写过一篇文章讲过如何减少你的服务提供者, 因为自从Laravel5.5之后,需要第三方包都可以自己注册,然后Laravel自动发现这些服务提供者
可以运行这条命令找出你已经注册的服务提供者:
php artisan package:discover
Discovered Package: dcat/laravel-admin
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.dcat/laravel-admin, 我们只需要去项目根目录下的composer.json写入以下配置 "extra": {
"laravel": {
"dont-discover": [
"dcat/laravel-admin"
]
}
}php artisan package:discover就会发现dcat/laravel-admin消失了Admin了, 所以我们也需要增加一个条件来手动注册服务提供者AppServiceProvider.php增加以下代码<?php
namespace App\Providers;
use Dcat\Admin\Admin;
use Dcat\Admin\AdminServiceProvider;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
// 这个条件有很多种方式, 你甚至可以通过 url 来判断
if (config('admin.enable')) {
AliasLoader::getInstance()->alias('Admin', Admin::class);
$this->app->register(AdminServiceProvider::class);
}
}
}40%的提升(因为Admin注册了很多路由, 启动很多东西)
机器:
2U4G 的机器 CentOS Linux release 8.3.2011
环境: (使用Laradock全家桶, 开启 OPcache)PHP_VERSION=7.4
PHP_FPM_INSTALL_OPCACHE=true
config/app.php文件Illuminate\View\ViewServiceProvider::classIlluminate\Notifications\NotificationServiceProvider::classIlluminate\Pagination\PaginationServiceProvider::classExceptions\Handler.phpAPI处理(默认错误会返回一个视图,但我们有没有注册) public function render($request, Exception $exception)
{
if ($request->is('api*')) {
return (
new Response(json_encode([
'code' => 500,
'msg' => $exception->getMessage()]
))
)
->withHeaders(['Content-Type' => 'application/json']);
}
return parent::render($request, $exception);
}