<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這些常見的 PHP 代碼性能對(duì)比你必須知道

          共 1348字,需瀏覽 3分鐘

           ·

          2021-10-26 08:32

          通常我會(huì)使用常規(guī)的、顯而易見的 PHP 函數(shù)來編寫代碼來解決相應(yīng)的問題。但對(duì)于其中一些問題,我遇到了特別提高性能的替代解決方案。


          在本文中,我想介紹其中的一些替代方案。如果你正在尋找在生產(chǎn)中進(jìn)一步減少執(zhí)行時(shí)間的可能性,這將非常有用。讓我們來看看哪些 PHP 方法可能會(huì)被性能更好的方法取代,以及是否有任何成本或權(quán)衡。


          所有這些方法都在本地 Web 服務(wù)器上使用 PHP 7.4 進(jìn)行了測(cè)試

          歡迎加入 我的后端技術(shù)交流群


          1. 刪除重復(fù)項(xiàng)

          你有一個(gè)包含重復(fù)項(xiàng)的大型數(shù)組,并且希望刪除它們,以便只有一個(gè)具有唯一值的數(shù)組。

          常規(guī)

          array_unique($array);


          其他方式

          array_keys(array_flip($array));


          性能

          我創(chuàng)建了一個(gè) 400 萬的數(shù)組,其中有 300 萬個(gè)重復(fù)項(xiàng),這是最好的優(yōu)化結(jié)果:


          其他方式比常規(guī)方式 快了 1.8倍 (44.87%) . 平均也有大約 1.5 倍 (30%) 的提升。總結(jié):這僅適用于一維數(shù)組,因?yàn)閍rray_flip會(huì)反轉(zhuǎn)鍵和值.


          2. 獲取隨機(jī)的數(shù)組元素

          你想從一個(gè)大數(shù)組中獲取一個(gè)隨機(jī)值


          常規(guī)

          array_rand($array);

          其他方式

          $array[mt_rand(0,?count($array)?-?1)];

          性能

          我創(chuàng)建了一個(gè)包含 500 萬個(gè)元素的數(shù)組,這是最佳結(jié)果:


          替代方法在此測(cè)量中快27.3 倍(96.33%)。平均快 8 倍 (87%)。這個(gè)結(jié)果特別令人驚訝,因?yàn)閙t_rand是 MersenneTwister 隨機(jī)數(shù)生成器的實(shí)現(xiàn),而且從 PHP7.1 開始,內(nèi)部隨機(jī)化算法已更改為使用完全相同的算法。


          3. 字母數(shù)字字符測(cè)試

          如果你有一個(gè)字符串,并且希望測(cè)試它是否只包含字母數(shù)字字符。


          常規(guī)

          preg_match('/[a-zA-Z0-9]+/',?$string);

          其他方式

          ctype_alnum($string);


          性能

          我創(chuàng)建了一個(gè)包含超過 100k 字母數(shù)字和非字母數(shù)字字符串的數(shù)組。以下是排名靠前的結(jié)果:


          替代方法在此測(cè)量中快 7.5 倍 (86.59%)。平均而言,它快了約 4 倍 (76%)。


          同樣的道理也可以應(yīng)用于 ctype_alpha() 命令 (檢查字母字符) 和 ctype_digit() 命令 (檢查數(shù)字字符)。


          4. 替換子字符串

          你有一個(gè)字符串,并且希望用另一個(gè)子字符串替換它的一部分。


          常規(guī)

          str_replace('a',?'b',?$string);

          其他方式

          strtr($string,?'a',?'b');

          性能

          我創(chuàng)建了一個(gè)包含 500 萬個(gè)隨機(jī)字符串的數(shù)組。以下是排名靠前的結(jié)果:



          替代方法在此測(cè)量中快2.2 倍(54.83%)。平均快 2 倍 (51%)。


          額外的性能改進(jìn)

          以下是我在編碼約定中搜集的一些附加方法,我發(fā)現(xiàn)它們可以略微提高性能 (如果適用):


          • 更喜歡 JSON 而不是 XML

          • 在之前聲明變量,而不是在循環(huán)的每次迭代中聲明變量

          • 避免循環(huán)頭部中的函數(shù)調(diào)用 (在每次迭代中調(diào)用的 for ($i=0; $i

          • 注銷消耗內(nèi)存變量

          • 首選 select 語句而不是多個(gè) if 語句

          • 優(yōu)先選擇 require/include 而不是 require_once/include_once (確保正確的操作碼緩存)


          最后一句話:我知道關(guān)于過早優(yōu)化的討論。我同意,生產(chǎn)中的性能取決于諸如數(shù)據(jù)庫查詢之類的瓶頸,在處理性能時(shí)應(yīng)該重點(diǎn)關(guān)注這些瓶頸。但我認(rèn)為,如果有更快的替代方案,例如,在 regex 更容易處理和維護(hù)的情況下,為什么不使用它們呢?


          總結(jié)

          我們已經(jīng)看到,即使使用當(dāng)前的 PHP 7.4 (已經(jīng)比以前的 PHP 版本快得多),也有可能使用其他方法進(jìn)一步提高腳本性能。


          求一鍵三連:點(diǎn)贊、轉(zhuǎn)發(fā)、在看

          瀏覽 41
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  密芽成人aV | 久热精品在线观看 | 国产精国产三级国产普通话高清 | 人人妻人人| 麻豆18禁在线看 |