[高手请进]JS星遭遇速度瓶颈

xvlv 2004-07-07 11:29:07
http://www.51js.com/viewthread.php?tid=18944&highlight=&page=28

有兴趣的朋友可以看看能否解决?
...全文
352 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
i三千 2004-07-12
  • 打赏
  • 举报
回复
n
SnowF4 2004-07-12
  • 打赏
  • 举报
回复
xvlv(xvlv) ( ) 兄,以后贴代码的时候要检查一下!你那两段比较的程序怎么是一模一样的啊??还是我太外行了?
xvlv 2004-07-12
  • 打赏
  • 举报
回复
http://220.134.133.114/operation_studio/studiogame.html
xvlv 2004-07-12
  • 打赏
  • 举报
回复
你注意看一下,代码前有//的应该表示注释吧,所以是不同的。
zlj113 2004-07-09
  • 打赏
  • 举报
回复
帮你顶了,玩过你的JS星际,都说你很强呀,希望你能早日解决问题。
kingdomzhf 2004-07-09
  • 打赏
  • 举报
回复
创意强
dullwolf 2004-07-09
  • 打赏
  • 举报
回复
http://www.adr.gov.cn/download/panyuguang/xq/vml.asp

人生,是大写的,签字,呜,嗷,UP!~~~~~

___ __ __
/ __ \ __ __ /\ \ /\ \
/ /_/\ \ /\ \ /\ \\ \ \ \ \ \
/\ \ \ \ \\ \ \ \ \ \\ \ \ \ \ \
\ \ \_\_\ \\ \ \_\_\ \\ \ \___\ \ \___
\ \_______\\ \_______\\ \____\\ \____ \/_______/ \/_______/ \/____/ \/____/
__ ___ ____ __ ________
/\ \ |\ \| _\ _______ /\ \ /\ _____ \ \ \ \| \\\ \/ /\ ___ \\ \ \ \ \ \___/_
\ \ \ | \\\ \ \ \ \_/\ \\ \ \ \ \ ____\
\ \ \| |\ \/ \ \ \ \\_\ \\ \ \__ \ \ \___/
\ \___|\\___/| \ \______\\ \____\\ \___\
\|___| |___|/ \/______/ \/____/ \/___/



xvlv 2004-07-09
  • 打赏
  • 举报
回复

-----最新推出:星际争霸online-----
http://starcraft.51ym.com/sc/

-----JS游戏开发基地-----
http://starcraft.51ym.com/home/

星际争霸online源代码(希望大家尊重幻宇的劳动成果)
http://starcraft.51ym.com/download/jssc_online.rar
emu_ston 2004-07-09
  • 打赏
  • 举报
回复
想看看造成瓶颈的代码,帖出来大家想想有没有更快的实现。

flash试过了,applet试过没有呢?
xvlv 2004-07-09
  • 打赏
  • 举报
回复
怎么将贴子自动提前呀?
xvlv 2004-07-09
  • 打赏
  • 举报
回复
以下是关于幻宇今天在无忧的发贴

奉劝大家在关键运算处,千万不要使用类,js星际最大失败之处在于此

偶然做了个实验,结果另人大吃一惊,终于揭开了js星际效率低下的内幕,根本原因就是因为使用了类!!!

以下是循环20000次的使用点类赋值的代码,顺便说一下,点类是一个较简单的类
<script>
var d=new Date(),d1=d.valueOf()
var a=new Array(),p=new pt()
for(i=0;i<20000;i++){
//a.x=3
//a.y=4
p.setv("3,2")
}
var d=new Date(),d2=d.valueOf()
alert("使用点类赋值,耗时"+(d2-d1)+"ms")

function pt(x,y){
this.setv=function(x,y){
if(y!=null){
this.x=parseInt(x)
this.y=parseInt(y)
}
else{
var a=x.split(",")
this.x=parseInt(a[0])
this.y=parseInt(a[1])
}
this.v=this.x+","+this.y
}
if(x!=null)
this.setv(x,y)
}

</script>

