代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

如何强制IE在完成所有javascript执行之前显示页面内容?

  •  0
  • nonopolarity  · 技术社区  · 14 年前

    在RubyonRails开发环境中,在火狐上30秒后会显示一个页面,但在IE8上需要90秒(使用IE7兼容模式)。

    进一步的调查显示,应该是javascript减慢了页面的速度,因为如果关闭了javascript,那么页面内容也将在30秒内显示出来。

    因为可能有7或8个jquery插件、facebook脚本和google分析脚本,所以将所有的javascript代码移动到HTML文件的末尾需要相当长的时间(这将加快页面内容视图的速度,以便在30秒后显示内容,就像firefox一样),有没有一种方法可以强制ie在e是否完成所有javascript代码的执行?

    我认为IE可能在等待所有的javascript代码首先完成,因为如果有 document.write() 语句,应该在HTML中…Firefox或Chrome不会等待,而是立即显示内容。

    (在生产服务器上,该页面将在5到7秒后显示在Firefox上,因为许多“部分”(HTML子组件)都被缓存。IE 8也需要更长的时间,大约40秒左右。)

    附笔。 JavaScript嵌入整个HTML的一个重要原因可能是,假设有一个“图像传送带”,那么HTML代码在一个“部分”中,这是一个由HAML文件生成的HTML文件,所有HTML和JavaScript代码都在这个文件中,以便更好地封装,而不是将HTML放在一个文件中,而JavaCrip在另一个文件中,但是我想知道如果所有这些javascript代码块只使用jquery的 $(document).ready(function() { ... }) ,那么这些代码块会减慢IE上的页面显示速度吗?

    2 回复  |  直到 13 年前
        1
  •  0
  •   Keith Adler    14 年前

    不幸的是,假设jquery插件都在等待DOM完全加载到IE中是安全的。一种解决方案是尝试加快页面加载速度。以下是一些很好的方法:

    1. 不要自己托管jquery。从Google或Microsoft CDN加载。这将减少与Web服务器的连接。
    2. 通过jquery动态加载内容。事后很难对内容进行重新布线,但这肯定会让您逐步加载内容,并给人留下页面加载速度更快的印象。
    3. 如果可能的话,把所有的javascript放在页面的底部。
    4. 尽可能消除jquery中对document.ready的调用。
    5. 使用此jquery插件延迟加载图像: http://www.appelsiini.net/2007/9/lazy-load-images-jquery-plugin 这将导致在页面初始显示期间下载的内容更少。
    6. 对托管脚本和图像或至少在另一个域中使用第三方cdn。从同一域加载是一个瓶颈
        2
  •  0
  •   Samuel Mburu    13 年前

    我也会建议日产风扇在第3点所说的话,但有一个修正案。将所有不必要的脚本移动到页面底部,只留下头部jquery和可能还有一个脚本。

    我建议的另一件事是研究使用lab.js,它强制浏览器并行处理JS和其他页面项,因此允许您在加载过程中节省相当多的时间。

    http://labjs.com/

    推荐文章