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 相关文章推荐
jQuery选择器的工作原理和优化分析
Jul 25 Javascript
jQuery隔行变色与普通JS写法的对比
Apr 21 Javascript
javascript函数声明和函数表达式区别分析
Dec 02 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
Mar 11 Javascript
Bootstrap CSS组件之按钮组(btn-group)
Dec 17 Javascript
Angular企业级开发——MVC之控制器详解
Feb 20 Javascript
AngularJS Toaster使用详解
Feb 24 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
Oct 11 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
vuex的使用及持久化state的方式详解
Jan 23 Javascript
vue路由教程之静态路由
Sep 03 Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 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
在线增减.htpasswd内的用户
2006/10/09 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
删除重复数据的算法
2006/11/23 Javascript
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
微信小程序 progress组件详解及实例代码
2016/10/25 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
C,C++的几个面试题小集
2013/07/13 面试题
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
MySQL的索引你了解吗
2022/03/13 MySQL