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 相关文章推荐
js+HTML5实现视频截图的方法
Jun 16 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
使用javascript插入样式
Mar 14 Javascript
使用Node.js给图片加水印的方法
Nov 15 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
JavaScript数组复制详解
Feb 02 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
react native仿微信PopupWindow效果的实例代码
Aug 07 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
JS实现的抛物线运动效果示例
Jan 30 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
mac上配置Android环境变量的方法
Jul 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php array的学习笔记
2012/05/16 PHP
symfony表单与页面实现技巧
2015/01/26 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
python用户管理系统
2018/03/13 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
学生实习自我鉴定
2013/10/11 职场文书
生物学学生自我评价
2014/01/17 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
多人股份制合作协议书
2016/03/19 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
MySQL 数据 data 基本操作
2022/05/04 MySQL