开启 OPcache
根据服务器情况修改php.ini
/etc/php/7.2/fpm/php.ini
编辑以上文件,搜索 opcache.enable 将值设为 1 即为开启:
opcache.enable=1
php.ini 里相关的配置以下,注释里包括说明和推荐设置的值,请详细阅读:
; 是否在命令行开启,这里默认设置为 0 ,暂且关闭
;opcache.enable_cli=0
; 这个内存是用来存储编译后的字节码的,视你的程序
; 代码量而定,Laravel 应用一般建议设置为 256,单位 MB,
; 默认是 128
opcache.memory_consumption=256
; 会对程序所有的字符串进行统一存储以加快存取速度,
; 默认是 8m,建议 32 或者不超过 64。
opcache.interned_strings_buffer=32
; 最大加速多少个脚本文件,视项目脚本文件数而定,
; 合理区间 200~1000000 ,默认是 10000 ,建议 500000
opcache.max_accelerated_files=1000000
; 最大作废比例百分比,到达这个比例会重启,默认是 5 ,建议 10
opcache.max_wasted_percentage=10
; 开启情况下会在脚本名称前加上当前目录信息做为缓存的 Key,关闭可以
; 提高性能,但是会面临出错的风险(文件名一致时),建议开启,关闭使用 0
opcache.use_cwd=1
; 开启的话,会按照 opcache.revalidate_freq 设置的频率去检查文件
; 是否修改以便重新缓存,默认开启,生产环境下请设置为关闭,然后
; 写自动化脚本,在每次更新代码后自动重启 OPcache
opcache.validate_timestamps=0
; 文件更新检测频率,单位秒,只有在 opcache.validate_timestamps
; 开启时才有效。默认为 2,意味着 2 秒钟检查一次,会对文件系统造
; 成负担,如果是在开发环境中请酌情使用,生产环境随意设置,因为
; 我们会设置 validate_timestamps 为关闭。
opcache.revalidate_freq=2200
; 文件加载的逻辑,默认关闭,无需修改
;opcache.revalidate_path=0
; 开启的话会把代码注释一起缓存,关闭可减低内存使用,但是
; 如果有一些代码依赖于注释里的指令,例如 Doctrine,
; Zend Framework 2 和 PHPUnit,将会出现问题。建议开启
opcache.save_comments=1
修改完成后,需要重启 FPM 生效:
$ service php-fpm restart
在 Laravel 中使用 OPcache
生产环境下,我们一般会将 opcache.validate_timestamp 设置为 0 以获取最大性能。然后在代码变跟时候,再重置 OPcache。
Laravel安装
$ composer require appstract/laravel-opcache
$ php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --tag="config"
Lumen安装
$ composer require appstract/laravel-opcache
bootstrap 增加注册
$app->configure('opcache');
$app->register(Appstract\Opcache\OpcacheServiceProvider::class);
config 增加配置文件 opcache.php
<?php
return [
'url' => env('OPCACHE_URL', config('app.url')),
'prefix' => 'opcache-api',
'verify_ssl' => true,
'headers' => [],
'directories' => [
base_path('app'),
base_path('bootstrap'),
base_path('public'),
base_path('routes'),
base_path('vendor/appstract'),
base_path('vendor/composer'),
base_path('vendor/laravel/lumen-framework'),
base_path('vendor/illuminate'),
base_path('resources'),
base_path('storage'),
base_path('vendor'),
],
'exclude' => [
'test',
'Test',
'tests',
'Tests',
'stub',
'Stub',
'stubs',
'Stubs',
'Dumper',
],
];
因为lumen没有config_path函数,在app下创建helper.php
<?php
if (!function_exists('config_path')) {
/**
* Get the configuration path.
*
* @param string $path
*
* @return string
*/
function config_path($path = '')
{
return app()->basePath() . '/config' . ($path ? '/' . $path : $path);
}
}
composer.json 增加 files
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/helper.php"
]
},
运行 composer 命令加载文件
$ composer dump-autoload
每次更新代码都要注意,先清缓存,再整体执行优化,命令:
$ php artisan opcache:clear
$ php artisan opcache:optimize
网友评论