进行页面刷新时,防止显示无样式页面

时间:2010-09-25 15:06:41

标签: javascript jquery html refresh loading

如何在页面加载时阻止我的页面显示无样式的视图? 我认为这可能是因为加载不同的JavaScript文件的顺序。 是否有最佳实践,例如在我自己的代码之前加载插件? 是应该在document.ready还是windows.load之后调用每个jQuery / .js函数?

link to page

由于

4 个答案:

答案 0 :(得分:4)

YSlow会为您提供一些关于此页面起点的好主意。引用您在www.cewas.org上运行它:

  1. D级开启减少DOM元素的数量。页面上有1489个DOM元素。复杂页面意味着要下载更多字节,这也意味着JavaScript中的DOM访问速度更慢。减少页面上DOM元素的数量以提高性能。

  2. 等级E减少HTTP请求此页面有11个外部Javascript脚本。尝试将它们合二为一。此页面有5个外部样式表。尝试将它们合二为一。减少页面上的组件数量可减少呈现页面所需的HTTP请求数,从而加快页面加载速度。减少组件数量的一些方法包括:组合文件,将多个脚本组合成一个脚本,将多个CSS文件合并到一个样式表中,并使用CSS Sprites和图像映射。

  3. 使用gzip压缩组件的F级。有15个纯文本组件应该被压缩发送...压缩通过减少HTTP响应的大小来减少响应时间。 Gzip是目前最流行和最有效的压缩方法,通常可将响应大小减少约70%。今天大约90%的互联网流量通过声称支持gzip的浏览器传播。

  4. 添加过期标题的成绩F.有61个静态组件没有远期到期日期......网页变得越来越复杂,它们上面有更多的脚本,样式表,图像和Flash。首次访问页面可能需要多个HTTP请求才能加载所有组件。通过使用Expires头,这些组件变为可缓存,从而避免了后续页面视图上不必要的HTTP请求。 Expires头文件通常与图像相关联,但它们可以并且应该在所有页面组件上使用,包括脚本,样式表和Flash。


  5. 添加我自己的2美分:您可能希望隐藏所有元素,直到整个页面加载。这似乎是你想要的进度条,但页面上的元素和脚本/样式的绝对数量似乎阻止它。您可以加载CSS / JS / HTML的最小子集来设置进度条,然后在一些异步Javascript中加载其余元素,只有在加载完所有页面后才能显示完整页面(一个Gmail)。

答案 1 :(得分:3)

您网站的主要问题是您尝试在初始页面加载时一次性加载所有内容。 Web开发人员工具栏的文档大小报告显示总共1.1mb的内容 - 这将是近750kb的图像和385kb的脚本。一次性加载这一数量的内容真的不推荐,特别是对于较慢的连接速度。

显而易见的解决方案是隐藏所有内容并仅在脚本准备就绪时显示它,但这是一个非常糟糕的解决方案 - 您的访问者将查看超过10秒或更长时间的空白页面。你应该做的是重组网站 - 重新考虑你的架构。网站并不是一次性下载的 - 数据太多,也是用户不喜欢Flash网站的原因之一,因为Flash必须一次性下载所有资产,因此用户被迫长时间待命等待时间。

您应该将页面分解为普通的HTML文档,这些文档将传统加载,或者使用ajax按顺序加载内容。让您的脚本智能地重新排序内容的加载 - 首页内容,然后当用户选择他要去的地方时,他背后的网站加载这些页面的资产。图像是这里的一个大问题 - 你有.7mb,并加载所有这些都会在很长一段时间内阻止网站的加载,包括脚本。

这些都不是一件容易的事,但这是纠正问题的最佳方法。

你问题的一些更直接的解决方案包括@matt b所说的大部分内容 - 启用gzip压缩,将所有脚本和样式表组合到一个文件中等等。你还应该考虑使用CSS sprites来减少数量HTTP请求。有大量的jQuery插件是合并的主要候选者,而且你还要加载jQuery两次 - 为你需要加载的东西增加近100kb。

答案 2 :(得分:0)

我假设您使用的是外部样式表? 如果您只是在页面中嵌入所有样式,它将不会显示为无样式。 另外,将样式表定义放在标题中的任何javascript代码之前。

答案 3 :(得分:0)

它通常被称为FOUC - 无格式内容的Flash。上面答案中的选项具有重要意义,但在所有情况下仍然无法消除。最初它和IE有问题,但最近在Safari中发生了很多,可能与浏览器应用程序本身使用的底层方法有关,因此可能无法修复。

有时候诸如jQuery和typekit之类的插件会加剧这个问题,因此会密切关注并测试加载它们的不同场景。