作为比效,这是普通数组赋值,达到同样功能的代码
<script>
var d=new Date(),d1=d.valueOf()
var a=new Array(),p=new pt()
for(i=0;i<20000;i++){
a.x=3
a.y=4
//p.setv(3,2)
}
var d=new Date(),d2=d.valueOf()
alert("使用数组赋值,耗时"+(d2-d1)+"ms")

function pt(x,y){
this.setv=function(x,y){
if(y!=null){
this.x=parseInt(x)
this.y=parseInt(y)
}
else{
var a=x.split(",")
this.x=parseInt(a[0])
this.y=parseInt(a[1])
}
this.v=this.x+","+this.y
}
if(x!=null)
this.setv(x,y)
}

</script>
看到了吧,同样的功能,使用类耗时巨大



dullwolf 2004-07-09
  • 打赏
  • 举报
回复
js的运算效率是高于asp?

你是想说js脚本比vbs脚本速度快吧?
不可能!
是你的代码没写好而已。

差别最大的就是数组,你用循环写10万长度的数组测试一下,vbs比js快n百倍
zwhbin 2004-07-08
  • 打赏
  • 举报
回复
这个问题我是无能为力了,顶一下吧
dropship 2004-07-08
  • 打赏
  • 举报
回复
可以将贴子提前的
monkeyhjl 2004-07-08
  • 打赏
  • 举报
回复
强!
顶!
htl 2004-07-08
  • 打赏
  • 举报
回复
顶一下
hotmanhh 2004-07-08
  • 打赏
  • 举报
回复
强啊,讨论这么高深的问题
帮你顶一个,虽然我根本搞不懂,唉
xvlv 2004-07-07
  • 打赏
  • 举报
回复
汗,管理员应该修改一下程序,把新贴和旧贴隔开一下,至少也应该让新贴排在前面半天时间
xvlv 2004-07-07
  • 打赏
  • 举报
回复
先声明一下,那程序作者可不是我,呵呵

我把大致的内容贴出来吧
使用的是自创的的“交点法寻径”,在js上表现不错,可以一次性给十几个单位寻径;在as中不行,只能给一个单位寻径,距离远了还很慢,可见js的运算效率是高于as的

现在改用flash开发星际online后,遇到了与js同样的问题,在多人同时移动时速度成几何级下降。这就是用脚本开发此类游戏的最大问题,cpu占用率奇高,其实cpu只用一小部分用于脚本的运算,大部分资源都消耗在图形的绘制上了,这个问题很难解决也很难回避啊

本来以为flash表现会好些,还是一样,郁闷死了,没有心情再扩展游戏功能了。如果哪位兄台有这方面的好方法,可一定得告诉我一声哦


我这几天也在反思这个问题,并做了些试验

1.在flash中,平缓移动一张800*600的大位图,cpu占用率立刻升到100%,而在js中,只会升到60%左右

2.如果位图移动出屏幕之外,两者cpu占用率很快降到5%以内

以下的试验只针对js:

3.如果该位图是普通彩图,cpu占用率如上所述有60%左右;而如果该位图为纯黑块,cpu占用率只有5%以下,可见cpu占用率和图片色彩或图片复杂度有绝对关联

4.多个位图同时移动,即使位图都很小(10*10以下),cpu占用率也会大幅增加。所以窗口重绘cpu占有率与重绘数量也有很大关系。

结论是:不管在js中还是在flash中,都需要合理分配动画,尽量不移动大背景,避免同时移动多个物体,使用卡通图形减少图片复杂程度,减小显示区尺寸,都可以有效降低cpu占用率,保证动画的流畅程度

只是这个结论也决定了,用脚本做星际,虽然编程方法已经实现,但是我们还必须在以下方法中选择:要不大大减小显示区尺寸,要不使用activex控件,要不干脆等到html支持directx加速的那一天
blasterboy 2004-07-07
  • 打赏
  • 举报
回复
看了一下,很佩服你得说
嗯,兄弟加油。
在给你顶一下!!
加载更多回复(5)

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