- 浏览: 180321 次
- 性别:
- 来自: 福建
最新评论
-
卡殿Love:
你好! 谢谢你的文章让我知道其中的原因,目前正在做手机端上的项 ...
web手机开发(iPhone和Andriod)关于position:fixed 属性的讨论
测试脚本如下代码:
Code
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <html>
3 <head>
4 <title>JavaScript StringBuilder</title>
5 <script src="StringBuilder.js" type="text/javascript"></script>
6 <script type="text/javascript">
7 <!--
8 function runTests()
9 {
10 // string concat test
11 var s = new String();
12
13 var startTime = new Date();
14
15 for (var i = 1; i < 5001; i++)
16 {
17 s += i + " Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.<br>";
18 }
19
20 var concatResult = s;
21
22 var endTime = new Date();
23 var concatTime = endTime - startTime;
24
25 // StringBuilder test
26 var sb = new StringBuilder();
27
28 startTime = new Date();
29
30 for (var i = 1; i < 5001; i++)
31 {
32 sb.append(i);
33 sb.append(" Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.<br>");
34 }
35
36 var sbResult = sb.toString();
37
38 endTime = new Date();
39 var sbTime = endTime - startTime;
40
41 document.writeln("String concat test complete. Total process time <b>" + concatTime + "</b> ms.<br>");
42 document.writeln("StringBuilder test complete. Total process time <b>" + sbTime + "</b> ms.<br>");
43 document.writeln("Resulting strings are " + ((concatResult == sbResult) ? "" : "NOT ") + "identical.<br>");
44 document.writeln("<br><b>String concat results:</b><br>");
45 document.writeln(concatResult);
46 document.writeln("<br><b>StringBuilder results:</b><br>");
47 document.writeln(sbResult);
48 }
49
50 function button_click()
51 {
52 document.body.innerHTML = "Running tests";
53 window.setTimeout(runTests, 0);
54 }
55 //-->
56 </script>
57 </head>
58 <body>
59 <form>
60 <input type="button" value="Click me to run tests" onclick="button_click();">
61 </form>
62 </body>
63 </html>
64
自定义的StringBuilder类如下:
Code
1 function StringBuilder(value)
2 {
3 this.strings = new Array("");
4 this.append(value);
5 }
6
7 // Appends the given value to the end of this instance.
8 StringBuilder.prototype.append = function (value)
9 {
10 if (value)
11 {
12 this.strings.push(value);
13 }
14 }
15
16 // Clears the string buffer
17 StringBuilder.prototype.clear = function ()
18 {
19 this.strings.length = 1;
20 }
21
22 // Converts this instance to a String.
23 StringBuilder.prototype.toString = function ()
24 {
25 return this.strings.join("");
26 }
本类中使用了prototype方法,此方法比较在类中定义方法,可以减少内存开销,因为prototype方式原理上就是
对象的浅拷贝,在内存中只使用对象的副本。
StringBuilder.js
我们可以从以下的测试结果看出此两种方法的性能差距还是非常大的。
String concat test complete. Total process time 3950 ms.
StringBuilder test complete. Total process time 47 ms.
Resulting strings are identical.
希望此方法能帮助做javascript的朋友解决一些性能上的问题。
Code
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <html>
3 <head>
4 <title>JavaScript StringBuilder</title>
5 <script src="StringBuilder.js" type="text/javascript"></script>
6 <script type="text/javascript">
7 <!--
8 function runTests()
9 {
10 // string concat test
11 var s = new String();
12
13 var startTime = new Date();
14
15 for (var i = 1; i < 5001; i++)
16 {
17 s += i + " Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.<br>";
18 }
19
20 var concatResult = s;
21
22 var endTime = new Date();
23 var concatTime = endTime - startTime;
24
25 // StringBuilder test
26 var sb = new StringBuilder();
27
28 startTime = new Date();
29
30 for (var i = 1; i < 5001; i++)
31 {
32 sb.append(i);
33 sb.append(" Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.<br>");
34 }
35
36 var sbResult = sb.toString();
37
38 endTime = new Date();
39 var sbTime = endTime - startTime;
40
41 document.writeln("String concat test complete. Total process time <b>" + concatTime + "</b> ms.<br>");
42 document.writeln("StringBuilder test complete. Total process time <b>" + sbTime + "</b> ms.<br>");
43 document.writeln("Resulting strings are " + ((concatResult == sbResult) ? "" : "NOT ") + "identical.<br>");
44 document.writeln("<br><b>String concat results:</b><br>");
45 document.writeln(concatResult);
46 document.writeln("<br><b>StringBuilder results:</b><br>");
47 document.writeln(sbResult);
48 }
49
50 function button_click()
51 {
52 document.body.innerHTML = "Running tests";
53 window.setTimeout(runTests, 0);
54 }
55 //-->
56 </script>
57 </head>
58 <body>
59 <form>
60 <input type="button" value="Click me to run tests" onclick="button_click();">
61 </form>
62 </body>
63 </html>
64
自定义的StringBuilder类如下:
Code
1 function StringBuilder(value)
2 {
3 this.strings = new Array("");
4 this.append(value);
5 }
6
7 // Appends the given value to the end of this instance.
8 StringBuilder.prototype.append = function (value)
9 {
10 if (value)
11 {
12 this.strings.push(value);
13 }
14 }
15
16 // Clears the string buffer
17 StringBuilder.prototype.clear = function ()
18 {
19 this.strings.length = 1;
20 }
21
22 // Converts this instance to a String.
23 StringBuilder.prototype.toString = function ()
24 {
25 return this.strings.join("");
26 }
本类中使用了prototype方法,此方法比较在类中定义方法,可以减少内存开销,因为prototype方式原理上就是
对象的浅拷贝,在内存中只使用对象的副本。
StringBuilder.js
我们可以从以下的测试结果看出此两种方法的性能差距还是非常大的。
String concat test complete. Total process time 3950 ms.
StringBuilder test complete. Total process time 47 ms.
Resulting strings are identical.
希望此方法能帮助做javascript的朋友解决一些性能上的问题。
发表评论
-
LABjs、RequireJS、SeaJS 哪个最好用?为什么?
2013-10-28 16:36 676LABjs 的核心是 LAB(Loadin ... -
正则表达式
2011-03-26 09:00 856正则表达式可以: •测试字符串的某个模式。例如,可以对一个输入 ... -
offsetParent,parentNode,parentElement区别
2011-03-22 15:09 1326offsetParent 指与位置有关的上级元素 pare ... -
js中的preventDefault和stopPropagation
2011-01-07 13:57 1025首先讲解一下js中preventDefault和stopP ... -
javascrip编码(escape(), encodeURL(), encodeURIComponent())
2010-10-27 10:04 1032escape() 方法: 采用ISO-Latin字符集对指定 ... -
splice() 方法
2010-03-15 10:56 973splice() 方法用于插入、删除或替换数组的元素。 语法 ... -
ajax的原理和运行机制
2010-03-12 17:36 886关于ajax,是最近炒得非常火的一种技术,并且时下它也是非常流 ... -
HTML文档中小meta的大作用
2010-01-25 10:37 722meta 是用来在HTML文档中 ... -
JavaScript的陷阱
2010-01-22 13:38 782区分大小写 变量名和 ... -
连续字符自动换行的解决方案
2010-01-21 11:58 878http://dancewithnet.com/2008/12 ... -
JS判断脚本是否加载完成
2010-01-21 11:29 17011.function include_js(file) { 2 ... -
JavaScript程序编码规范
2010-01-20 15:27 828JavaScript文件 JavaScript程 ... -
js的nextSibling
2010-01-13 11:28 2519nextSilbling 属性的作用是:直接返回一个节点之后的 ... -
Javascript去掉字符串前后空格
2010-01-07 10:20 1398给string类型添加方法 String.prototype ... -
javascript中的location.reload() 和 location.replace()的区别和应用
2010-01-06 17:42 2450首先介绍两个方法的语法: reload 方法,该方法强迫浏览 ... -
为什么尽量用局部变量代替全局变
2010-01-06 16:48 1096在如何提高JavaScript性能 ... -
javascript中substring()方法与substr()方法的区别
2010-01-06 16:45 21401 这两个方法都是String对象的方法 2 substr( ... -
关于IE和火狐下JS加载循序的问题
2009-12-16 10:42 1214FF是按照循序加载的,而IE却不是的,也就是说FF是同步加载, ... -
当嵌套iframe时,提供了一个统一的访问超时退出的UI界面
2009-12-16 09:04 3930Js代码:(来自Javaeye中的一段代码) functio ... -
异步加载组织结构树以及操作
2009-11-25 11:53 3315//============================= ...
相关推荐
综上所述,Ajax技术提升了Web应用的交互性,而字符串处理和StringBuilder则在数据操作和性能优化方面发挥着关键作用。理解并熟练运用这些工具和概念,对于开发高效、用户友好的应用程序至关重要。
JavaScript中的这个实现是受.NET或其他使用`StringBuilder`的语言启发,为JavaScript环境提供了一种类似的字符串操作方式,尤其在处理大量字符串拼接时,性能优于使用`+`或`.concat()`的方法。 总的来说,`...
StringBuffer 和 StringBuilder 类提供了一系列用于字符串操作的方法,每个 StringBuffer 和 StringBuilder 对象都是一个可以改变的 Unicode 字符序列。修改字符串对象的操作不会产生新的字符串对象。两个类的区别...
下面我们将详细探讨Java中字符串的基本操作和`underscore.string`库的使用。 1. **Java String类基础** Java中的字符串是不可变对象,这意味着一旦创建了字符串对象,就不能更改它的值。`String`类提供了许多内置...
- **避免不必要的字符串复制**:字符串在内存中是不可变的,每次连接都会创建新的字符串对象,这可能导致内存占用增加和性能下降。 - **使用适当的数据结构**:在需要频繁连接字符串的情况下,使用`StringBuilder`...
JAVA 中有许多常用的类,每个类都有其特定的方法,本文将对 java.lang.Object 类、String 类和 StringBuffer 类的常用方法进行讲解。 一、java.lang.Object类 java.lang.Object 类是 JAVA 中所有类的父类,它提供...
5. 使用`StringBuilder`(非原生):JavaScript本身没有内置的StringBuilder类,但在某些库(如lodash或Underscore.js)中,你可以找到类似的功能。这种工具通常提供更高效的字符串连接,尤其是在大量连接时。 为了...
在实际开发中,很多编程语言都提供了一些内置的字符串工具类或模块,如Python的`str`类、JavaScript的`String`对象、C#的`System.Text.StringBuilder`等。这些工具类通常包含一系列静态方法,用于执行诸如格式化、...
使用`Array.join()`或`String.prototype.concat()`可以提高字符串连接的性能。 - **类型转换** 明确指定类型转换可以提高代码执行速度。例如,可以使用`Number()`、`parseInt()`等函数进行数字转换。 - **创建...
在循环中,Java和C#的`StringBuilder`和`StringBuffer`类能提供更好的性能。 四、格式化字符串 除了简单的连接外,我们经常需要进行格式化字符串,比如插入变量、转换数字等。在Python中,可以使用`format()`方法或...
与 `String` 类不同,`StringBuilder` 和 `StringBuffer` 都是用来处理可变字符串的对象。它们的主要区别在于是否支持多线程环境下的线程安全性。 - **内部结构**:`StringBuilder` 和 `StringBuffer` 内部都使用一...
4. **字符串处理**:Java.lang.String类在编程中广泛应用,掌握其不可变性、常用方法(如concat、substring、indexOf等)以及StringBuilder/StringBuffer类用于动态构建字符串的方法。 5. **集合框架**:包括List、...
C#提供了多种方法来实现字符串的连接,包括使用`+`运算符、`String.Concat()`函数、`StringBuilder`类以及`string.Join()`方法。 1. **使用`+`运算符**:这是最直观的方法,可以直接将两个字符串相加。例如,`...
`StringBuffer`和`StringBuilder`是线程安全和非线程安全的可变字符串类,分别在多线程和单线程环境中更优,因其在修改时不会创建新对象,提高了性能。 `List`和`Map`是Java集合框架中的接口,两者有显著的区别。`...
10. **字符串拼接优化**:JDK 1.8对String的concat()方法进行了优化,当字符串拼接操作涉及少量元素时,使用StringBuilder不再需要创建额外的中间对象。 总的来说,"jdk1.8-32"的免安装版本提供了一个轻量级的开发...
字符串在Java中是常见的数据结构,String类提供了许多方法用于字符串操作,如concat、substring、indexOf、replace等。同时,StringBuilder和StringBuffer线程安全的拼接也是面试中的常见问题。 四、IO流与NIO ...
`String`在Java中属于引用数据类型,它实际上是一个类(`java.lang.String`)。 **7. Java中操作字符串都有哪些类?它们之间有什么区别?** - **`String`**: 不可变的字符序列。 - **`StringBuilder`/`StringBuffer`...
System.out.println(obj.getClass().toString().concat("未找到这个类")); e.printStackTrace(); return null; } // 获取类的所有声明字段 Field[] fields = cla.getDeclaredFields(); for (Field temp : ...
- 考虑到内存使用和性能,如果数组非常大,还可以考虑分批次处理或者采用流式处理等方式。 #### 二、求解九宫图的全部填写方法 **知识点概述:** 此题考察了数组操作、递归算法以及文件读写能力。 **详细解析:**...