2014-12-04 70 views
-1

我在PHP頁面迴響約五千行,問題是它凍結,並且它只在所有回顯過程結束時才繼續加載頁面和JavaScript代碼。

如何在不使頁面等待echo進程完成以完成加載頁面的情況下進行回顯?

當我回復像< 100行時,它加載速度很快,所以我猜PHP會以某種方式讓所有其他內容等待完成加載。

頁:回聲大量的HTML沒有凍結瀏覽器

<table> 
    echo $rows; 
</table> 

$行值(5000行,每行具有以下結構):

<tr> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
    <td>EXAMPLE</td> 
</tr> 
+6

我不得不問的原因是你爲什麼回聲5000行......我認爲這是數據庫信息,但爲什麼?另外,你有沒有考慮過濾結果,分頁等? – 2014-12-04 19:21:11

+1

凍結是瀏覽器無法完成加載頁面。 @TimLewis說,你無法用PHP控制它 - 最好只輸出一定數量的字段並利用分頁/過濾。 – 2014-12-04 19:24:18

+0

也許你可以嘗試使用AJAX調用來獲取HTML而不是回聲。你打算爲結果分頁,對吧?這樣可以請求更小的塊。我的意思是,有5000行...如果是這樣,那將是一個很好的方法! – Todd 2014-12-04 19:26:11

回答

0

所有關於不產生大量的表的各種方式的建議是完全有效的。然而,這個問題是因爲瀏覽器在知道表中的所有內容之後才能渲染表格(所以它可以調整列寬度等)

如果您設置爲生成大量表格,則可以做的最佳操作是優化表格的顯示屬性。這個超級老MSDN文章包含有關如何加快HTML表格的瀏覽器渲染信息:Building High Performance HTML Pages

從本質上講,使用固定大小的表

表是組織信息的好方法。在Internet Explorer 4.0中實現CSS 定位之前,很多作者甚至使用表格在其頁面上佈置元素。現在,如果 仍然使用表格來實現後者,則應該使用 級聯樣式表(CSS)定位。 Internet Explorer 5 爲那些擁抱CSS的人提供了更好的性能。

當然,這並不排除完全使用表。表格仍然有一個位置,當您使用它們時,您應該指定表格佈局CSS屬性以實現Internet Explorer 5或更高版本以外的最佳性能。通過執行以下操作,您將允許Internet Explorer在收到所有數據之前開始渲染表。

  • 將table-layout CSS屬性設置爲固定在表上。
  • 爲每列明確定義col對象。
  • 在每個col上設置WIDTH屬性。

再次,這是真的老信息,但它仍然是有效的在這種情況下。

試一試,看看它是否有助於加快渲染你的巨大表格。

0

PHP是服務器片面的,它可以在不影響您的瀏覽器。當然,服務器可以有5分鐘的響應時間,但它永遠不會導致瀏覽器凍結。實際上凍結它可以是JavaScript或衝擊波閃光。

PHP這樣工作:

1)解析所有的PHP代碼 2)創建服務器端的HTML代碼 3)發送HTTP標頭和HTML代碼,客戶端(瀏覽器)

,使之永遠發送任何東西,直到它結束創建HTML代碼。

0

PHP是一種服務器端語言,這意味着當您打開您的網頁時,PHP在執行其他任何操作之前執行。你可以做的是集成一些jQuery來加載行,或者甚至可以在頁面上使用嵌入式iframe來讓腳本在行之前加載。

jQuery的:(未經測試)

<html> 
    <head> 
    <title>Your page!</title> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    function loadstuff() { 
     // Borrowed from: http://www.w3schools.com/jquery/jquery_ajax_get_post.asp 
     $.get("get_rows.php",function(name,data){ 
     $("#table123 tr").append("<td>"+name+" ... "+data+"</td>"); 
     }); 
    } 
    window.onload = loadstuff; 
    </script> 
    </head> 
<body> 
    <h1>Load some stuff</h1> 
    <table id="table123"> 
    <tr> 
    </tr> 
    </table> 
    </body> 
</html> 

的iFrame:

<html> 
    <head> 
    <title>Your page!</title> 
    </head> 
    <body> 
    <h1>Your Page!</h1> 
    <iframe src="www.example.com/slow_loading_rows"></iframe> 
    </body> 
</html>