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 馬嘉楠 閱讀(480) 評論(0)  編輯  收藏 所屬分類: Java Script
          主站蜘蛛池模板: 高雄市| 华池县| 特克斯县| 娱乐| 曲水县| 柘荣县| 横峰县| 双牌县| 武定县| 英德市| 四平市| 沙雅县| 叶城县| 十堰市| 甘南县| 云龙县| 全南县| 九龙县| 沈阳市| 荔波县| 聊城市| 那曲县| 扎赉特旗| 天全县| 余干县| 万宁市| 唐海县| 黑龙江省| 崇州市| 嘉峪关市| 芜湖市| 兰西县| 淄博市| 浦江县| 定兴县| 台北县| 石棉县| 宁安市| 太保市| 宁都县| 吐鲁番市|