javascript string字符串优化问题


Posted in Javascript onJuly 31, 2011
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>test</title> 
<script type="text/javascript"> 
function winProps(){ 
var message = []; 
var str; 
var data = new Date(); 
var mils1 = data.getTime(); 
//array数组 
for(var i = 0; i<500000;i++) 
message.push("This window is "); 
message.join(" "); 
data = new Date(); 
var mils2 = data.getTime(); 
arrayMils = mils2 - mils1; 
//字符串直接连接 
for(var i = 0; i<500000;i++) 
str+="This window is "; 
data = new Date(); 
var mils3 = data.getTime(); 
stringMils=mils3-mils2; 
//显示内容,不重要 
var mes = []; 
mes.push("时间1:"); 
mes.push(mils1); 
mes.push("\n时间2"); 
mes.push(mils2); 
mes.push("\n时间3"); 
mes.push(mils3); 
mes.push("\narray所用时间"); 
mes.push(arrayMils>=0?arrayMils:arrayMils+1000); 
mes.push("\nstr连接所用时间"); 
mes.push(stringMils>=0?stringMils:stringMils+1000); 
alert(mes.join(" ")); 
} 
</script> 
</head> 
<body> 
<input type="button" value="点我" onclick="winProps();"/> 
</body>

结果不像一般的说法,用array会快。在ie9,8。ff,google,搜狗等ie核心的浏览器下测试了一下,确实在数量级100000以上的测试中array方法比用“+”的方法会慢。
1000000次的结果
ie第一次(大概,ie复制不了,图就不截了)
array所用时间 890 
str连接所用时间 450

ie可能是内存没有回收第二次点会弹出警告,并且时间用到1400和1200,点多几次后,+=的连接方式耗时回到400,难倒是array对象没有回收?打开任务管理器,再刷新一次ie浏览器,内存降了100多m,应该研究一下ie的javascript内存回收机制。
ff
时间1: 1312102053720 
时间2 1312102053842 
时间3 1312102053882 
array所用时间 122 
str连接所用时间 40

google(也复制不了数据)
array所用时间 200
str连接所用时间 100
opera
时间1: 1312102258270
时间2 1312102258460
时间3 1312102258592
array所用时间 190
str连接所用时间 132
顺便说一下,在数据到5000000后ff抛出了个异常,应该是内存溢出了。。。(ps,不是很懂)
错误: uncaught exception: 8.375396749959738e-274
在ie下测试果断警告,再后来out of memory。
当然怎么大的数据连接,在现在的网页是不可能出现,数据处理应该是在后台做的。老师的主机不敢装这么多浏览器
其实是array的jion,太消耗时间。没有加入这一句之后opera,google就显示出array的优势:
opera结果:
时间1: 1312101715553 
时间2 1312101715622 
时间3 1312101715749 
array所用时间 69 
str连接所用时间 127 
[code] 
ie结果 
array所用时间700 
str连接所用时间500 
ff 
[code] 
时间1: 1312101925895 
时间2 1312101925945 
时间3 1312101925979 
array所用时间 50 
str连接所用时间 34

google
array所用时间17
str连接所用时间100
去查查jion的机制再写吧。
ps:浏览器版本
google12.0.742.122
ff5.0.1
opera11.50
ie8.0.6001.18702
pss:ie处理速度不给力
Javascript 相关文章推荐
javascript中利用数组实现的循环队列代码
Jan 24 Javascript
让图片旋转任意角度及JQuery插件使用介绍
Mar 20 Javascript
用Js实现的动态增加表格示例自己写的
Oct 21 Javascript
js中prototype用法详细介绍
Nov 14 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
JS动态改变表格边框宽度的方法
Mar 31 Javascript
JavaScript实现基于Cookie的存储类实例
Apr 10 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
jQuery实现的超简单点赞效果实例分析
Dec 31 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
Nov 02 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
Jul 31 #Javascript
基于JQuery 的消息提示框效果代码
Jul 31 #Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 #Javascript
JQuery通过Ajax提交表单并返回结果
Jul 31 #Javascript
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
Jul 31 #Javascript
动态加载外部javascript文件的函数代码分享
Jul 28 #Javascript
工作需要写的一个js拖拽组件
Jul 28 #Javascript
You might like
PHP内核探索之变量
2015/12/22 PHP
php导出生成word的方法
2015/12/25 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
javascript里的条件判断
2007/02/27 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
python中的计时器timeit的使用方法
2017/10/20 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
python中dict使用方法详解
2019/07/17 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
python程序如何进行保存
2020/07/03 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
物流司机岗位职责
2013/12/28 职场文书
搞笑获奖感言
2014/01/30 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
Python django中如何使用restful框架
2021/06/23 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python