gmail,gmail loading progress bar 实现原理

Gmail 登陆时,会显示一个progress bar, 显示加载的进度。
最先以为是模拟的效果,但是仔细观察发现,进度条是真实反映加载以及下载进度的,并不依赖网络状况。
所以非常好奇,因为在javascript中缺少检测文档下载进度的ApI(js的安全机制也禁止这样做),且只提供了加载开始,加载中,加载完成(或加载错误)等状态。那么,gmail 是如何实现实时监控加载百分比的呢?
用firebug 监控 gmail登陆时的文件下载,可以找到一个get请求,该请求返回html文本,文件大小为300多k,在其中找到这样一个函数:
function _B_prog(pct){ top["pr"] = pct; if (_B_thumbStyle_ === undefined) { var thumb = top.document.getElementById("lpt"); _B_thumbStyle_ = thumb ? thumb.style : null } if (_B_thumbStyle_) { _B_thumbStyle_.width = Math.round(pct * 0.99) + "%"; if (pct == 100) _B_thumbStyle_ = null } }
该函数在html body 后定义。定义可知,进度条由该函数动态实现。
再来看后面大段大段的标签结束处调用PrintWriter.flush(), 在该方法之后,服务器端输出流会马上推送至客服端,但并没有关闭输出流,下次还可以再次调用flush(), 这样就可实现一段接一段将资源推送至客户端,实现进度监控了,而不是像目前webQQ一样模拟从0% ,然后等待,然后突然升到100%完成。
搞定,休息!
Tags:  gmail打不开 gmail登陆 gmail邮箱 gmail

延伸阅读

最新评论

发表评论