2012-12-16 62 views
10

在我的網站(使用drupal運行)中,ob_flush函數需要很長時間(10-100秒)才能執行。我如何找出原因?什麼會導致這麼長時間? enter image description hereob_flush需要很長時間才能執行

+0

是什麼讓你覺得這個功能凍結你的應用程序? – ualinker

+0

@ualinker請看我剛剛上傳的圖片 – user16948

+0

你能否也請將代碼粘貼到'ob_start()'和'ob_flush()'上下文中? – ualinker

回答

0

使用

<?ob_start();?> 

在頁面的開頭和

<?ob_flush();?> 

在頁面的結束,來解決這個問題。

0

SET

output_buffering = Off

在php.ini

2

試試這個:

ob_start(); 
//Your code to generate the output 
$result = ob_get_contents(); //save the contents of output buffer to a string 
ob_end_clean(); 
echo $result; 

它運行快給我。

0

[您可能想用Drupal標記您的問題,因爲這可能是Drupal問題。具體而言,我懷疑當你刷新緩衝區時,你正在寫入一個外部緩衝區,這會觸發大量鉤子來過濾剛剛寫入的數據。]

我懷疑你的問題是嵌套緩衝區。 Drupal真的很喜歡緩衝區,並且緩衝了所有的地方。檢查結果:

echo "<pre>\nBuffering level: "; 
    . ob_get_level() . 
    . "\nBuffer status:\n" 
    . var_dump(ob_get_status(TRUE)) 
    . "\n</pre>"; 

如果你有嵌套的緩衝區,然後我懷疑使用ob_flush()會爲你做什麼:它只是你的附加內部緩衝的內容寫入緩存的下一個最外層。

嵌套的緩衝區可以來自Drupal本身(上面會顯示),也可以來自zlib-output-compression和output_buffering的設置(試着找出它們是否改變了什麼)。

如果緩衝區沒有嵌套,和上面的設置沒有幫助,那麼你可能還需要有分裂的操作成片,並運行剖析,看看哪些部分佔用的時間:

$data = ob_get_contents(); // Return the contents of the output buffer. 
ob_clean(); // Clean (erase) the output buffer. 
ob_end(); // Close the buffer. 
echo($data); // Output our data - only works if there's no outer buffer! 
ob_start(); // Start our buffer again. 

然而,問題變成了「你想完成什麼?」你認爲ob_flush()在這裏做什麼?因爲如果答案是「我想把我迄今爲止所做的一切都推到瀏覽器中」......那麼我擔心ob_flush()並不是正確的方法。

相關問題