读书人

JS 与 AS 交互及效率对照

发布时间: 2012-11-22 00:16:41 作者: rapoo

JS 与 AS 交互及效率对比

?

? ? 想象下有这样的业务场景,我用flash实现了文件的上传,上传完之后,我们可能需要在页面上弹个提示框告诉用户上传结果。我们不可能把所有东西都放在flash里完成,因为那样flash的文件会加大,而且也不够灵活,因为flash是需要编译后才能跑的,所以我们最好把能用js实现的都剥离出来,让flash只做一些核心的功能。这样,我们就需要用as去调用js。同样的,如果js操作完了想通知到flash,就需要用js去调用flash中的as方法。此时可以看作as是js增强的一部分。

???? 不管是as调用js,还是js调用as,其实都围绕ExternalInterface。ExternalInterface 类是外部 API,这是一个在 ActionScript 和 Flash Player 容器之间实现直接通信的应用程序编程接口。当然插入flash的html标签中<param name='allowScriptAccess' value ='always' /> 不能为never,如果设置成never一下所有都是空谈了,一般情况下都设置成always,它也可以接受具体的domain或者IP。

???? ExternalInterface有两个提供相互调用的静态方法:
测试项目(测10次取平均值)chrome 19firefox 9ie6ie7ie8ie9js调用as 10000次耗时(方案1)1747ms1083ms360ms557ms485ms401msjs调用js 10000次耗时(方案2)1ms4ms15ms31ms15ms0ms
观察结果,虽然说js与as执行的执行要比js与js之间慢很多很多,但是勉强还是能接受的,即使是最慢的chrome,平均调用一次也只需要0.17ms,但还是要尽量减少相互调用的次数,就像减少http请求一样。
综上所述,js与as的安全交互必须满足:
    <param name='allowScriptAccess' value ='always' />???flash不能隐藏(display:none)??等被调用方初始化完成再去调用,as中可以用ExtercalInterface.call('flashready')来告知初始化完成跨域执行,必须在flash中设置Secure.allowDomain或者Secure.allowInsecureDomain
最后做下小广告,欢迎加JS&PHP群(166643291)一起进步。

?

读书人网 >JavaScript

热点推荐