用jquery解析XML或JSON

问题描述:

我有一个相当大的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; 
        } 
       }); 
      }); 
     } 
    }); 

虽则回答你的问题,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

在整体JSON在性能胜过XML与signific蚂蚁的数量,所以如果可能的话,你应该尝试从XML切换你的文件到JSON。