在本文中,我想介紹一些替代方案。如果您正在尋找可能減少生產中執行時間的可能性,這將很有用。讓我們看看,哪種php方法可能會被效能更高的方法所取代,以及是否存在成本或折衷的問題。
您有乙個包含重複項的大型陣列,並且希望刪除它們,使其僅具有唯一值的陣列。
常規
array_unique
(
$array
);
替代
array_keys
(
array_flip
(
$array
));
表現
我建立了乙個陣列,其中包含超過400萬個元素和300萬個重複項。這是最佳結果:
方法執行時間處理時間
array_unique
787.31毫秒
array_keys array_flip(作用是反轉陣列中的鍵名和鍵值)
434.03毫秒
替代方法在此測量中快 1.8倍 (44.87%)。平均而言,速度提高了約1.5倍(30%)。權衡:這僅適用於簡單的一維陣列,因為array_flip
用值替換了鍵。
您有乙個很大的陣列,想要從中選擇乙個隨機值。
常規
array_rand
(
$array
);
替代
$array
[mt_rand(0,
count
(
$array
) - 1)];
表現
我建立了乙個包含500萬個元素的陣列。這是最佳結果:
方法執行時間處理時間
array_rand
25.99微秒
mt_rand
0.95微秒
替代方法是此測量速度快 27.3倍 (96.33%)。平均而言,速度提高了約8倍(87%)。這個結果特別令人驚訝,因為mt_rand
mersenne twister隨機數生成器的實現也是如此,並且自php 7.1起,內部隨機化演算法已更改為使用完全相同的演算法。
您有乙個字串,要測試,如果它僅包含字母數字字元。
常規
preg_match(
'/^[a-za-z0-9]+$/'
,
$string
);
替代
ctype_alnum(
$string
);
表現
我建立了乙個包含100k以上字母數字和非字母數字字串的陣列。這是最佳結果:
方法執行時間處理時間
preg_match
15.39毫秒
ctype_alnum
2.06毫秒
在此測量中,替代方法快了 7.5倍 (86.59%)。平均而言,速度提高了約4倍(76%)。可以將相同的內容應用於ctype_alpha()
(檢查字母字元)和ctype_digit()
(檢查數字字元)。
您有乙個字串,想要用另乙個子字串替換它的一部分。
常規
str_replace
(
'a'
,
'b'
,
$string
);
替代
strtr
(
$string
,
'a'
,
'b'
);
表現
我建立了乙個包含500萬個隨機字串的陣列。這是最佳結果:
方法執行時間處理時間
str_replace
676.59毫秒
strtr
305.59毫秒
另一種方法是 2.2倍 (54.83%)在該測量更快。平均而言,速度提高了約2倍(51%)。
PHP提高指令碼效能要點
1.刪除重複項 array keys array flip array 速度比 array unique array 高於30 2.獲取隨機數組記錄 array mt rand 0,count array 1 速度比 array rand array 高於96 3.檢查字串僅包含字母數字字元 cty...
(譯)MySQL的10個基本效能技巧
原文出處 mysql的10個基本效能技巧 與所有的關聯式資料庫一樣,mysql正如一頭怪獸一般,它可能會在接到通知的一瞬間陷入停頓,讓你的應用程式陷入困境,讓你的業務處於危險之中。真是的情況是,常見的錯誤是導致mysql效能問題的根源。工作負載或配置陷阱中的一些微妙之處常常會掩蓋這些資訊,為了確保m...
優化Hypermesh指令碼效能的幾點建議
以下給出幾種優化hypermesh二次開發tcl指令碼的效能的方法。注意 下面列出的時間是在一台奔騰266mhz的計算機上使用10000次迭代的tcl命令執行時間。過程 proc 中定義的變數預設為區域性變數。有許多方法可以訪問過程作用範圍之外的變數,包括使用命令global,upvar,uplev...