iframe异步加载技术及性能

 英文原文:Iframe loading techniques and performance
 
iframe会阻塞主页面的onload事件

  阻塞主页面的onload是这两个问题中最影响性能的方面。一般都是想让onload时间越早触发越好,一方面是用户体验过更重要的是google给网站的加载速度的打分:用户可以用IE和FF中Google工具栏来计时。
  那么为了提高页面性能,怎样才能不阻塞主页面的onload事件的来加载iframe呢?
  这篇讲了四种加载iframe的方法:普通iframe,onload之后加载iframe,setTimeout() iframe和异步加载iframe。每种方法的加载结果我都用IE8的时间线来展示。我建议多注意下动态异步加载这个方法,因为这是性能表现最佳的。另外,还有一种友好iframe(friendly iframe)技术。它可能算不上是iframe加载的技术,但是必须使用iframe,它是无阻塞加载的。

普通方法加载iframe
 这是一种人尽皆知的普通加载方法,它没有浏览器的兼容性问题。

<iframe src="/path/to/file" frameborder="0" width="728" height="90" scrolling="auto"></iframe>

使用这种加载方法会在各浏览器中有如下表现:

  1. iframe会在主页面的onload之前加载
  2. iframe会在所有iframe的内容都加载完毕之后触发iframe的onload
  3. 主页面的onload会在iframes的onload触发之后触发,所以iframe会阻塞主页面的加载。
  4. 当iframe在加载的过程中,浏览器会标识正在加载东西,处于忙碌状态。

我的建议:注意onload阻塞。如果iframe的内容只需要很短的时间来加载和执行,那么也不是个大问题,而且使用这种方法还有个好处是可以和主页面并行加载。但是如果加载这个iframe需要很长时间,用户体验就很差了。你得自己测试一下,然后在 http://www.webpagetest.org/ 也做些测试,根据onload的时间看看是否需要其他加载方法。

在onload之后加载iframe

如果你想在iframe中加载一些内容,但是这些内容对于页面来说不是那么的重要。或者这些内容不需要马上展现给用户的,需要点击触发之类的。那么可以考虑在主页面载入之后加载iframe。

 <script> 
 //doesn't block the load event
 function createIframe() {
 var i = document.createElement("iframe");
     i.src ="path/to/file";
     i.scrolling ="auto";
     i.frameborder ="0";
     i.width ="200px";
     i.height ="100px";
     document.getElementById("div-that-holds-the-iframe").appendChild(i);
 };
  // Check for browser support of event handling capability
  if (window.addEventListener) window.addEventListener("load", createIframe, false);
  else if (window.attachEvent) window.attachEvent("onload", createIframe);
  else window.onload = createIframe;
  </script>

 这种加载方法也是没有浏览器的兼容性问题的:

  1. 其他等待主页面onload事件的代码可以尽早执行
  2. Google Toolbar计算你页面加载的时间会大大减少
  3. 但是,当iframe加载的时候,还是会看到浏览器的忙碌状态,相对于普通加载方法,用户看到忙碌状态的时间更长。还有就是用户还没等到页面完全加载完的时候就已经离开了。有些情况下这是个问题,比如广告。

猜你喜欢

转载自blog.csdn.net/MisTTT/article/details/73618957