2011-08-24 132 views
0

我有一個相當大的XML文件(大約42MB),我用jquery解析。我需要根據ID有選擇地顯示某些節點​​。通過這樣做,Web瀏覽器變得無響應,並且平均分析時間大於15秒。用jquery解析XML或JSON

我的查詢是否將這個大的XML文件轉換爲JSON,有助於提高性能?以下是XML的示例。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE thesaurus SYSTEM "Thesaurus_1_4.dtd"> 
<thesaurus action="ExportLanguage" language="en" version="2.7" date="2011-08-15"> 
    <options/> 
    <wordblocks> 
    <wordblock> 
     <term type="forbidden" lang="en" termid="18297"> 
     <value>1,1-DIETHOXYETHANE</value> 
     </term> 
     <terms> 
     <term rel="USE" lang="en" termid="30" type="valid"> 
      <value>ACETAL</value> 
     </term> 
     </terms> 
    </wordblock> 
    <wordblock> 
     <term type="forbidden" lang="en" termid="18307"> 
     <value>1,2,3-PROPANETRIOL</value> 
     </term> 
     <terms> 
     <term rel="USE" lang="en" termid="4028" type="valid"> 
      <value>GLYCEROL</value> 
     </term> 
     </terms> 
    </wordblock> 
    <wordblock> 
     <term type="forbidden" lang="en" termid="18308"> 
     <value>1,2,3-TRIHYDROXYBENZENE</value> 
     </term> 
     <terms> 
     <term rel="USE" lang="en" termid="8094" type="valid"> 
      <value>PYROGALLOL</value> 
     </term> 
     </terms> 
    </wordblock> 
    <wordblock> 
     <term type="forbidden" lang="en" termid="18309"> 
     <value>1,2,4,5-TETRAMETHYLBENZENE</value> 
     </term> 
     <terms> 
     <term rel="USE" lang="en" termid="2814" type="valid"> 
      <value>DURENE</value> 
     </term> 
     </terms> 
    </wordblock> 
    <wordblock> 
     <term type="forbidden" lang="en" termid="18298"> 
     <value>1,2-DIHYDROXYANTHRAQUINONE</value> 
     </term> 
     <terms> 
     <term rel="USE" lang="en" termid="229" type="valid"> 
      <value>ALIZARIN</value> 
     </term> 
     </terms> 
    </wordblock> 
</wordblocks> 
</thesaurus> 

和這裏的AJAX調用XML

LoadRelatedTerms = function (term) { 
    $.ajax({ 
     type: "GET", 
     url: "THESAURUS.xml", 
     dataType: "xml", 
     success: function (xml) { 
      $('.items').html(''); 
      $(xml).find('wordblock').each(function() { 
       $(this).children('term').each(function() { 
        var value = $(this).find('value').text(); 
        if (value == term) { 
         $(this).parent().children('terms').children('term[level=1]').each(function() { 
          var id = $(this).attr('id'); 
          var termValue = $(this).find('value').text(); 
          $('<div class="items" id="term' + id + '"></div>').html(termValue).appendTo('#page-wrap'); 
         }); 
         return false; 
        } 
       }); 
      }); 
     } 
    }); 

回答

0

雖則回答你的問題,JSON將提高性能,因爲它是一個天然的JS,我相信解析已被許多優化瀏覽器。此外,傳輸的大小將會小於XML

我在質疑將這麼大的文件帶到客戶端並在那裏解析它的方法。

如果您的架構可能,您應該在服務器端進行解析和HTML顯示,同時從客戶端提供進度指示器。

需要明確的是,這些步驟應該是:

  1. jQuery的調用通過AJAX服務器來處理XML,顯示進度指示器
  2. 在服務器上,解析了必要的數據大的XML文件,得到HTML片段到客戶端
  3. 追加到佔位符分配了HTML片段,刪除進度指示器
+0

同意,我正在評估做客戶端與服務器端的性能。在服務器端,我需要查詢超過30萬條記錄的相當複雜的數據庫。此外,數據庫位於另一個數據庫服務器上,而不是應用程序的數據庫服所以,服務器端也有性能開銷。 – itsbalur

+0

對不起,我不清楚這個問題。 XML文件位於服務器上。正在發生Ajax調用,HTML正在客戶端上更新。即使如此,表現並不好。 – itsbalur

+0

我說的是通過網絡傳輸42MB文件並不理想,然後解析它。在服務器上處理它可能會更好,然後返回HTML並且不在客戶端處理HTML – momo

1

在整體JSON在性能勝過XML與signific螞蟻的數量,所以如果可能的話,你應該嘗試從XML切換你的文件到JSON。