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学习笔记5 类和对象
Jan 11 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
parseInt parseFloat js字符串转换数字
Aug 01 Javascript
浅析用prototype定义自己的方法
Nov 14 Javascript
jQuery中attr()方法用法实例
Jan 05 Javascript
BootStrap table表格插件自适应固定表头(超好用)
Aug 24 Javascript
setTimeout函数的神奇使用
Feb 26 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
Mar 03 Javascript
ES6新特性:使用export和import实现模块化详解
Jul 31 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
Sep 20 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
layui数据表格跨行自动合并的例子
Sep 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+MySql编写聊天室
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php仿discuz分页效果代码
2008/10/02 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
php源码的使用方法讲解
2019/09/26 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
python自动化报告的输出用例详解
2018/05/30 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python脚本定时发送邮件
2020/12/22 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
Linux如何压缩可执行文件
2013/10/21 面试题
Python使用openpyxl复制整张sheet
2021/03/24 Python
我的大学生活职业生涯规划
2014/01/02 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
七一慰问简报
2015/07/20 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python