项目的需要将flex里面录音的数据通过activeX保存到客户机器里面。稍微了解了下,
as代码没办法直接和activeX控件交互,于是只能通过html页面的js交互再调用activeX控件
于是简单的在定时器里面将,得到的录音sample数据,传输到js里面。
代码如下:
// getTimer() - start_time作用是,为避免阻塞只能,运行大概500ms 就返回。
while(data_short.bytesAvailable && (getTimer() - start_time < time_loop))
{
// 传递给js保存数据
var sample:Number = data_short.readFloat();
//Trans2Js 代码没有做任何事情,就简单的return null;
ExternalInterface.call("Trans2Js",0.2*32767);
}// end while
实际运行项目,发现处理数据的速度超级慢。(chorme 浏览器比IE快一倍的速度)
反复折腾,觉得是ExternalInterface.call 的效率问题,因为不知道adobe是怎么实现的。
只能测试一下,下面简单的代码。
代码如下:
var loop_count:int = 8012;
var start_time:int;
start_time = getTimer();
while(loop_count-- > 0)
{
//Trans2Js 代码没有做任何事情,就简单的return null;
ExternalInterface.call("Trans2Js",0.2*32767);
}
var end_time:int = getTimer();
lb_time.text = String(end_time - start_time) + ":毫秒";
得到的结果是:5687 毫秒,IE 甚至去到7859 毫秒。
也就是说 ExternalInterface.call("Trans2Js",0.2*32767);
的调用大概用了1毫秒,对于现在的cpu来说,(我的2.6 GHZ单核,很lj那种)
效率根本无法想象。听说adobe 会将这个调用转换成xml格式的字符串,传递。
难道效率在转换的过程么? 如果是的话那也太不可思议了吧,所以我觉得应该
不是这原因。
由于水平有限,只能用测试的方法大概猜测一下。
代码如下:
(把sample添加到数组,然后一次传递给 ExternalInterface,据说可以传递数组)
var loop_count:int = 8012;
var start_time:int;
var arg1:Array = new Array();
start_time = getTimer();
while(loop_count-- > 0)
{
arg1.push(0.2*32767);
}
ExternalInterface.call("Trans2Js",arg1);
var end_time:int = getTimer();
lb_time.text = String(end_time - start_time) + ":毫秒";
得到的结果是:58 毫秒
综合以上,可以看出两次传递的数据量是一样的,但是效率却相差差不多100倍。因此猜测效率的
消耗应该在于调用过程中的IO 或者 和容器沟通方面,而不在于转换成xml字符串的问题。
因此,我们要传输大数据量的时候,最好先用array 或者 字符串之类组成起来,然后一次调用
ExternalInterface.call 达到性能优化的目的。
as代码没办法直接和activeX控件交互,于是只能通过html页面的js交互再调用activeX控件
于是简单的在定时器里面将,得到的录音sample数据,传输到js里面。
代码如下:
// getTimer() - start_time作用是,为避免阻塞只能,运行大概500ms 就返回。
while(data_short.bytesAvailable && (getTimer() - start_time < time_loop))
{
// 传递给js保存数据
var sample:Number = data_short.readFloat();
//Trans2Js 代码没有做任何事情,就简单的return null;
ExternalInterface.call("Trans2Js",0.2*32767);
}// end while
实际运行项目,发现处理数据的速度超级慢。(chorme 浏览器比IE快一倍的速度)
反复折腾,觉得是ExternalInterface.call 的效率问题,因为不知道adobe是怎么实现的。
只能测试一下,下面简单的代码。
代码如下:
var loop_count:int = 8012;
var start_time:int;
start_time = getTimer();
while(loop_count-- > 0)
{
//Trans2Js 代码没有做任何事情,就简单的return null;
ExternalInterface.call("Trans2Js",0.2*32767);
}
var end_time:int = getTimer();
lb_time.text = String(end_time - start_time) + ":毫秒";
得到的结果是:5687 毫秒,IE 甚至去到7859 毫秒。
也就是说 ExternalInterface.call("Trans2Js",0.2*32767);
的调用大概用了1毫秒,对于现在的cpu来说,(我的2.6 GHZ单核,很lj那种)
效率根本无法想象。听说adobe 会将这个调用转换成xml格式的字符串,传递。
难道效率在转换的过程么? 如果是的话那也太不可思议了吧,所以我觉得应该
不是这原因。
由于水平有限,只能用测试的方法大概猜测一下。
代码如下:
(把sample添加到数组,然后一次传递给 ExternalInterface,据说可以传递数组)
var loop_count:int = 8012;
var start_time:int;
var arg1:Array = new Array();
start_time = getTimer();
while(loop_count-- > 0)
{
arg1.push(0.2*32767);
}
ExternalInterface.call("Trans2Js",arg1);
var end_time:int = getTimer();
lb_time.text = String(end_time - start_time) + ":毫秒";
得到的结果是:58 毫秒
综合以上,可以看出两次传递的数据量是一样的,但是效率却相差差不多100倍。因此猜测效率的
消耗应该在于调用过程中的IO 或者 和容器沟通方面,而不在于转换成xml字符串的问题。
因此,我们要传输大数据量的时候,最好先用array 或者 字符串之类组成起来,然后一次调用
ExternalInterface.call 达到性能优化的目的。