如何解决使用Flash,Javascript和JSP优化我的Web应用程序
|| 我有一个试图加快速度的Web应用程序。看起来像这样:+------+
| |
| |
+------+
+------+
| |
| |
+------+
+------+
| |
| |
+------+
每个框都是一个包含Flash SWF和一些javascript的iFrame。 SWF下载用于显示信息的第三方SWF。我发现该webapp的加载时间为:
LoadTime = (4 seconds) * numberOfBoxes + (3 seconds)
当我直接将第三方swf嵌入(没有我们的swf或javascript)时,加载时间为:
LoadTime = (1 second) * numberOfBoxes + (2.5 seconds)
我试图找到多余的3秒在哪里使用,以便加快我们的Web应用程序的速度。我认为候选人是:
服务器端处理(jsp)
下载
Java脚本
闪
其他?
下载
以下是从萤火虫下载的图像。我用文件类型替换了文件名。第一次下载后,所有下载都不会花费很长时间。
但是,一个景点标有红色。红色区域是在加载My SWF
和加载两个gif文件以及followed4ѭ之后的3秒间隔。我认为此暂停是由客户端上的处理引起的(这是真的吗?)。
注意:图中的红色条形图不属于图表。我添加了它们以突出显示.net面板上什么也没有发生的空白。
我认为我可以从中得出结论,我有一个客户端处理问题,这意味着Flash或Javascript。问题1:这是正确的吗?
编辑:我加起来的总非并行下载时间:
如果有1个iframe,则下载时间为1.87秒
如果有2个iframe,则下载时间为2.29秒
如果有5个iframe,则下载时间为8.57秒
如果有10个iframe,则下载时间为10.62秒
如果有21个iframe,则下载时间为17.20秒
Java脚本
我在萤火虫中使用了探查器来探查javascript。当页面上有四个组件时,以下是结果:
这意味着javascript的运行时间约为.25秒/图表。这对我来说似乎很合理。
问题2:我是否正确阅读了这些结果?
剩下的时间约为3.5秒/图表。
闪
我在AS3代码中插入了一些跟踪语句。我们正在听一个叫做“完成加载”的事件。我在第一个initialize方法和\“ done loading \”方法中添加了跟踪。在这两个跟踪语句之间,闪存仅消耗0.2秒/图。
问题3:是否有更好的配置Flash的方法?可能是闪存加载或诸如此类的东西占用了额外的时间吗?
其他
我不确定是否还有其他事情:
服务器端处理(jsp)
下载
Java脚本
闪
问题4:我是否缺少某些东西,可能会浪费时间?
下一步
我不确定下一步应该怎么做。我知道某事大约需要花费1.5-3秒/图,但是我无法弄清楚那是什么。我怀疑这与我的瑞士法郎有关。
问题5:我应该如何找到错过的时间?
更新:时间摘要
我为可能花费时间的每件事绘制了所有时间的图表。
X轴是正在使用的图表数量。
Y轴是加载所有图表所需的时间。
最后一张图可能是最重要的图。蓝点表示总加载时间(使用秒表测量)。红点是我已经考虑的时间(JavaScript,下载时间和刷新时间)。
更新:浏览器大战
我的目标是IE和Firefox(尽管如果其他浏览器可以工作,这是一个不错的选择)。到目前为止提供的所有结果均与运行firebug的Firefox有关。只是为了好玩,我想我会尝试在其他浏览器中使用。我不认为这使我更接近解决方案,但有趣的是看到IE吸收了多少。
注意:在运行Firefox的测试之前,我清除了cookie和缓存。我没有针对IE或Chrome浏览器执行此操作
更新:闪存加载
尽管我的代码试图将慢速代码夹在中间,但我一直在撒一些“ 5”语句。 (结果被推送到Firebug控制台)。
我注意到对我来说似乎很可疑的一件事是,我的上一个JavaScript日志被打印与我的第一个Flash日志被打印之间存在2.5秒的间隔。
17:08:29.973 - Javascript code
Time difference: 2510 ms
17:08:32.483 - Flash- myComponent.init()
闪存是否需要为每个瑞士法郎设置虚拟机?它会在客户端上编译动作脚本吗?
在我<embed>
swf和我的main9ѭ中的creationComplete
事件之间会发生什么?
解决方法
只是一些想法:
您能否消除中间人,在这种情况下,消除第三方SWF?
第三方瑞士法郎在哪里?如果在远程服务器上,则只需下载一次,然后将其与其他文件一起放在本地服务器上。这样可以减少下载时间。
您可以使用Flash反编译器之类的工具反编译第三方swf的代码,然后将代码直接放入您的swf吗? (这可能违反了规则)
如果您不将内容放在iframe中,而只是将它们放在div中会怎样?
, 另一种选择-尝试禁用Firebug。时间改变了吗?
也可以在chrome中尝试相同的方法-使用和不使用开发工具。
要了解这个jsp是从swf调用还是只是从swf调用,可以执行以下操作:
而不是您的普通瑞士法郎,只提供模拟而无需任何调用-只是空
也代替框架中的js提供空文件
部分执行此操作并检查差异。
还尝试分析所有发生的newtwork事件。可能是您的SWF在第3方中调用了某些方法,然后又调用了一些远程方法。在这里,我认为我们无法改善这一点。只有第3方中的方法可以某种方式被缓存。因此,在您的个人资料中,我们仅看到文件加载-我们看不到其他任何请求-ajax或类似的内容。
, 根据我的理解,嫌疑犯有三种可能性。
Firebug分析器。尝试使用其他浏览器,看看需要多少时间。
红色组件可能要花一些时间才能加载其他组件。
SWF文件通过服务器创建与其他应用程序的连接,而不是直接连接。
, iframe是否来自服务器的HTML响应?还是通过JavaScript将iframe动态添加到DOM?
等待DOM准备就绪,然后在页面加载后将iframe插入DOM中,将会获得更好的性能。
我认为问题在于,当本地SWF下载第3方SWF时,Flash阻止了脚本执行。您可能需要弄清楚如何使用ActionScript对第3方SWF进行并发,非阻塞,异步下载。
, 我创建了一个helloWorld SWF,并将其嵌入到网页中。
在我测试过的浏览器上,swf加载需要很长时间。当页面上只有一个swf时,这并不明显(〜3秒的加载时间),但是,当页面上有10 swfs时,会出现明显的暂停(〜3秒/图* 10个图表= 30秒)。
以下是我测试过的浏览器:
IE 7-非常慢。加载16个“ Hello World”应用程序大约需要37秒
IE 8-似乎大都可以。仅测试了一段时间
Firefox 3.6.17-非常慢。像IE 7一样慢
Chrome 12.0.742.91-快速
我在另一个问题中发布了hello world应用程序。如果有人知道如何加快非常简单的瑞士法郎的加载速度,则可以在这里回答:
Flash:同一页面上有许多相同的SWF
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。