我個人認為 Arrow Functions 可以進一步優化一些 Helper Functions
例如
<?php
$arr = [1, '2', 3, '4', 5];
Arr::where($arr, fn($value) => is_string($value));
$min = 3;
Arr::where($arr, fn($value) => $value > $min);
预加载,
可以用于配置,框架初始化,vendor整个目录预加载可能太消耗内存,可以挑选必需、或者热门类库,选择性预加载。
类属性类型,
这个特性应该才会对原有代码带来变化,可能所有热门composer包都会跟进,无论是php7.4还是以后的php8jit,因为声明类型后,不可变化,可以更好编译优化
https://www.jianshu.com/p/eb4dce62edf3
其实不太明白预加载,php很早就有opcache扩展用来预加载opcode到内存,这次仅仅是放到内核里了?
看了一下原文,才有所了解,还是用opcache 估计会有新的方法,我猜可能是在启用fpm的时候加载代码,不过这要是一台机器上跑多个带一大堆php项目,内存能吃得消吗?
刚看到7.4的预加载功能,确实是有必要的,如果能有性能提升当然更好。
因为前段日子因为没有预加载出过问题,所以自己使用 opcache_compile_file
实现了“预加载”。实现方法就在服务上线前,遍历整个项目的php文件,调用 opcache_compile_file
将他们放到opcache中。
出现的问题是,大流量的php服务冷启动上线的时候,会出现cpu直接打满的情况。原因就是冷启动的时候,框架文件太多,都还没有种上opcache。当运行一段时间以后随着opcache生效的文件越多,cpu会下降下来,直到稳定。
这种情况在生产环境是不允许出现的,毕竟会出现一段时间的502,所以就自己实现了“预加载”。看到7.4官方就自带了,那就更好了。
不过看到预加载的例子,居然也是需要自己调用 opcache_compile_file
,对比目前自己做的预热好像没啥区别。不过不用专门写个接口来执行 opcache_compile_file
进行预热了,ini配置好就自动执行了。
推荐文章: