2012-03-15 73 views
2
  • 如何获取flash对象在浏览器中加载所需的时间,从创建对象直到它处于就绪状态?

回答

4

如果你只是想测量Flash对象的加载时间,你可以使用FireBug。但是,如果您想知道Flex应用程序何时完全可以使用(即所有RSL已加载;所有初始数据都已加载),我认为有两种方法。一个在应用程序中,使用自定义预加载器开始计时并在条件满足时停止计时。其他通过JavaScript和​​。我认为后者会给你最准确的结果,因为在加载预加载器之前可能已经有一段延迟了。

JavaScript和ExternalInterface的

我从来没有做过这个,所以我刚要解释我的想法。在Javascript中,您可以在Flash对象开始加载时创建一个'date'对象。您可能正在使用SWFObject将Flash对象注入页面,因此您可能会将其插入某处。然后在您的Flex应用程序中,当满足必要的条件(您定义了这些条件)时,您可以使用ExternalInterface.call()来告诉JavaScript Flex应用程序已准备就绪。做一个新的'日期'并减去第一个'日期',并且你有你的加载时间。

使用ExternalInterface的更多信息可以在文档中找到:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cb2.html

详细

创建JavaScript函数,我们会打电话给当应用程序已准备就绪:

function onFlexAppReady() { 
    var end = new Date().getTime(); 
    var loadTime = end - start; //in ms. 
} 

现在在FlashBuilder生成的代码中,添加swf注入之前的开始时间:

var start = new Date().getTime(); 
swfobject.embedSWF(
      "MyFlexApp.swf", "flashContent", 
      "100%", "100%", 
      swfVersionStr, xiSwfUrlStr, 
      flashvars, params, attributes); 

最后,在你的Flex应用程序,在合适的条件得到满足,调用JavaScript函数:

ExternalInterface.call("onFlexAppReady"); 

再次,这是所有未经测试的代码,但它应该让你开始。

+0

如果你想避免外部接口调用,SWFObject的embedSWF方法在“属性”后面实际上有一个更多的可选属性。这是一个回调方法,将在flash完全加载时调用。 swfobject.embedSWF(“MyFlexApp.swf”,“flashContent”,“100%”,“100%”,swfVersionStr,xiSwfUrlStr,flashvars,params,属性,onFlexAppReady); – 2012-03-15 12:20:53

+0

@JamesTomasino加载Flash应用程序或加载完整Flex应用程序(包括框架RSL)时调用该函数吗?这不是一回事:我猜想第一个选项,在这种情况下,当Flex框架只开始加载时,它将被调用。无论哪种方式,它都将不会等到初始数据加载完成。 – RIAstar 2012-03-15 14:26:50

+0

它在ExternalInterface回调变为可用时被调用。这绝对是衡量加载swf本身需要多长时间,而不是任何支持资产或数据。 – 2012-03-15 14:41:03