我在PHP页面中回复了大约五千行,问题是它冻结了,并且只有在所有回显过程结束时才继续加载页面和javascript代码。
如何在不使页面等待回显过程完成以完成加载页面的情况下进行回显?
当我回显类似于< 100行时,它加载速度很快,所以我猜PHP以某种方式制作其他所有内容等待完成装载。
网页:
<table>
echo $rows;
</table>
$ rows value(五千行,每行具有以下结构):
<tr>
<td>EXAMPLE</td>
<td>EXAMPLE</td>
<td>EXAMPLE</td>
<td>EXAMPLE</td>
<td>EXAMPLE</td>
</tr>
答案 0 :(得分:0)
PHP是服务器端的,它不会影响您的浏览器。当然,服务器可以有5分钟的响应时间,但它永远不会导致浏览器冻结。什么实际上冻结它可以是javascript或shockwave flash。
PHP以这种方式工作:
1)解析所有php代码 2)在服务器端创建HTML代码 3)将HTTP标头和HTML代码发送到客户端(浏览器)
所以在它结束创建HTML代码之前它永远不会发送任何内容。
答案 1 :(得分: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>
答案 2 :(得分:0)
关于不生成大规模表的各种方法的所有建议都是完全有效的。但是,这个问题是因为浏览器无法呈现表,直到它知道表中的所有内容(因此它可以调整列宽等)。
如果您准备生成大量表,那么您可以做的最好是优化表的显示属性。这篇超级旧的MSDN文章包含有关加速HTML表浏览器呈现的方法的信息:Building High Performance HTML Pages
基本上,使用固定大小的表格:
表格是组织信息的好方法。在CSS之前 定位是在Internet Explorer 4.0中实现的,很多HTML 作者甚至使用表格在他们的页面上布置元素。现在,如果 你还在使用表来实现后者,你应该使用它 层叠样式表(CSS)定位。 Internet Explorer 5 为那些接受CSS的人提供更好的性能。
当然,这并不排除完全使用表格。表仍然有一个位置,当您使用它们时,您应该指定表格布局CSS属性,以实现Internet Explorer 5或更高版本之外的最佳性能。通过执行以下操作,您将允许Internet Explorer在收到所有数据之前开始呈现表。
- 将表格布局CSS属性设置为固定在表格上。
- 明确定义每列的col对象。
- 在每个列上设置WIDTH属性。
同样,这是真的很旧信息,但在这种情况下它仍然有效。
尝试一下,看看它是否有助于加快渲染巨型表格。