JavaScript游戏之优化篇


Posted in Javascript onNovember 08, 2010

1。善用DocumentFragment
之前有个打飞机的游戏。我是用如下方法添加子弹

for(var i=0;i<5;i++){ 
var bullet = new Bullet(); 
document.body.appendChild(bullet); 
}

问题就来了,我的目的是希望同时能出现5颗子弹,所以我循环将5个子弹对象添加到body,这样会导致一个结果:浏览器reflow了5次。
但其实可以找一个载体,来先把这5个子弹类装起来,然后,再一次性添加到body中,这样就只会出现一次flow。节省不少开销。
var df = document.createDocumentFragment(); 
for(var i=0;i<5;i++){ 
var bullet = new Bullet(); 
df.appendChild(bullet); 
} 
document.body.appendChild(df);

DocumentFragment:文档碎片,它不会产生任何标签,只是一个载体。

2。对引用值置空,Dom自定义的引用值也置空。
发觉自己写的代码,很多引用类型的值,都没有在变量结束的时候置空。
例如:

var Bullet = function(){ 
2 this.dom = null; 
3 this.init(); 
4 } 
5 Bullet.prototype = { 
6 this.init : function(){ 
7 this.dom = document.createElement('div'); 
8 document.body.appendChild(this.dom); 
9 } 
this.end : function(){ 
document.body.removeChild(this.dom); 
} 
}

在结束的时候单纯只是将dom对象移除,其实还需要将this.dom.innerHTML = ''以及this.dom = null。
只是针对IE系列,因为removeChild方法只是将dom元素从dom链中断开,没有释放对象。

3。使用getBoundingClientRect方法获取dom的left,top,width,height等参数。
当需要获取left,top,width,height等参数中两个或以上的时候,改用 getBoundingClientRect方法,可以一次性获取以上四个参数的一个对象,减少对
dom元素的属性访问。

var rect = document.getElementById('test').getBoundingClientRect(); 
//rect.width,rect.left,rect.top,rect.height

4。使用cloneNode方式克隆dom元素。
对于要需要经常性使用doucment.createElement方法来新建的dom元素,可以先将一个dom元素用cloneNode方法克隆保存起来,
下次需要再次使用的时候,可以直接用克隆的dom元素克隆一份出来,用cloneNode方法比用createElement方法速度要快。例子:
var temp; 
for(var i=0;i < 100;i++){ var dom = temp?temp.cloneNode():document.createElement('div'); 
if(!temp)temp = dom.cloneNode(); 
//do something 
}

5。循环判断中加标识,减少Dom属性判断。
根据游戏的逻辑,例如是男人就下一百层。
当小人站立在一个方块上面,这个时候,其它的方块,可以不需要再判断小人是否会掉落到自己的方块上,只需要往上升就行了。这样,一秒可以减少好几百次
对dom元素的属性访问,减少开销。当小人离开方块的时候,判断再次生效。合理利用。
附上自己写的:是男人就下100层传送门>>

暂时就发现那么多,以后发现更多的话,再写吧。。。
作者: cnblogs Floyd

Javascript 相关文章推荐
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
Jan 14 Javascript
JavaScript中数据结构与算法(二):队列
Jun 19 Javascript
JavaScript对Cookie进行读写操作实例
Jul 25 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
javascript实现的猜数小游戏完整实例代码
May 10 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
Dec 14 Javascript
Vue 用Vant实现时间选择器的示例代码
Oct 25 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 Javascript
Vue实现todo应用的示例
Feb 20 Vue.js
JavaScript高级程序设计之变量与作用域
Nov 17 Javascript
javascript开发中因空格引发的错误
Nov 08 #Javascript
window.ActiveXObject使用说明
Nov 08 #Javascript
发布一个基于javascript的动画类 Fx.js
Nov 05 #Javascript
微博@符号的用户名提示效果。(想@到谁?)
Nov 05 #Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
Nov 05 #Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 #Javascript
需要做特殊处理的DOM元素属性的访问
Nov 05 #Javascript
You might like
php绘图之加载外部图片的方法
2015/01/24 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
Python面向对象编程基础解析(一)
2017/10/26 Python
关于Python数据结构中字典的心得
2017/12/04 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
python数据分析:关键字提取方式
2020/02/24 Python
python调用私有属性的方法总结
2020/07/24 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
请假条怎么写
2014/04/10 职场文书
反四风对照检查材料
2014/09/22 职场文书
信用卡收入证明范本
2015/06/12 职场文书
话题作文之学会尊重
2019/12/16 职场文书
PHP解决高并发问题
2021/04/01 PHP
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL