PHP - 加载页面后填写表格内容

时间:2014-10-05 16:11:37

标签: php html iis-7.5 page-load-time dynamic-pages

我创建了一个PHP文件,设置为读取本地文本文件的内容,解析为数组,然后在主页面中填充表格。但是,即使只有53行此文本文件在显示任何内容之前加载页面大约需要10秒钟。

我知道这是一个限制,服务器需要在将其发送到客户端之前创建整个html文件,并且这一代需要时间取决于要生成的内容的大小,这意味着这10秒可能会增加要处理更多行。最终产品将有超过500行处理,因此生成需要几分钟,然后发送给客户。

我想知道我是否可以绕过这个,向客户端发送一个包含空表的小html文件,然后开始使用PHP填充并填充此表,但我不确定如何解决这个问题。我会将include调用一个单独的php文件来调用生成代码,还是让服务器一次“流”出一行表的内容?

相关网页是:http://zionfox.net/cards.php。当前加载时间大约需要7-10秒,我想通过加载核心表来减少这一点,然后显示源表生成的表行。

编辑:有更大图像的原因:当放大移动设备时,我宁愿图像像字体一样清晰锐利。我尝试使用实际大小的图像(20px),放大后它们变得几乎不可读。我意识到.png可能不是最好的格式,但这是我第一次使用file_put_contents()并且我并非完全确保源文件的图像,也不确保图像保持透明度。

编辑:编辑:文件的来源是:http://zionfox.net/cards.php.txt - 请原谅代码的粗糙,它仍在进行中,我想在整理代码之前先让它工作。

使用explode()将文件拆分为由字符分隔的数组。然后使用更多explode() s将这些数组中的每一个拆分为更多数组,然后处理此数组的每个部分以查看条件是否匹配,并根据值返回正确的结果,包括从外部源提取图像如果我还没有图像。然后在for循环的底部将echo编辑为$handle = fopen($pathToFile, "r"); if(ob_get_level() == 0) ob_start(); if($handle) { while(($line = fgets($handle)) !== false) { echo $row . "<br />"; //The code you want to process ob_flush(); flush(); } } ob_end_flush(); fclose($handle); 以创建新的表行,然后重复下一行的过程。


感谢Tenhsor,解决方案:

%windir%\system32\inetsrv\appcmd.exe set config /section:handlers "/[name='PHP53_via_FastCGI':ResponseBufferLimit:0"

在他们的回复中找到了完整的解决方案。

我还想补充一点,这个代码本身并没有解决我的问题。我正在运行IIS 7.5并且必须发出命令才能使其正常工作。该命令取决于您的PHP版本,您应该可以通过IIS找到它。给cmd.exe的命令是:

PHP53_via_FastCGI

其中{{1}}是PHP的名称和版本。

2 个答案:

答案 0 :(得分:1)

如果文件的解析很简单(意味着不涉及复杂的逻辑),则处理时间不应超过10秒。检查您是否可以以某种方式优化代码或在此处显示。

如果您的内容不经常更改,您可以考虑的一件事就是缓存。这意味着您只计算一次表并重用这些计算值并将它们发回给浏览器。

有关详细信息,请参阅:http://www.slideshare.net/anisniit/caching-new

答案 1 :(得分:1)

您可以使用flush php函数向客户端发送大量信息。 例如,如果您使用循环显示html表,则可以执行以下操作:

file = @fopen('path/to/my/file', 'rb');
$buffer = 1024 * 8;
echo '<table>';
while (!feof($file)) {
    echo '<tr><td>'.fread($file, $buffer).'</td></tr>';
    ob_flush();
    flush();
}
echo '</table>';

ob_end_flush();