2014-12-04 96 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>