javascript string字符串优化问题_javascript技巧

复制代码 代码如下:

<!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处理速度不给力

时间: 2024-08-30 16:14:43

javascript string字符串优化问题_javascript技巧的相关文章

JavaScript截断字符串的方法_javascript技巧

本文实例讲述了JavaScript截断字符串的方法.分享给大家供大家参考.具体如下: 这里JavaScript截断字符串,类似于substr(),只不过这个函数不会截断单词,在发生截断后,会添加一个省略号 if (!function_exists('subsent')) { function subsent($string, $start = 0, $length = 0, $cap = '...') { if ($length <= 0 || strlen($string) < $lengt

Javascript string 扩展库代码_javascript技巧

Javascript原生的String处理函数显得很不够丰富,原生string函数:http://www.jb51.net/w3school/js/jsref_obj_string.htm 问题1:是否有只是针对String类型的扩展库呢?有,不多,不全面. 观点2: JQuery的强大在于DOM操作,因此不希望js string 扩展库是基于jquery开发的,是否认同? 问题3:我们需要什么样的string扩展函数?这个问题可以参考其他js库,以及其他语言的string操作函数 Protot

JavaScript更改字符串的大小写_javascript技巧

JavaScript提供了两个方法,将字符串转换为全部大写或全部小写,从而可以将"hello"更改为"HELLO",或者将"NOT"更改为"not".你可能会问,为什么?将字符串中的字母转换为相同的大小写,这可以使得比较两个字符串变得更容易.例如,假设你创建了一个题程序,并且,一个问题是"Who was the first American to win the Tour De France?"你可能用类似

JavaScript 格式字符串的应用_javascript技巧

经过一番设计,终于完成了这个功能.引入了这个js后,就可以自行配置格式字符串来输出各种自定义的日期格式了. 流程图 可以看出,所谓格式字符串,其实就是一个含有特定字符的字符串,然后根据其的实际意义替换成指定的值. 在本文中仅以Date对象作为示例,其实格式字符串的价值不仅于此.到底可以在什么情景下会使用格式字符串呢?希望您在本文的结尾处可以找到答案. 算法介绍 下面我将使用一个示例来说明格式字符串的算法.这个示例将格式化日期的"日"部分,例如2008-8-8,如果格式字符串是"

JavaScript String 对象常用方法总结_javascript技巧

字符串是不可变的.字符串方法,不会改变原有字符串的内容,而是返回一个新字符串. charAt():返回在指定位置的字符. concat():连接两个字符串文本,并返回一个新的字符串. indexOf():indexOf() 方法返回指定值在字符串对象中首次出现的位置. match():使用正则表达式与字符串相比较. replace():被用来在正则表达式和字符串直接比较,然后用新的子串来替换被匹配的子串. slice():摘取一个字符串区域,返回一个新的字符串. split():通过分离字符串成

JavaScript游戏之优化篇_javascript技巧

1.善用DocumentFragment 之前有个打飞机的游戏.我是用如下方法添加子弹 复制代码 代码如下: for(var i=0;i<5;i++){ var bullet = new Bullet(); document.body.appendChild(bullet); } 问题就来了,我的目的是希望同时能出现5颗子弹,所以我循环将5个子弹对象添加到body,这样会导致一个结果:浏览器reflow了5次. 但其实可以找一个载体,来先把这5个子弹类装起来,然后,再一次性添加到body中,这样

JavaScript String(字符串)对象的简单实例(推荐)_javascript技巧

返回字符串的长度: <html> <body> <script type="text/javascript"> var txt="Hello World!" document.write(txt.length) </script> </body> </html> 为字符串添加样式: <html> <body> <script type="text/java

js获取指定字符前/后的字符串简单实例_javascript技巧

如下所示: <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <script type="text/javascript"> /* string 字符串; str 指定字符; split(),用于把一个字符串分割成字符串数组; split(str)[0],读取

JavaScript中String.prototype用法实例_javascript技巧

本文实例讲述了JavaScript中String.prototype用法.分享给大家供大家参考.具体如下: // 返回字符的长度,一个中文算2个 String.prototype.ChineseLength=function() { return this.replace(/[^\x00-\xff]/g,"**").length; } // 判断字符串是否以指定的字符串结束 String.prototype.EndsWith = function(str) { return this.