2013-06-05 22 views
0

我正在使用CakePHP 2.3(高度優化/改編的版本),我的應用程序運行在非常慢的硬件(300MHz ARM)上,所以我仍然在優化我的任何地方。框架的一種方法經常被稱爲不是很快(〜0.5-1ms),但我想不出一種方法來改善它(不改變輸出) - 總共花費總時間的5%這個方法:如何加快這種方法?

function pluginSplit($name, $dotAppend = false, $plugin = null) { 
    if (strpos($name, '.') !== false) { 
     $parts = explode('.', $name, 2); 
     if ($dotAppend) { 
      $parts[0] .= '.'; 
     } 
     return $parts; 
    } 
    return array($plugin, $name); 
} 

有沒有人有一個想法如何加快這個呢?

根據探查strpos花費的時間的方法約5%和爆炸〜1%: enter image description here
(性能分析是慢約10-15次,然後執行正常 - > 8.8ms是〜0.5-1ms未經探查)

+0

蛋糕的資源需求通常不是非常適合低端硬件環境。你確定這是工作的正確工具嗎? –

+0

@GeorgeCummins:CakePHP的選擇有幾個原因,我已經精簡了框架,所以它「更快」,但一些「緩慢的方法」,我無法擺脫......(你是否因此而失敗了?如果沒有請exatind downvote所以我可以改善) – ChrFin

+0

我沒有downvote你的問題。 –

回答

1

剛有點起色不要搜索字符串2次:

function pluginSplit($name, $dotAppend = false, $plugin = null) { 
    if (count($parts = explode('.', $name, 2)) === 2) { 
    if ($dotAppend) { 
     $parts[0] .= '.'; 
    } 
    return $parts; 
    } 
    return array($plugin, $name); 
} 
+0

這意味着爆炸每次都會被調用 - 大多數情況下,這個方法被稱爲一個沒有點在它。因此,這不太可能提高性能,更可能產生負面影響。 – AD7six

+0

我不這麼認爲,因爲'strpos需要約5%的方法時間和爆炸〜1%'。 如果找到一個點,則搜索它2次(使用我的解決方案一次)。 如果找不到點,您搜索一次(兩個版本)。 – luk2302

+0

閱讀此方法的_your_版本,輸入字符串每次傳遞以爆炸。 strpos調用是爲了避免不必要的調用爆發 - 而這種方法的編寫方式是由於大量的分析。 – AD7six