在HTML之外的HTTP响应中返回数据?

时间:2011-08-22 08:03:08

标签: html http

基本上,我希望服务器能够将一些数据发送回客户端,除了这些数据只有在生成整个HTML blob后才可用。具体来说,我想在每个页面上放置一个渲染时间(TTR)指示器:

enter image description here

目前正在测量从第一个组件开始渲染到最后一个组件渲染点的时间。但是,这会错过所有其他内容所需的时间,例如在渲染主HTML Blob之前/之后继续使用的中间件(我正在使用Django)。

如果我从最后的后处理点测量它,我不能只将TTR字符串附加到HTML blob上,因为最终的/ html标记已经完成。我可以做一些聪明的正则字符串替换 - 把它插入里面的 blob,但感觉非常脏。

我可以追加结束/ body / html标签直到这个东西完成,但感觉同样很脏:我必须故意拆掉主要的“关闭”标签从页面的其余部分开始,我可以将TTR指示符放在这些标记之前。

无论如何我可以拥有一个完整形成的HTML页面,只需要在包含此信息的最终/ body / html标签之后添加一些标签,我可以将Javascript添加到我的TTR div中,虽然它仍然是有效的HTML?或者有没有办法传回元数据和HTML blob,我的Javascript可以读取并放入我的TTR div?或者还有其他更好的方法,我完全错过了吗?

1 个答案:

答案 0 :(得分:0)

为什么不在生成它时将容器放入HTML中,并使用您知道不会出现在文档中任何其他位置的字符串填充它。然后,您可以在“后处理后”中简单地str_replace()

你可以,如果你的感觉很勇敢,可以尝试和sprintf()做类似的事情,但我怀疑偶尔会导致奇怪的输出,因为sprintf的转换规范很简单,你可能会结束他们故意出现在文件的某个地方。另外(至少在我的PHP 5.2.17 / Win32上)sprintf()比单个替换术语的str_replace()慢。

如果您将页面生成为字符串并且直到最后都没有向浏览器发送任何输出,或者您是输出缓冲,那么可以设置可从Javascript访问的cookie并且具有浏览器执行document.getElementById('an_element').innerHTML = cookieValue; onload,但是我会说依赖Javascript这会给你带来另一层混乱的东西/通常会出错。

如果您在完成呈现HTML之后无法设置标题,因为您已经发送了一些内容,那么您将遇到与将数据静态放置在页面上相同的问题 - 您可以添加{{1在<script>之后...