2013-06-05 23 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