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 效率组装字符串 StringBuffer
Dec 23 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
Sep 12 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
js+html制作简单验证码
Feb 16 Javascript
纯JS实现轮播图
Feb 22 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
JavaScript 五大常见函数
Mar 23 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
Nov 10 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 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通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Linux php 中文乱码的快速解决方法
2016/05/13 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
jQuery实现的仿select功能代码
2015/08/19 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
日语求职信范文
2013/12/17 职场文书
学校岗位设置方案
2014/01/16 职场文书
行政管理专业求职信
2014/07/06 职场文书
三严三实学习心得体会
2014/10/13 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
2016国庆促销广告语
2016/01/28 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
CSS基础详解
2021/10/16 HTML / CSS
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript