php 预加载函数,php预加载,preload

php预加载,preload

php.ini

# 只用设置成0以后重启php才能清空preload的文件

opcache.enable = 1

# 配置进行preload的php脚本,php-fpm启动的时候会先根据这个文件进行预加载

opcache.preload=/home/www/test/preload.php

# preload的用户,不建议使用root

opcache.preload_user = www

使用opcache_compile_file进行文件缓存,一旦缓存不会被清除,使用opcache_reset()不会清除预加载的文件,opcache_invalidate()也不能进行清除,使用opcache_get_status()可以查看缓存占用的内存大小,以及缓存的文件名

//preload.php

$files = glob('/home/www/test/*.php');

foreach ($files as $file) {

opcache_compile_file($file);

}

//parent.php

class A{

public function a(){

echo 'class A';

}

}

//child.php

require('./parent.php');

class B extends A{

public function b (){

echo 'clsss B'.PHP_EOL;

}

}

//conf.php

return array_fill(0,20,'abc');

//index.php

require('./child.php');

require('./conf.php');

opcache_reset();

print_r(opcache_get_status());

$obj = new B;

$obj->b();

ab -c 1 -n 10000

开启预加载

Concurrency Level: 1

Time taken for tests: 2.864 seconds

Complete requests: 10000

Failed requests: 0

Total transferred: 1620000 bytes

HTML transferred: 160000 bytes

Requests per second: 3492.01 [#/sec] (mean)

Time per request: 0.286 [ms] (mean)

Time per request: 0.286 [ms] (mean, across all concurrent requests)

Transfer rate: 552.45 [Kbytes/sec] received

未开启预加载

Concurrency Level: 1

Time taken for tests: 4.043 seconds

Complete requests: 10000

Failed requests: 0

Total transferred: 1860000 bytes

HTML transferred: 400000 bytes

Requests per second: 2473.23 [#/sec] (mean)

Time per request: 0.404 [ms] (mean)

Time per request: 0.404 [ms] (mean, across all concurrent requests)

Transfer rate: 449.24 [Kbytes/sec] received

Laravel7预加载测试 ab -c 1 -n 1000

//preload.php

function a($path){

$files = glob($path.'*');

// print_r($files);

foreach($files as $file){

if(is_dir($file)){

a($file.'/');

}else{

//使用pathinfo 然后获取extension 报错,php启动不起来

if(basename($file) == 'index.php'){

continue;

}

if(strstr($file,'.' ) == '.php'){

opcache_compile_file($file);

}

}

}

}

a('/home/www/test/Laravel7/vendor/laravel/');

未开启预加载

Concurrency Level: 1

Time taken for tests: 100.983 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 3355000 bytes

HTML transferred: 2426000 bytes

Requests per second: 9.90 [#/sec] (mean)

Time per request: 100.983 [ms] (mean)

Time per request: 100.983 [ms] (mean, across all concurrent requests)

Transfer rate: 32.44 [Kbytes/sec] received

开启预加载Laravel, 只缓存vendor/laravel/ 目录

Concurrency Level: 1

Time taken for tests: 12.377 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 3355000 bytes

HTML transferred: 2426000 bytes

Requests per second: 80.79 [#/sec] (mean)

Time per request: 12.377 [ms] (mean)

Time per request: 12.377 [ms] (mean, across all concurrent requests)

Transfer rate: 264.71 [Kbytes/sec] received

总结

自己写的,缓存文件数4,性能有40%提升

将laravel核心文件进行预加载,总缓存大小2200000左右,性能提升10倍

缺点:一旦缓存不能修改,而且只能通过重启php进程生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值