php 函數當中實現相同功能但是速度有差異的有哪些,為什麼速度會有差異?

來源:互聯網
上載者:User
php 函數當中實現相同功能但是速度有差異的有哪些,為什麼速度會有差異?

回複內容:

php 函數當中實現相同功能但是速度有差異的有哪些,為什麼速度會有差異?

這個問題的“踩”比較多,但我還是大膽回答下吧。。。PHP中兩個函數幹一樣的事情的例子是有的,但是那幾乎都因為它們互為別名(如sizeof vs. count,strstr vs. strchr)。在此情況下它們的效能是完全一樣的。你想下,如果已經有了一個相同功能的函數,PHP幹嘛要開發一個一模一樣的(而且速度還得不一樣)的函數呢?

但是如果把“函數”的定義放寬些,就可以發現的確有這麼一類事情,PHP系統函數比另一種syntax慢。一個典型的例子是檢查一個字串的長度是否超過規定值。比方說不能超過1000。

一種方法是if (strlen($str)<=1000)。PHP內部會檢查這個字串對象的len成員是否大於1000。所以不會每次都數這個串,時間複雜度是O(1)。
另一個非典型做法是if (!isset($str[1000]))。時間複雜度也是O(1),但是測試下你就會發現,它比strlen快好幾倍。

為什麼兩個函數速度差這麼多?因為PHP會處理isset,將以上運算式轉換為短短几條虛擬機器指令。這有點像Java的intrinsics,雖然呼叫函數可以完成isset的任務,但是把函數的相關指令內聯到代碼裡,速度可以更快。
而strlen就沒有這種待遇了。呼叫strlen得走PHP常規呼叫系統函數的程式,動輒上百條代碼。所以速度比isset慢得多。

但是注意strlen和isset實現的功能不全是一樣的,只不過用在檢查字串長度這裡,兩者都能勝任。所以。。雖然這個例子有的牽強,但我覺得它是最符合你的問題標準的了。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.