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 面向对象编程 聊聊对象的事
Sep 17 Javascript
jquery easyui的tabs使用时的问题
Mar 23 Javascript
js修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
关于JS字符串函数String.replace()
Apr 07 Javascript
js中 javascript:void(0) 用法详解
Aug 11 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
解决VUEX兼容IE上的报错问题
Mar 01 Javascript
Vue 去除路径中的#号
Apr 19 Javascript
浅谈js中的bind
Mar 18 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 Javascript
vue移动端的左右滑动事件详解
Jun 17 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调用时间格式的参数详解
2013/06/06 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
react-router中的属性详解
2017/06/01 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python实现计算资源图标crc值的方法
2014/10/05 Python
python学习开发mock接口
2019/04/28 Python
python打开音乐文件的实例方法
2020/07/21 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
医学生个人求职信范文
2013/09/24 职场文书
质检部岗位职责
2013/11/11 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
公司应聘求职信
2014/06/21 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
西安事变观后感
2015/06/12 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
Redis 限流器
2022/05/15 Redis