javascript更改字符串案例速度

时间:2011-03-01 05:16:55

标签: javascript optimization

哪个更快? javascript中的toUpperCase()或toLowerCase()?

4 个答案:

答案 0 :(得分:14)

以下是主流浏览器(几个月前)的test results。得出的结论是toLowerCase()更快,但对为什么提供没有任何见解。

修改

出于好奇,我已经离开并浏览了WebKit JavaScript源代码。除了对.toUpperCase().toLowerCase()以及.toASCIIUpper().toASCIILower()的一些调用外,Unicode::toUpper()Unicode::toLower()原型方法完全相同。进一步检查前两种方法,我发现.toLowerCase()函数比.toUpperCase()函数稍微复杂一点。


.toASCIILower() 执行一些简单的位移逻辑:

char toASCIILower(char c) { 
    return c | ((c >= 'A' && c <= 'Z') << 5); 
}

.toASCIIUpper() 更多参与其中:

char toASCIIUpper(char c) { 
    return static_cast<char>(c & ~((c >= 'a' && c <= 'z') << 5)); 
}

.toASCIIUpper()函数中的静态强制转换和额外按位求反(〜),重复超过一百万次迭代,可能会导致其性能较差。

现在,这都是推测性的;我没有做过真正的测试,也没有尝试完全理解这些方法,但也许其他人可以详细说明。

答案 1 :(得分:3)

根据进行的测试,website

toLowerCase() is faster than toUpperCase()

答案 2 :(得分:2)

它们应该完全相同。 可能它们可以针对所有字符已经大写/小写的情况进行优化,但是它将取决于字符串已经存在的情况,例如'abc'.toLowerCase()会比'ABC'.toLowerCase()更快,因为它不必分配新的字符串。我不知道有任何实现这样做。

真的,找出答案的唯一方法是用各种不同的字符串测试这两个函数。

答案 3 :(得分:1)

以下是我的测试结果。

浏览器:Google Chrome

操作系统:Ubuntu

toLowerCase:19.68秒

toUpperCase:20.71秒

<html>
  <body>
    <script type="text/javascript">
      var i=0;
      for (i=0;i<=100000000;i++) { 
        "some string".toUpperCase();
        //"SOME STRING".toLowerCase();
      }
      document.write("done!");
    </script>
  </body>
</html>