使用Jquery解析XML或JSON

时间:2011-08-24 16:21:09

标签: jquery xml json parsing

我有一个相当大的XML文件(大约42MB),我用jquery解析。我需要根据ID有选择地显示某些节点​​。通过这样做,Web浏览器变得无响应,并且解析的平均时间大于15秒。

我的疑问是将这个大型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>

这是对XML的ajax调用

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;
                    }
                });
            });
        }
    });

2 个答案:

答案 0 :(得分:1)

总体而言,JSON在性能上大大超过了XML,因此如果可能的话,您应该尝试将文件从XML切换为JSON。

答案 1 :(得分:0)

要回答你的问题,JSON会提高性能,因为它是一个本机JS,我确信解析已被许多浏览器优化。而且,传输的大小将小于XML

我质疑将这么大的文件带到客户端并在那里解析它的方法。

如果您的架构可能,您应该在服务器端进行解析和HTML显示,同时从客户端提供进度指示器。

要明确,步骤应该是:

  1. jquery通过AJAX调用服务器来处理XML,显示进度指示器
  2. 在服务器上,解析大型XML文件以获取必要的数据,并将HTML片段提供给客户端
  3. 将HTML片段附加到已分配的占位符,删除进度指示器