【发布时间】:2016-12-31 03:13:41
【问题描述】:
几年前,我在以前的工作中编写了依赖渐进式渲染的 CGI 程序,因为这些 CGI 程序可能需要很长时间(几分钟)才能运行,大约每秒产生一行输出。我发现今天,即使使用最简单的示例,我也无法进行渐进式渲染。
我已经看到很多关于这个主题的建议,关于在哪里放置 CSS、脚本等。但是,下面的简单示例却没有。
我没有看到浏览器可以选择影响渐进式渲染的任何地方。我已经在具有多个浏览器(chrome、firefox、opera)的多个系统/设备上进行了尝试,结果都相同。
下面是一个简单的示例,我希望每 2 秒产生一些输出,但它会在整个文档完成时呈现。 我错过了什么明显的东西吗?
#!/usr/bin/env perl
select(STDOUT); $| = 1; # don't buffer stdout
print "Content-Type: text/html\; charset=ISO-8859-1\n\n" ;
print "<html> <head> <title> Testing </title> </head> <body>\n" ;
my $message = "<code>" .
"Why doesn't this render immediately? <br>\n" x 5 .
"</code>\n" ;
for ( my $i=0 ; $i < 5 ; $i++ ) {
print "$message\n" ;
sleep(2) ;
}
print "</body></html>\n" ;
【问题讨论】:
-
尝试添加
Transfer-Encoding: chunkeddeveloper.mozilla.org/en-US/docs/Web/HTTP/Headers/… -
谢谢。但是,它对我不起作用。我尝试了我在stackoverflow.com/questions/17153009/… 中发现的一种变体,在两个块之间休眠,并且禁用了 STDOUT 缓冲,它仍然等到整个文档被接收到。
-
事情很不对劲。文档说长度是十六进制,它只适用于十六进制,直到当十六进制长度从适用于 25 字节字符串的 19 变为 1a(或 1A)时,你得到一个 26 字节的字符串。然后它会使用“ERR_INVALID_CHUNKED_ENCODING”来解决问题。叹息。
标签: html perl progressive