php刷新当前网页的代码PHP解释型语言来说什么优化的方案?|PHP课堂网页js自动刷新代码
2022-08-02
对于 PHP 等解释型语言,每次运行都会加载和解析一次所有代码。这样做的好处是代码可以随时更新和修改,因为我们不需要编译。但这也带来了一个问题,就是不能承载过多的流量。毕竟每次加载、解析、释放,都会增加CPU的负担。通常一台8核16G的服务器,在2、3000并发量左右,可以达到60%以上的CPU利用率。而且,如果您使用的是像这样的大型框架,它的效率会更低。这时候我们通常通过增加服务器数量来做负载均衡,从而达到降低服务器压力的效果。但是,这样做的成本会增加很多。那么,有没有优化的解决方案呢?
鸟哥在他的博客中一篇关于PHP7优化的文章中,第一个建议是开启它。当然,另一种选择是使用 . 我们将在未来讨论内容。今天php刷新当前网页的代码,我们先来学习。
什么是
通过将 PHP 脚本的预编译字节码存储在共享内存中,可以提高 PHP 的性能。存储预编译字节码的好处是节省了每次加载和解析 PHP 脚本的开销。
这是PHP文档中的介绍,即保存每个加载和解析步骤,并将第一次解析后编译的脚本字节码缓存在系统的共享内存中。实际上,这类似于不完整的编译。
像Java这样的语言需要打包编译才能上线运行,比如打包成jar包。C++ 或 C# 可以打包成 .dll 或 .exe。这些打包的文件就是编译后的文件。运行它们后,它们一般会保持在运行状态,即它们会成为一个常驻进程,它们的代码会进入内存。程序运行时,无需解释或编译,自然速度会快很多。但也扮演着类似的角色。只是它不是一套完整的编译过程。我们仍然依赖 PHP-FPM 来运行脚本,但是在开启之后,PHP-FPM 会首先检查内存中是否已经有相关的缓存字节码。内存中,有的话直接使用。如果不,它将被再次解释和编译,然后缓存。另外,它是针对文件的,也就是说,如果一个文件是新添加的,它只有在运行之后才会被缓存。如果尚未运行,则不在当前共享内存中。
安装
它已经是 PHP 的官方扩展,并随安装包一起发布,所以我们可以在编译安装 PHP 时使用 --- 来启用扩展,它已经是默认扩展了。它也可以使用安装包中的文件安装在未安装的系统上。
cd php-7.4.4/ext/opcache/phpize./configuremake && make install
需要注意的是,尽量不要和生产环境一起使用。不建议在生产环境中使用。如果一定要同时使用,需要先加载再加载。
安装扩展后,打开 php.ini 文件中的扩展。需要注意的是,扩展是一个Zend扩展包,所以我们需要打开的是Zend扩展。
zend_extension=opcache.so
此外,它需要启用。
opcache.enable=1
开启后,如果我们再次更新代码,我们会发现刚刚更新的代码并不是我们最新的代码。这是因为代码已经被缓存了,就像在Java中一样,我们需要重新启动服务。那么这里重启 PHP 是什么?当然,只要重启我们的PHP-FPM,使用kill -USR2命令重启主进程即可。这里还给出了快速重启命令。
ps -ef | grep "php-fpm: master" | grep -v grep | cut -c 9-15 | xargs kill -USR2
感谢知乎的指正。重启 PHP-FPM 并不是最好的解决方案。您应该使用 () 手动重启,或配置 . + . 在php.ini文件中间隔自动编译,或者使用()直接重新编译修改过的那些文件
ab测试效果
我们测试的内容是测试环境中的2核4G服务器。使用的 PHP 版本是 PHP7.4。正常和 PHP 配置也被打开到最大。代码只是简单地输出了一行文本,但是我们使用的是一个简单的mvc框架,这意味着这段代码在运行时会加载至少几个文件,而不仅仅是一个文件。
首先,让我们看一下未开封的箱子。
接下来是开箱。
很明显php刷新当前网页的代码,性能有了很大的提升。不仅速度快了很多,吞吐率也直接提升了好几倍。当然,这只是一个非常简单的测试,但总的来说,对于提升单机性能确实有很大帮助。最重要的是,在同等并发情况下,CPU资源也比未打开状态下降低了70%。
配置参考
在 PHP 的官方文档中,已经给我们提供了 php.ini 中的一组默认配置。经测试,基本没有问题。当然,目前还没有在生产环境中使用,还需要更多的测试。不过文档指出,这种配置可以直接在网上应用,但是需要注意的是网站优化网站模板,一些使用注解等功能的高级框架可能需要注意某些参数。
opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60opcache.fast_shutdown=1opcache.enable_cli=1
具体的配置说明和其他配置选项,我们可以参考官方文档详细了解。
总结
既然是我们PHP大鸟哥推荐的,而且也是官方推荐的扩展,我觉得在官方生产环境中使用不会有什么大问题。此外,官方还提供了一组配置参数,可以直接应用于在线生产环境,也方便我们直接在线测试。目前,在生产环境中,我们只使用一台服务器进行测试,并为其分配更多的负载。从目前的情况来看,这台机器的运行效率远高于其他机器。因为它一方面处理更多的请求,另一方面它的CPU资源使用率并没有其他几台机器那么高。同时,我们也不需要多学习进程协程之类的,这将带来更高的学习成本。所以综上所述,在完整测试的情况下,绝对是我们最优先的单机优化方案。
参考文档: