2012-11-20 57 views
-6

我有一個循環,看起來有點像這樣PHP循環阻塞其餘代碼執行

[CODE] [BIG LOOP] [SOME MORE CODE] 

我所面臨的問題是,只要迴路運行時,PHP代碼素文字不要繼續並加載頁面的其餘部分([更多代碼])。我怎樣才能解決這個問題?任何指針?

正在執行的循環是從MYSQL數據庫獲取數據,下載並保存圖像。之後,它刪除臨時MYSQL數據。

但是,循環所做的事情並不重要IMO每循環都會阻塞正在進行的代碼,直到循環完成。

所以我的問題是,是否有任何possility執行循環,但也繼續在代碼?如果沒有(我在想什麼)是否有任何合理的解決方案,我可以如何工作,因爲我想在這個頁面上加載「codeblocks」。我認爲將代碼分解爲2個.phps並將它分離出來會面臨同樣的問題。

+1

你需要優化你的循環。你應該提供關於你在這個循環中做什麼的信息。 –

+4

這不是有效的PHP。 – AndreKR

+0

顯然:不要在那裏執行這樣的長時間運行的代碼。如果不知道細節,就不可能提供更多有建設性的建議。 – deceze

回答

3

你可以嘗試:

[CODE] [SOME MORE CODE] [BIG LOOP] 

但是,如果「更多的代碼」依賴「大循環」,那麼你有問題。這裏有一些想法:

  • 優化你的循環。你可能會在循環中產生某種嚴重的低效率。
  • 減少工作量。也許你不需要處理整個大循環,並且可以做更少的處理。
  • 緩存結果。如果經常執行相同的循環併產生相同的結果,也許可以將結果保存在文件/ APC/memcached中?
  • 使用AJAX。加載一個沒有來自大循環的數據的頁面,然後讓該頁面使用AJAX加載你需要的數據。你可以用一個很好的'請等待,而我們得到你的數據'信息/圖標/任何一個頁面。
+0

它不取決於循環。這只是網站的頁腳。但沒有它看起來醜陋。所以我正在尋找一種方法來周圍工作。我會嘗試一些你的建議,因爲我想在這個項目中使用AJAX。 – Johnny000

0

如果[BIG LOOP]結果需要計算,也需要[SOME MORE CODE]然後纔出現在HTML:沒有解決方法。我在說這個,如果[CODE=HTML] [BIG LOOP=PHP] [SOME MORE CODE=HTML]。否則,要更精確(或給出代碼)。 當你說「加載頁面的其餘部分」是否指「加載HTML頁面」?在這種情況下,所有PHP代碼都必須已經執行。 雖然你可能應該進行不同的,這裏是一個可能的絕招:

[CODE] [DIV FOR AJAX] [SOME MORE CODE] [AJAX INSTRUCTION TO LOAD RESULT OF BIG LOOP IN DIV] 

也就是說,現在,是一個非常聰明的辦法可能是在PHP編程方面有點殘酷!