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 相关文章推荐
Prototype 学习 Prototype对象
Jul 12 Javascript
ajax 缓存 问题 requestheader
Aug 01 Javascript
javascript日期处理函数,性能优化批处理
Sep 06 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
js 实现省市区三级联动菜单效果
Feb 20 Javascript
微信小程序录音与播放录音功能
Dec 25 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
Jan 16 Javascript
vue-router项目实战总结篇
Feb 11 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 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中让curl支持sock5的代码实例
2015/01/21 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python读取图片任意范围区域
2019/01/23 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
解决Django连接db遇到的问题
2019/08/29 Python
python程序输出无内容的解决方式
2020/04/09 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
详解Python 循环嵌套
2020/07/09 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
秘书行业自我鉴定范文
2013/12/30 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
单位介绍信格式
2015/01/31 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
Python中22个万用公式的小结
2021/07/21 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL