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 继承详解 第一篇
Aug 30 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
node.js中的fs.fchown方法使用说明
Dec 16 Javascript
28个常用JavaScript方法集锦
Jan 14 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
详谈js中数组(array)和对象(object)的区别
Feb 27 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
JS通用方法触发点击事件代码实例
Feb 17 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
Feb 24 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
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python3 简单实现组合设计模式
2020/07/02 Python
django rest framework使用django-filter用法
2020/07/15 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
收款委托书范本
2014/09/11 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
中国世界遗产导游词
2015/02/13 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
班主任班级管理心得体会
2016/01/07 职场文书