【问题标题】:Optimize laravel project with extracting methods使用提取方法优化 laravel 项目
【发布时间】:2023-04-08 22:33:01
【问题描述】:

我正在进行一个使用 laravel 5.1 的 laravel 项目。有一个过程需要 8 秒以上。在这个过程中,有一个方法有将近 250 行代码。从优化的角度来看,如果我将该代码提取到多个方法中,它会比平时更快还是需要很多时间?

【问题讨论】:

  • 您为什么不解释一下您的长期运行功能,以便我们以更好的方式回答。

标签: php laravel optimization laravel-5.1


【解决方案1】:

将一个大函数分解为多个小函数不会更快,反而会因为多个函数调用而变得更慢。

我建议改变你的方法,将队列用于异步进程等。

【讨论】:

    【解决方案2】:

    使用 PHP,您通常可以做一些事情来加速代码:

    尽可能使用参考资料。

    默认情况下,每当您调用带参数的函数时,都会生成变量的副本。如果频繁调用将数组或字符串作为参数的函数,这可能会非常昂贵。所以不要做这样的事情:

    function f($array) {
    

    用途:

    function f(&$array) {
    

    这意味着对 $array 的任何修改也会影响原始数组,因此它应该仅在 $array 未被修改或您不关心它被修改的情况下使用。

    foreach 循环也是如此。只需确保在循环完成后unset() 变量以避免出现问题。

    foreach ($set as &$element) { ... }
    unset($element);
    

    另一个技巧是预先分配缓冲区而不是让它们自动扩展。例如,而不是:

    $numbers = [1, 2, 3, 4, ... 10000000];
    $inverted = [];
    foreach ($numbers as $num) { $inverted[] = 1 / $num; } 
    

    您确保$inverted 已经具有适合所有元素所需的大小:

    $numbers = [1, 2, 3, 4, ... 10000000];
    $inverted = array_fill(0, count($numbers), 0);
    foreach ($numbers as $i => $num) { $inverted[$i] = 1 / $num; } 
    

    同样,尽可能避免调整字符串和数组的大小。使用索引等。

    正则表达式虽然方便,但却是性能的敌人。避免将它们用于简单的任务。

    当然,所有这些都与 PHP 代码有关。也许不是。如果您使用的是数据库,您可能需要重新评估执行 SQL 查询的方式。您构建它们的方式会严重影响性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多