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
          主站蜘蛛池模板: 麻栗坡县| 麟游县| 米易县| 莱芜市| 建昌县| 上栗县| 鱼台县| 宁南县| 丹巴县| 大埔区| 巢湖市| 临澧县| 崇仁县| 通河县| 杨浦区| 博湖县| 荔浦县| 大余县| 彰化市| 达日县| 石台县| 威信县| 梅州市| 和顺县| 永修县| 名山县| 合阳县| 原平市| 衢州市| 盐津县| 民乐县| 休宁县| 永安市| 石门县| 巴南区| 平武县| 成武县| 洞头县| 南安市| 浑源县| 日土县|