Summary
我正在尝试制作一个包含多个相同 SWF 的网页。我遇到的问题是加载速度太慢(不过下载时间还不错)。我的每个单元格中有一个 4x4 表格,iframe 中嵌入了一个 swf 文件。(注:4 X 4 表 => 16 SWFS).
我的 AS3 代码非常简单:
package
{
import flash.display.Sprite;
import flash.system.System;
import flash.text.TextField;
public class ActionscriptProject extends Sprite
{
public function ActionscriptProject()
{
var txt:TextField = new TextField();
txt.x=0;
txt.y=0;
txt.width=5000;
txt.height=5000;
addChild(txt);
txt.htmlText+="<font size='45'>"+System.totalMemory/1048576 + " MB"+"</font>";
}
}
}
我使用以下 html 将其加载到 iframe 中:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Flash Testing</title>
</head>
<body>
<table border="1">
<tr>
<td>
<iframe allowtransparency='true' scrolling='no' src='Flash/ActionscriptProject.html'></iframe>
</td>
<td>
<iframe allowtransparency='true' scrolling='no' src='Flash/ActionscriptProject.html'></iframe>
</td>
<td>
<iframe allowtransparency='true' scrolling='no' src='Flash/ActionscriptProject.html'></iframe>
</td>
<td>
<iframe allowtransparency='true' scrolling='no' src='Flash/ActionscriptProject.html'></iframe>
</td>
</tr>
<tr>
...
</tr>
<tr>
...
</tr>
<tr>
...
</tr>
</table>
</body>
</html>
注意:ActionscriptProject.html 只是 Flash Builder 使用应用程序创建的标准 html。但应 The_asMan 的要求,我将其包含在这里:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<!--
Smart developers always View Source.
This application was built using Adobe Flex, an open source framework
for building rich Internet applications that get delivered via the
Flash Player or to desktops via Adobe AIR.
Learn more about Flex at http://flex.org
// -->
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Include CSS to eliminate any default margins/padding and set the height of the html element and
the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as
the percentage of the height of its parent container, which has to be set explicitly. Initially,
don't display flashContent div so it won't show if JavaScript disabled.
-->
<style type="text/css" media="screen">
html, body { height:100%; }
body { margin:0; padding:0; overflow:auto; text-align:center;
background-color: #ffffff; }
#flashContent { display:none; }
</style>
<!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
<!-- BEGIN Browser History required section -->
<link rel="stylesheet" type="text/css" href="history/history.css" />
<script type="text/javascript" src="history/history.js"></script>
<!-- END Browser History required section -->
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
<!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. -->
var swfVersionStr = "10.0.0";
<!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
var xiSwfUrlStr = "playerProductInstall.swf";
var flashvars = {};
var params = {};
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "ActionscriptProject";
attributes.name = "ActionscriptProject";
attributes.align = "middle";
swfobject.embedSWF(
"ActionscriptProject.swf", "flashContent",
"100%", "100%",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
<!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. -->
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
</script>
</head>
<body>
<!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough
JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
when JavaScript is disabled.
-->
<div id="flashContent">
<p>
To view this page ensure that Adobe Flash Player version
10.0.0 or greater is installed.
</p>
<script type="text/javascript">
var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
+ pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
</script>
</div>
<noscript>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="ActionscriptProject">
<param name="movie" value="ActionscriptProject.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="ActionscriptProject.swf" width="100%" height="100%">
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<!--<![endif]-->
<!--[if gte IE 6]>-->
<p>
Either scripts and active content are not permitted to run or Adobe Flash Player version
10.0.0 or greater is not installed.
</p>
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</noscript>
</body>
</html>
Browsers
在 Chrome 中没有问题。所有应用程序加载速度都非常快(我估计在 3 秒内)。
在 IE 8 中这个问题很小。
在 IE 7 和 Firefox 3.6.17 中,页面加载需要很长时间。我没有在其他浏览器中测试过。
在 Firefox 中,页面加载大约需要 34 秒。
调试信息(火狐)
总共System.totalMemory
据报道,swf 使用的总内存约为 42 MB。
以下是 Firebug 中“网络”选项卡的屏幕截图:
Full Size Image https://i.stack.imgur.com/9qqmb.jpg
问题
- 有没有好的方法可以将多个相同的 swf 嵌入到网页中?
- 为什么 IE 和 Firefox 的表现如此糟糕?我怀疑这与 IE 和 Firefox 都只有一个线程来运行插件(Flash)有关。
- 我有一个用 AS2 编写的类似应用程序(不是我写的,我只有 swf 文件)。它要复杂得多,但在 IE 和 FF 中加载速度要快几个数量级。 AS3 固定浏览器而 AS2 不固定,这是否有原因?
- 如何在不固定浏览器的情况下将多个 AS3 swf 嵌入到 FF 和 IE 7 中?
- 有没有办法让应用程序变得更轻量?