Oo緣來是你oO


          posts - 120,comments - 125,trackbacks - 0

          JavaScript中字符串連接性能優化

                  -- JavaScript 學習筆記

          馬嘉楠    2008-12-19

           

          var str = "hello"
          str 
          += " world"

           

          后臺所做工作:

          1)創建存儲 "hello" 的字符串,且使 str 指向它。

          2)創建存儲 "world" 的字符串。

          3)創建存儲結果的字符串。

          4)將 str 中的當前內容復制到結果字符串中。

          5)把 world 復制到結果字符串中。

          6)更新 str ,使 str 指向結果字符串。

           

          每拼接一次字符串就循環重復2)~6),如果重復成百上千次則會非常消耗資源,影響性能。

           

          解決方法:

          使用 Array 對象存儲字符串,之后使用 join()方法輸出結果。

          仿照 Java 中的 StringBuffer 類。

           

              function StringBuffer(){ 
                  
          this._strings = new
           Array; 
              } 
              StringBuffer.prototype.append 
          = function
           (str){ 
                  
          this
          ._strings.push(str); 
              } 
              StringBuffer.prototype.toString 
          = function
           (){ 
                  
          return this._strings.join(""
          ); 
              } 

           

          測試性能:

          代碼1:使用 "+=" 拼接字符串

           

          var d = new Date(); 
          var str = ""

          for(var i=0;i<10000;i++
          ){ 
              str 
          += "test"



          var d2 = new
           Date(); 
          document.writeln(d2.getTime()
          -d.getTime()); 

           

          代碼2:使用 StringBuffer

           

          var d = new Date(); 
          var str = new
           StringBuffer(); 
          for(var i=0;i<10000;i++
          ){ 
              str.append(
          "test"
          ); 

          var res =
           str.toString(); 
          var d2 = new
           Date(); 
          document.writeln(d2.getTime()
          -d.getTime()); 

           

          從多次測試結果看來,使用StringBuffer 可以節省50%以上的時間。



          馬嘉楠
          jianan.ma@gmail.com

          posted on 2008-12-20 00:09 馬嘉楠 閱讀(486) 評論(0)  編輯  收藏 所屬分類: Java Script
          主站蜘蛛池模板: 新昌县| 天祝| 辰溪县| 富川| 固阳县| 聂荣县| 海宁市| 正定县| 兴山县| 长武县| 锡林浩特市| 眉山市| 馆陶县| 枣阳市| 靖西县| 岐山县| 织金县| 恩施市| 惠水县| 洛川县| 拜城县| 航空| 宝鸡市| 贵港市| 汉寿县| 浦江县| 巨鹿县| 铜梁县| 祁连县| 正安县| 鞍山市| 盐津县| 丰镇市| 琼结县| 湖州市| 雅安市| 江城| 会理县| 元谋县| 东港市| 霞浦县|