2012-07-10 75 views
0

如果某個php頁面正在運行一些長時間的進程,例如sleep或while循環,這會讓它花費一段時間直到它加載,是否會影響來自同一頁面的其他進程?,
我注意到當我嘗試打開同一頁面不同的短過程,它也需要很長的時間來加載,並明確它沒有加載之前第一個(長過程)呢,PHP頁面進程分離

是真的,或者是我的代碼有什麼問題以及如何預防它?
我認爲它與緩存有關,但我不想在得到提示或答案之前搞砸

回答

1

我注意到,當我嘗試用不同的短 過程中打開同一個網頁,[...]它不是第一個(長期的過程)確實

最常見的前加載原因:

  • 您的腳本使用PHP會話「原樣」,它使用文件鎖定。文件鎖定機制一次只能確保一個腳本可以編輯每個用戶的會話數據,但這確實意味着提供來自同一用戶的兩個請求同時發生,第二個腳本在第一個腳本完成之前不會啓動,如果它們都依賴(兩個不同的用戶有不同的會話文件,所以他們不會碰撞)
  • 瀏覽器自動檢測頁面花費很長時間,並在後臺故意拖延後續請求 - 我相信這是谷歌瀏覽器默認做的事情。

兩種情況都是相對安全但由於時滯僅存在情況下,同一個用戶試圖同時其加載多個網頁是不常見 - 不同的用戶將看不到延遲的實際頁面需要,無論多長時間加載。

更多關於專題in this excellent SO answer

+0

是的,他們使用會話,是否可以通過編輯php.ini或其他任何東西來防止這種情況? – Osa 2012-07-10 02:44:40

+0

應用程序中的每個用戶是否應該同時加載多個頁面?因爲通常這不是必需的。 – Mahn 2012-07-10 02:49:47

+0

嘿,真的非常感謝你關於會議的注意事項,我使用這個http://konrness.com/php5/how-to-prevent-blocking-php-requests/解決了這個問題,因爲我不需要寫任何東西,只是閱讀,+++ 1 – Osa 2012-07-10 02:51:49

2

PHP在單個進程中運行,每次訪問頁面時,都會啓動進程,過程,並完成。 每個進程不會影響其他進程。

+0

就像Apache ... – 2012-07-10 02:15:47