0

我有一个类正在使用存储在数组中的数据构建一些 HTML。该数组中大约有 100 个项目。每个项目都包含公司名称、描述和公司支持的不同编程语言的标志等信息。我在为每个项目构建 HTML 时进行字符串连接。

我注意到,当我附加编程语言数据时,性能突然受到了巨大的影响。我看到页面渲染计时器从 0.15 秒跳到 ~0.60 秒。这个时间包括每次从数据库中抓取相同的数据。我可以始终使性能在这 2 次之间跳跃,但注释/取消注释以下代码行:

$html .= '<div class="programmingLanguages"><strong>Programming Languages</strong> '.implode(', ', $progLanguagesArray).'</div>';

通过附加一个长的测试字符串,我还能够获得相同的性能下降,如下所示:

$html .= 'testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest';

特别奇怪的是,我有另一行代码使用相同的“内爆”函数,并且在性能上没有任何显着差异:

$html .= '<div class="integrationMethods"><strong>Integration Methods:</strong> '.implode(', ', $intMethodsArray).'</div>';

有人对这里可能发生的事情有任何见解吗?我在我的代码的其他地方做了大量这样的连接,以前从未见过这样的东西。在这一点上,我难住了。

这是完整的课程:

class DeveloperView {

public static function getHtml($developers) {
    $html = '';
    $html .= '<div>';
    $html .= '<div>';

    $count = 0;
    foreach ($developers as $developer) {
        $url = $developer['attributes']['url'];
        $phone = $developer['attributes']['phone'];
        $company = $developer['attributes']['desc'];
        $active = $developer['attributes']['active'];
        $desc = $developer['object_value'];

        $intMethodsArray = array();
        if ($developer['attributes']['m1']) { $intMethodsArray[] = 'method 1'; }
        if ($developer['attributes']['m2']) { $intMethodsArray[] = 'method 2'; }
        if ($developer['attributes']['m3']) { $intMethodsArray[] = 'method 3'; }
        if ($developer['attributes']['m4']) { $intMethodsArray[] = 'method 4'; }
        if ($developer['attributes']['m5'])     { $intMethodsArray[] = 'method 5'; }

        $progLanguagesArray = array();
        if ($developer['attributes']['dotnet']) { $progLanguagesArray[] = '.Net (C# or VB.Net)'; }
        if ($developer['attributes']['asp'])    { $progLanguagesArray[] = 'Classic ASP'; }
        if ($developer['attributes']['cf'])     { $progLanguagesArray[] = 'Cold Fusion'; }
        if ($developer['attributes']['java'])   { $progLanguagesArray[] = 'Java'; }
        if ($developer['attributes']['php'])    { $progLanguagesArray[] = 'PHP'; }
        if ($developer['attributes']['perl'])   { $progLanguagesArray[] = 'Perl'; }
        if ($developer['attributes']['other'])  { $progLanguagesArray[] = 'Other'; }

        $html .= '<div class="';
        if ($count % 2 == 0) {
            $html .= 'listingalt';
        } else {
            $html .= 'listing';
        }
        $html .= '">';

        $html .= '<div class="developerPhone">'.$phone.'</div>';
        $html .= '<a class="ext_link" target="_blank" href="'.$url.'">'.$company.'</a>';

        $html .= '<div>';
        if (!empty($intMethodsArray)) {
            $html .= '<div class="integrationMethods"><strong>Integration Methods:</strong> '.implode(', ', $intMethodsArray).'</div>';
        }

        if (!empty($progLanguagesArray)) {
            $html .= '<div class="programmingLanguages"><strong>Programming Languages</strong> '.implode(', ', $progLanguagesArray).'</div>';
        }

        $html .= '</div>';

        $html .= '<p>'.$desc.'</p>';

        $html .= '</div>'."\n";

        $count++;
    }

    $html .= '</div></div>';

    return $html;
}

}
4

1 回答 1

0

既然我可以提供答案,我将把我的后续评论作为“答案”发布......

我的计时器中确实有一个“错误”,因为它正在计算 HTML 回显之后的结束处理时间。因此,发送到浏览器的数据量影响了处理时间,我希望在传输任何数据之前看到处理时间。

于 2012-08-30T20:08:45.383 回答