php使用vld擴充套件檢視opcodes
需要分析php**的效能,或者說實現同樣功能的**到底哪個更好呢?或者說想知道底層的實現可以使用vld檢視opcode。
該擴充套件以收錄在 pecl
修改 php.ini,增加extension=php_vld.dll
php -m
簡單使用vld
**
<?php
echo1+
2;
執行
$ php -dvld.active=
1 test.php
finding entry points
branch analysis from position:
01 jumps found.
(code =
62) position 1=-
2filename: d:\dev\php\my\test
.php
function name:
(null
)number of ops:
2compiled vars: none
line #* e i o op fetch ext return operands
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-----40
0 e >
echo31
>
return
1branch:
# 0; line: 40- 40; sop: 0; eop: 1; out0: -2
path #1: 0,
3
使用vld對比**執行過程
比如有兩個寫法
寫法一:
<?php$a=
'a';$b=
'b';$c=
'c';
echo$a.
$b.$c;
其opcodes為
finding entry points
branch analysis from position:
01 jumps found.
(code =
62) position 1=-
2filename: d:\dev\php\my\test
.php
function name:
(null
)number of ops:
7compiled vars:!0
=$a,!
1=$b,
!2=$c
line #* e i o op fetch ext return operands
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-----40
0 e >
assign!0
,'a'411
assign!1
,'b'422
assign!2
,'c'443
concat~6
!0,!
14concat~7
~6,!
25echo~7
6>
return
1branch:
# 0; line: 40- 44; sop: 0; eop: 6; out0: -2
path #1: 0,
abc
寫法二:
<?php$a=
'a';$b=
'b';$c=
'c';
echo$a,
$b,$c;
其opcodes為
finding entry points
branch analysis from position:
01 jumps found.
(code =
62) position 1=-
2filename: d:\dev\php\my\test
.php
function name:
(null
)number of ops:
7compiled vars:!0
=$a,!
1=$b,
!2=$c
line #* e i o op fetch ext return operands
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
-----40
0 e >
assign!0
,'a'411
assign!1
,'b'422
assign!2
,'c'443
echo!0
4echo!1
5echo!2
6>
return
1branch:
# 0; line: 40- 44; sop: 0; eop: 6; out0: -2
path #1: 0,
abc
我們知道字串都是不可變的,針對字串的操作都是會重新分配新的的記憶體。顯然方法二更合理,這裡只是列舉簡單的例子說明vld在優化**上的可操作性。
line
為檔案行號,此處40是因為前面有注釋的**沒拷貝過來。
#*
為 opcode 編號。
!0
編譯的變數,也叫 cv,以!
開頭表示,compiled vars: !0 = $a, !1 = $b, !2 = $c
~6
臨時變數,以~
開頭,比如上面的~6, ~7
。
可以在某個具體的點上使用vld來對比opcodes,找到可以優化的方式。
如何閱讀 opcodes 可以看看
vld的配置
PHP7 2安裝vld擴充套件
這裡解壓至建立的vld資料夾 這裡要找準自己開發機phpize的位置 usr local matrix bin phpize 找準自己開發機上php config的位置 找準php.ini的位置,在末尾新增 extension vld.so 即可 vim usr local matrix lib p...
使用php指令碼檢視已開啟的擴充套件
php安裝時會將擴充套件包編譯進去,對於乙個正在執行中的資料庫,檢視php的擴充套件開啟狀況,第一種方式是通過配置檔案檢視,另外是通過phpinfo函式檢視所有的配置,另外是使用php內建函式來檢視,通過指令碼輸出來檢視,如下 print r get loaded extensions 通過get ...
使用C語言來擴充套件PHP,寫PHP擴充套件dll
以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...