【发布时间】:2019-07-12 05:59:04
【问题描述】:
Firefox 和 Chrome 都过早地渲染我的页面,这导致我在几个框架中首先看到页眉,然后是内容,然后是页脚。这是一个非常非常不愉快的页面加载体验。
我现在解决这个问题的方法是这样,我想避免这种愚蠢的解决方法。它还会导致页面在 Chrome 中闪烁白光。
<!DOCTYPE html>
<html>
<head>...</head>
<body>
<div id="render-all-at-once" style="opacity:0; min-height:100%;">
content
</div>
<script>
document.getElementById("render-all-at-once").style.opacity = 1;
</script>
</body>
</html>
问题基本上是这样的:
<script>
function sleep(millis) {
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while (curDate - date < millis);
}
</script>
<div>
This will be rendered in the first frame.
</div>
<script>
sleep(3000);
</script>
<div>
And only after that first frame has been rendered will you see this line. You don't see the first line for 3 seconds as
you might, but you do see it flash, right before both lines are displayed.
</div>
<!---
I would like the browser to not render anything until
the entire entire document has been processed.
--->
在独立测试中,上述代码似乎按预期工作 - 两行将在 3 秒后同时呈现。但是当我开始向页面添加几个随机样式表时,问题就开始出现了。
我似乎无法将其缩小到任何特定的样式表或样式。我不知道是什么原因造成的。我都尝试从 加载所有样式表,或者只是将它们全部内联到样式元素中。这没有任何区别。我正在使用 Chrome 对此进行测试,因为它似乎在那里更频繁地发生。
有没有人遇到过这类问题,或者知道是什么原因造成的,并且知道有什么方法可以预防?
【问题讨论】:
-
sleep 功能可能是您的某些问题的原因。这是一种存在严重缺陷的方法,在达到限制之前会消耗尽可能多的 CPU。
-
@RobG 只是为了模拟随机处理。即使没有涉及 javascript 并且只有很多元素需要处理,问题似乎也会出现。
-
@BjarkeCK——早在拨号上网的早期,一些浏览器在整个页面下载之前不会显示任何内容。用户不喜欢它,他们更愿意尽快看到内容并忍受刷新和布局“抖动”,而不是盯着空白页面想知道是否发生了任何事情。这就是我所知道的所有浏览器都进行渐进式显示的原因。最好采用一种将渐进式显示问题最小化的方法,而不是在页面加载之前隐藏页面。
-
@RobG 哦,这实际上是一个非常酷的见解,他们在过去会这样做是有道理的。但我强烈反对在今天逐步加载网站是一个好主意。如果您正在构建一个非常快速且快速的网站,那么天哪,浏览器决定通过显示未完成渲染网站的几帧来破坏体验,即使一切都在 10 毫秒后准备就绪,这很烦人。我认为我们应该始终为更好的网站和更好的用户体验而努力,而浏览器应该使我们能够做到这一点。
-
不是每个人都有快速连接 移动连接可能参差不齐。还有农村社区(想想加利福尼亚北部的农村,比如奇科:山区的 Trinity,所有的连接仍然很慢,而且很难找到蜂窝信号,时期。)即使是圣克鲁斯也有许多蜂窝死区 - 它是 真的靠近硅谷。我明白你的意思。但你的经历可能是一种特权。祝您找到解决方案好运,但请记住为其他所有人提供良好的后备方案。地理位置可以在连接可用性和速度方面发挥作用。
标签: javascript html css