我有一个长期运行的报告,并希望在生成报告时向用户显示一个等待旋转器。我已经完成了这项工作,但不确定我是否以最好或正确的方式做这件事。
这是使用 ColdFusion,但我猜它可以是任何语言。在页面顶部,我有一些 Javascript (jQuery),它显示了一个等待旋转器,另外还有一个 documentReady 处理程序,我可以在其中将旋转器取下来。我刷新输出(如果重要的话),然后其余代码将处理报告内容。这并没有渲染旋转器,我推测,即使我正在服务器上刷新内容,但在此过程中发生了一些缓冲,并且浏览器永远不会看到旋转器代码,直到为时已晚。因此,我在刷新吐出几百行 HTML 注释之前添加了一个循环。微调行数后,就成功了。我当时认为其他网站也是这样做的。
但是:今天,在观看我的另一个页面逐行吐出长期运行作业的状态时,我突然想到该页面会在每行之后刷新,并且浏览器会根据需要增量呈现该页面。这与我上面的结论不符,现在我不知道规则是什么。有没有可预测的方法来做到这一点?每个浏览器都有不同吗?
澄清:我很欣赏尝试解释等待旋转器的正确方法的答案,但我只是使用等待旋转器作为示例来说明我真正的问题:是否有可靠的方法来预测浏览器何时开始渲染HTML 是通过网络传输给他们的吗?通过观察可以明显看出,浏览器不会等待 /html 标签开始工作。这个问题不一定与Javascript有任何关系。例如,我描述的显示状态的第二页是纯 HTML。
除了 Firefox 的内置延迟之外,还有其他区域会导致浏览器在渲染之前等待。
当 html 页面发送到浏览器时,它首先必须决定内容的去向,然后才能绘制屏幕。例如,表格因导致渲染延迟而臭名昭著。为了绘制表格,浏览器需要计算列大小。如果您使用百分比作为列宽或根本不指定它们,则浏览器必须在渲染之前获取整个表格。
但是,如果您使用类似的东西table-layout: fixed;
css 属性,那么浏览器就可以读取第一行并在数据输入时开始绘制。
其他标签可能会导致类似的问题。基本上,每当浏览器必须计算内容的大小时,它就必须渲染所有内容。如果您可以通过使用固定大小(宽度/高度)元素提前给出提示,那么浏览器不需要计算出任何内容,并且可以在下载元素时绘制它们。
作为一条自我强加的规则,我从不让浏览器决定任何事情。相反,我给元素固定大小。因此,我工作的网站通常具有闪电般的快速渲染速度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)