Tab 切换可能引发 flash 重新下载

Tab 切换是一个常见的功能特性,称呼好像很多,比如焦点图、舌签切换等,我常叫为 Tab 切换。一个示意图如下:

yahoo tab 切换

普通的切换显示文字、图片,甚至是 Ajax 加载一般都不会有什么问题,不过,最近在做 flash 切换的时候发现了个问题,采用 display:block / none 来控制显示隐藏会导致 flash 重新加载。需要说明的是,并不是简单的重新渲染,而是重新请求下载。

具体可以看下切换时的网络数据:

flash reload

说明一下,以上数据是我切换两个 Tab 来切换 flash 时的网络数据,这两个 flash 都是优酷上面的视频。可以看到,每次都有3个请求(其中一个是302重定向)。

这意味着每次切换都需要重新去请求视频内容,然后重新渲染。先不说一旦 flash 体积大而导致的下载缓慢等问题,这种切换还会导致 flash 重新播放。简单来说,就是如果原本一个视频已经看了一般,你切换到另一个视频,再次切换过来时需要重新缓存、从头再看。如果只是像 swf 这种文件还好,可以利用浏览器缓存,只是传输一次 304,不过像在线视频这些,则会完整地传送一次

对于 flash 广告来说,或许广告主会很喜欢这种形式,因为可以完整地展示一次广告内容,但对于视频类来说就不是一件好事了。

Google 了一下这个问题,泡泡堂提到的一个解决方法是使用绝对定位

我试验了一下,使用绝对定位和 z-index 都是可以的。详细的效果和代码还是看Demo 吧。