无需重构代码即可提高运行程序性能 PHP操作码

  • 电脑网络维修
  • 2024-11-14

PHP引擎生成的PHP操作码深受编写代码模式的影响, 这不只仅体如今成功义务所需的语句数量上 ,代码的语法或者齐全扭转生成的操作码,从而造成主机的CPU在口头齐全相反的代码时会发生少量开支。

,提供了越来越深化优化技术的时机,以尽或者高效地运转上班负载。得出的结果令人印象深入,可以协助开发人员监禁现金流,以继续SaaS之旅。

在目前SaaS产品的案例中,其PHP进程每天在一台领有2个vCPU和8GB内存的主机上处置12亿个以上数据包。并且经常使用AWS智能裁减组,以便在无法预测的峰值状况下具备更大的灵敏性,但很少经常使用第二台主机(每周一两次)。

PHP操作码指的是PHP引擎在编译完开发人员编写的PHP源代码后口头的低级指令。

在PHP中,代码编译是在运转时 出现的:基本上,当PHP引擎初次失掉代码时,它会将其编译成这种机器友好的代码,缓存(这样引擎就不会再次编译相反的代码),而后口头。

下图是这个环节的繁难示意:

缓存PHP操作码准许开发人员在口头代码的环节中节俭三个步骤:解析原始PHP代码、标志化和编译。

一旦为代码初次生成了操作码,它就会存储在内存中,以便在后续恳求中重复经常使用。这缩小了PHP引擎每次口头相反PHP代码时都须要从新编译的需求,从而节俭了少量CPU和内存

PHP中最罕用的操作码缓存是 ,从PHP 5.5到最近的版本自动蕴含了OPCache。其效率高,并失掉了宽泛支持。

缓存预编译的脚本字节码须要在每次部署后使缓存失效。这是由于,假设更改后的文件在缓存中有字节码版本,PHP将继续运转旧版本的代码, 直到肃清操作码缓存,因此将再次编译新代码,生成新的缓存项。

为了了解不同的语法如何影响脚本的操作码,须要失掉PHP引擎生成的编译代码的方法。

有两种方法可以取得操作码。

假设在主机上启用了OPCache裁减,则可以经常使用其原生函数失掉特定PHP文件的操作码:

PHP// Force compilation of a script opcache_compile_file(__DIR__.'/yourscript.php'); // Get OPcache status $status = opcache_get_status(); // Inspect the script's entry in the cache print_r($status['scripts'][__DIR__.'/yourscript.php']);

它可以反汇编编译后的PHP代码并输入操作码 。它是了解PHP如何解释和口头代码的弱小工具。在装置之后,可以经常使用带-d选项的PHP命令运转一个启用VLD的PHP脚本:

Shellphp -d vld.active=1 -d vld.execute=0 yourscript.php

输入将包括无关编译后的操作码的详细消息,包括每个操作及其关系的代码行等等。

3v4l是一个十分有用的在线工具,它准许开发人员检查其在编辑器中输入的PHP代码生成的操作码。它基本上是一个装置了VLD的PHP主机,因此它可以失掉VLD输入并在阅读器中显示操作码。

由于它是收费的,将在以下的剖析中经常使用这个在线工具。

如何生成高效的PHP操作码

十分适正当解经常使用的代码语法如何以 的模式影响生成的PHP操作码。 开局将上方的代码粘贴到3v4l中。 坚持性能为“一切支持的版本”,而后单击“eval”。

PHP<?php namespace App; strlen('ciao');

在口头代码后,底部将出现一个选项卡菜单。导航到VLD选项卡以可视化相应的操作码。

Shellline #* E I O op fetch ext return operands -------------------------------------------------------------------------------------5 0 E > INIT_NS_FCALL_BY_NAME 'App%5CSpace%5Cstrlen' 1 SEND_VAL_EX 'ciao' 2 DO_FCALL 03 > RETURN 1

须要留意的是,第一个操作是INIT_NS_FCALL_BY_NAME。解释器经常使用文件的称号空间结构函数的称号, 但在 App\Example 命名空间中并不存在这个函数 ——那么它是如何上班的呢?

解释器将审核该函数能否存在于命名空间中。 假设不存在,它会尝试调用相应的外围函数。

在这里无时机通知解释器防止这种双重审核,并间接口头外围函数。

尝试在strlen之前参与反斜杠(\),并单击“eval”:

PHP<?php namespace App; \strlen('ciao');

在VLD选项卡中,如今只有一条语句即可看到操作码。

line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 5 0 E > > RETURN 1

由于传播了函数确实切位置,所以不须要思考任何回退。

假设不青睐经常使用反斜杠,可以像从根命名空间导入其余类一样导入该函数:

PHP<?php namespace App; use function strlen; strlen('ciao');

PHP引擎还有很多外部智能化性能,可以提早生成优化的操作码,对静态表白式启动求值。这是PHP自7.x版本以来性能清楚提高的最关键要素之一。

了解这些灵活可以真正缩小资源消耗并降落老本。在启动这项钻研之后,曾经开局在整个代码中经常使用这些技巧。

以下展现一个经常使用PHP常量的示例。在3v4l中运转这个脚本:

PHP<?php namespace App; if (PHP_OS === 'Linux') { echo "Linux"; }

检查PHP操作码的前两行内容:

line #* E I O op fetch ext return operands ------------------------------------------------------------------------------------- 5 0 E > FETCH_CONSTANT ~0 'App%5CPHP_OS' 1 IS_IDENTICAL ~0, 'Linux' 2 > JMPZ ~1, ->4 6 3 > ECHO 'Linux' 7 4 > > RETURN 1

FETCH_CONSTANT尝试从称号空间失掉PHP_OS的值,它将查找全局称号空间,由于它在此处不存在。而后,IS_IDENTICAL指令口头IF语句。

如今尝试将反斜杠参与到常量中:

PHP<?php namespace App; if (\PHP_OS === 'Linux') { echo "Linux"; }

正如在操作码中看到的那样,引擎不须要尝试失掉常量, 由于其位置现已明白,并且作为一个静态值,它曾经被存储在内存中。

此外,IF语句隐没了,由于IS_IDENTITCAL语句的另一端是一个静态字符串('Linux'),因此IF可以标志为“true”,而无需在每次口头时解释它。

在PHP代码的最终性能上可以发生的关键影响。

宿愿这是一个幽默的话题。正如在文章扫尾提到的那样,开发人员经过经常使用这种战略取得了很多好处,理想上,它们也在软件包中经常使用。

看到一个示例,说明如何在PHP包中经常使用这些技巧来优化其性能。

原文题目: PHP Opcode: Improve Application Performance Without Changing Your Code ,作者:Valerio Barbera

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/4084.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号