今天匯出報表時,測試同事告訴我資料太大了,無法匯出。我看了下大概只有1500條左右的資料,完全不大。估計是上午將資料寫入陣列時方式不對。修改了下果然ok了。
參考vld用法:http://www.phppan.com/2011/05…
mac下安裝vld擴充套件:http://blog.csdn.net/njys1/ar…
(第一次記錄文章,還不熟悉排版)
下面是簡單的還原
1.效能底下的寫法:
<?php
$array = null;
$array[]=`1`;
$array[]=`a`;
$array[]=`3`;
?>
使用vld檢視opcode的程式碼:
function name: (null)
number of ops: 8
compiled vars: !0 = $array
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
2 0 E > ASSIGN !0, null
3 1 ASSIGN_DIM !0
2 OP_DATA `1`, $2
4 3 ASSIGN_DIM !0
4 OP_DATA `a`, $4
5 5 ASSIGN_DIM !0
6 OP_DATA `3`, $6
6 7 > RETURN 1
branch: # 0; line: 2- 6; sop: 0; eop: 7; out1: -2
path #1: 0,
顯然這種方式每賦值一次需要兩步操作
2.優先的寫法:
<?php
$array = null;
$array = [`1`,`a`,`3`];
?>
對應的opcode程式碼:
function name: (null)
number of ops: 6
compiled vars: !0 = $array
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
2 0 E > ASSIGN !0, null
3 1 INIT_ARRAY ~1 `1`
2 ADD_ARRAY_ELEMENT ~1 `a`
3 ADD_ARRAY_ELEMENT ~1 `3`
4 ASSIGN !0, ~1
4 5 > RETURN 1
branch: # 0; line: 2- 4; sop: 0; eop: 5; out1: -2
path #1: 0,
這種方式每賦值一次需要一步操作,資料量大了區別就很明顯