关于"Flash运行时阻塞"

Posted on October 18, 2012

最近在做资源加载模块,发现加载大文件的时候,UI直接冻结了,进度条当然就不更新了。然后就想起原先看过的这篇文章:Flash运行时阻塞,文章里说Loader或者URLLoader加载文件的时候,不是异步的。并且给了测试代码。文章里说的似乎跟我的测试结果是一致的:我在加载大文件的时候,各种掉帧,只有当一个文件加载完成的时候,才能刷新一次屏幕。不过转念想下,要是真的是这样,那就太悲剧了。因为加载文件不是异步的,也就是加载过程不会刷新屏幕,如果只加载一个文件,那岂不是永远看不到进度信息了?但是网页上那么多游戏都是正常显示进度条的,这不科学啊。起初以为又是单机版FP的bug,就加了HTML包装器放在浏览器里跑,仍然看不到加载进度。

最后全面测试了一遍,结论是:加载是异步的,但是你加载的文件必须来自服务器,而不是本地。你可以把那篇文章里的代码再跑一遍试试。把加载的文件改成远程服务器。就不会出现阻塞了。如果你还觉得有可能是网速不够快造成的。那就本地架设一个Apache(跟本地读取文件一样的速度),用http://localhost/来加载。结果仍然是不会阻塞。也就是说,你的工程如果发布到外网上,就是正常的。我猜测阻塞是因为本地运行时,loader可能不是通过Http请求加载文件的,而是和AIR的File共用了一套机制,导致加载是同步的,造成了阻塞。如果你知道真正的原因,欢迎留言告诉我。 :)