php
  • performance
  • echo
  • 2012-05-12 33 views 0 likes 
    0

    我對頁面加載時間一個實際的問題:PHP回聲緩慢而不是一次回顯所有內容?

    假設我想下面的輸出:

    <a class="class-a" href="www.google.com"></a> 
    

    它更快(相對於加載時間和效率)做:

    <a class="<?php echo $class_a; ?>" href="<?php echo $url; ?>"></a> 
    

    echo "<a class='$class_a' href='$url'></a>"; 
    

    這是的縮影一個更大的問題 - 如果我在頁面上多次使用echo,嘗試將HTML輸出壓縮爲一個變量並一次回顯它會更好?

    謝謝!

    +1

    雙引號字符串需要由PHP解釋,而HTML標記(除了替換)不能被解釋。如果你大量使用雙引號字符串,這可能會比較慢,但可能不是很多。只是一個提示:如果你在一個「模板」(即很多HTML標記,只有幾個替代品)內使用PHP,有一個很好的捷徑: Javaguru

    +0

    請在這裏問實際問題,而不是理論問題。請參閱FAQ。 – hakre

    回答

    4

    這兩個真的沒有區別。一個或兩個回聲無關緊要。 1000回聲並不重要。真的,當你看到事物的宏偉規模時,回聲並不重要。我可以在我的筆記本電腦上每秒運行500萬回波。做一個需要1ms或2ms運行的SQL查詢意味着你或多或少地獲得5000個回聲調用的差異。這是多麼無關緊要。

    你想要做的是用分析器查看你的代碼,如果你有性能問題找到瓶頸,但不要擔心你做了多少回聲。順便說一下,您可能應該使用類似Twig的東西來打印HTML,而不是像您的示例中那樣使用原始PHP,但至少這會爲您提供自動HTML實體轉義,從而保護您免受XSS影響。

    1

    在性能方面,第二個更快,因爲打印到輸出是昂貴的操作。但是你應該小心,不要爲了快速執行的代碼而犧牲代碼。

    +0

    我不認爲第一個不是一個簡單的代碼。恕我直言,這完全相反。第一個直接告訴你:在一個字符串中有PHP打印變量。大多數語法熒光筆甚至不會告訴你'$ class_a'和'$ url'是第二個變量。也許這將在性能和可讀性方面更好:'echo'';' – YMMD

    +0

    好吧..用ob_start()和ob_end_flush()包裝它,它更快,我猜.. – Javaguru

    +0

    @YMMD:同意,實際上,我從來沒有說過,第二個更具可讀性(對不起,如果我暗示),這只是一個觀點,因爲人們傾向於在錯誤的地方尋找表現,你的解決方案也是一個很好的順便說一句。 – memo

    0

    完全沒有意義的微觀優化。究竟有什麼區別取決於你使用的是什麼PHP運行時,但與任何類型的DB訪問,服務器配置和字節碼緩存相比,這將是完全不相干的。

    如果性能很重要,這不是你應該擔心的事情,即使是第二個,尤其是

    +0

    whar如果我正在討論比較迭代1000次的循環中的兩個內部? –

    +0

    @ j-man86:運行一個基準,如果你想確定,但我願意打賭你2:1,它仍然無所謂。 –

    1

    我已經執行了一個類似於你之前詢問的測試。

    在你發佈的兩個例子中,我發現第一個例子比第二個例子稍微慢一些。

    如果您將輸出存儲在緩衝區之前,您將使用更多的內存,並且它比您提供的兩個示例中最慢的一個稍慢。

    正如其他人已經指出,這是完全不相關的,我會放鬆易維護性和可讀性超過任何類型的速度優化,你認爲你可能會得到。

    相關問題