播放性能优化策略:预加载crossdomain.xml和swf文件
Pc Web播放页播放流程始于Flash播放器Player.swf文件加载,终于广告第一帧画面呈现(从播放性能优化的角度来说)。整个播放流程都是在Flash播放器里面完成,所以播放性能的优化首先从加快播放器自身加载完成开始。另外,播放器在请求后台接口时也面临同源策略的限制,在请求每个跨域接口之前,播放器都要先去加载对应服务器上的crossdomain.xml文件。所以,预加载crossdomain.xml和swf看上去自然是很理想的优化手段。
预加载方案
使用(new Image).src="预加载资源url"方案在页面的header的其他资源加载之前进行预加载。这种方式简单暴力,不会面临跨域问题。

效果
第一组:正常播放页 VS 预加载7个crossdomain.xml播放页
办公内网监测:预加载crossdomain.xml组的广告第一帧画面呈现时间比正常组的平均提前100 - 200ms左右,IE8效果比Chrome明显。【稍后补图】
第二组:预加载7个crossdomain.xml播放页 VS 预加载7个crossdomain.xml+6个swf播放页
swf文件的预加载也是通过(new Image).src="预加载资源url"完成的。
办公内网监测:对于Chrome,预加载7个crossdomain.xml+6个swf组的广告第一帧画面呈现时间【下图预加载_fv组,蓝色】比只预加载7个crossdomain.xml组【下图正常_fv组,绿色】平均提前70 - 300ms左右。

对于IE8,预加载7个crossdomain.xml+6个swf组的广告第一帧画面呈现时间【下图预加载_fv组,蓝色】比只预加载7个crossdomain.xml组【下图正常_fv组,绿色】的 平均延后70 - 300ms左右。

虽然预加载crossdomain.xml文件和swf文件的播放性能优化效果不是很明显(2%-8%之间的效果),但是在预加载swf时,IE8和Chrome的正好相反的表现令人诧异:为什么预加载了swf文件字号,IE8的播放性能恶化了?
原因
到具体的单个测量用例中去分析,下面是从IE8上测量的预加载swf的播放页的http瀑布图中截取的部分请求性能数据:

可以看到预加载请求的Initial Connection建链接的耗时是40ms,Content Download内容下载是0ms。 而从下面的截图中可以看到,页面又发送了一次播放器swf文件下载请求,Initial Connection建链接的耗时是39ms,Content Download内容下载是1554ms。

预加载swf在IE8上根本没有达到目的,否则就不该发送播放器swf文件的第二次请求。之所以发送第二次请求,应该是第一次请求其实没有真正把swf文件下载到浏览器端缓存起来(预加载请求的内容下载用时为0)。
我们猜测,可能是IE8发现响应header的Content-Type值为application/x-shockwave-flash,非图片所接受的格式,就立即中断(new Image).src DOM请求了。 但奇怪的是,用同样的方式预加载crossdomain.xml文件(Content-Type为text/xml)就能下载成功。
改进
接下来就尝试用(new Image).src的替代方案来预加载swf。 因为面临跨域,所以先用iframe.src进行试验。明天出结果。
------------------------- 分割线 2014-09-07 -------------------------
预加载swf文件测量效果不太好。
最终采用了使用(new Image).src的方式预加载crossdomain.xml文件的策略:

未完。
blog comments powered by Disqus