javascript - يتم تحليل JSON أسرع من تحليل XML




(8)

أقوم بإنشاء مكتبة جافا سكريبت متطورة للعمل مع إطار جانب الخادم الخاص بشركتي.

يقوم الإطار الجانبي للخادم بترميز بياناته إلى تنسيق XML بسيط. ليس هناك أي اسم مميز أو أي شيء من هذا القبيل.

من الناحية المثالية ، أرغب في تحليل جميع البيانات في المتصفح باسم JSON. ومع ذلك ، إذا قمت بذلك ، فأنا بحاجة إلى إعادة كتابة بعض رمز جانب الخادم لإسقاط JSON أيضًا. هذا هو الألم لأن لدينا واجهات برمجة التطبيقات العامة التي لا يمكنني تغييرها بسهولة.

ما يهمني حقًا هنا هو الأداء في متصفح تحليل JSON مقابل XML. هل هناك فرق كبير حقا للقلق؟ أو هل يجب عليّ الذهاب إلى JSON حصريًا؟ هل لدى أي شخص أي خبرة أو مقاييس في فرق الأداء بين الاثنين؟

أدرك أن معظم مطوري الويب الحديثين ربما يختارون JSON ويمكنني أن أرى السبب. ومع ذلك ، أنا حقا مهتم فقط بالأداء. إذا كان هناك اختلاف هائل مثبت ، فأنا على استعداد لإنفاق الجهد الإضافي في توليد جانب خادم JSON للعميل.



أولاً ، أود أن أقول شكري لكل من أجاب على سؤالي. أنا حقا أقدر كل ردودكم.

فيما يتعلق بهذا السؤال ، أجريت بعض الأبحاث الإضافية عن طريق تشغيل بعض المعايير. يحدث التحليل في المتصفح. IE 8 هو المتصفح الوحيد الذي لا يحتوي على محلل JSON أصلي. إن XML هو نفس بيانات إصدار JSON.

Chrome (الإصدار 8.0.552.224) ، JSON: 92ms ، XML: 90ms

Firefox (الإصدار 3.6.13) ، JSON: 65ms ، XML: 129ms

IE (الإصدار 8.0.6001.18702) ، JSON: 172ms ، XML: 125ms

من المثير للاهتمام ، يبدو أن Chrome لديه نفس السرعة تقريبًا. يرجى ملاحظة ، هذا هو تحليل الكثير من البيانات. مع مقتطفات قليلة من البيانات ، قد لا تكون هذه صفقة كبيرة.


إن تحليل أو إنشاء json سهل نسبيًا من xml وأيضًا توفر معظم اللغات طرقًا أسهل لتشفير وفك شفرة json وهي معقدة نوعًا ما مع xml.


الأداء ليس في الواقع اعتبارًا ، على افتراض أنك لا تتحدث عن غيغابايت من XML. نعم ، سيستغرق الأمر وقتا أطول (XML أكثر مطولاً) ، ولكنه لن يكون شيئًا سيلاحظه المستخدم.

المشكلة الحقيقية ، في رأيي ، هي دعم XML في JavaScript. E4X جيد ، لكنه غير مدعوم من قبل Microsoft. لذلك ستحتاج إلى استخدام مكتبة خارجية (مثل JQuery) لتحليل XML.


سيكون الفرق في الأداء صغيرًا للغاية ، حتى أنك لن تلاحظ ذلك (و: لا ينبغي عليك التفكير في مشاكل الأداء حتى تكون لديك مشاكل في الأداء - هناك الكثير من النقاط المهمة التي يجب الاهتمام بها - يمكن صيانتها وقراءتها وتوثيقها) الشفرة...).

ولكن ، للإجابة على سؤال: سيكون JSON أسرع في التحليل (لأنه تدوين بسيط لجافا سكريبت).


في هذه الحالة ، أود أن أقول عصا مع XML. تحتوي جميع المتصفحات الرئيسية على واجهة تحليل DOM التي ستحلل XML جيد الإنشاء. يعرض هذا الرابط طريقة لاستخدام واجهة DOMParser في Webkit / Opera / Firefox ، بالإضافة إلى كائن DOM ActiveX في IE: https://sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring


يجب أن يكون JSON أسرع لأنه JS Object Notation ، مما يعني أنه يمكن التعرف عليه أصلاً بواسطة JavaScript. في PHP على جانب GET من الأشياء ، سأفعل في كثير من الأحيان شيء من هذا القبيل:

<script type="text/javascript">
    var data = <?php json_encode($data)?>;
</script>

لمزيد من المعلومات حول هذا ، انظر هنا:

لماذا يقوم الجميع باختيار JSON Over XML لـ jQuery؟

أيضا ... ما "جهد إضافي" هل لديك حقا في وضع "توليد" JSON؟ من المؤكد أنك لا تستطيع أن تقول أنك ستنشئ سلسلة JSON يدويًا؟ تقريبا كل اللغات الحديثة من جانب الخادم لديها مكتبات تقوم بتحويل المتغيرات الأصلية إلى سلاسل JSON. على سبيل المثال ، json_encode وظيفة json_encode الأساسية في PHP إلى تحويل مصفوفة json_encode مثل هذا:

$data = array('test'=>'val', 'foo'=>'bar');

إلى

{"test": "val", "foo": "bar"}

وهو ببساطة كائن جافا سكريبت (حيث لا توجد صفائف ارتباطية (بالمعنى الدقيق للكلمة) في JS).


يعتمد ذلك أيضًا على كيفية تنظيم JSON الخاص بك. وتميل البنى الشبيهة بالشجرة إلى تحليل أكثر كفاءة من قائمة الأشياء. هذا هو المكان الذي يكون فيه الفهم الأساسي لهياكل البيانات مفيدًا. لن أكون مندهشًا إذا قمت بتحليل بنية تشبه القائمة في JSON قد تبدو كالتالي:

{
        {
            "name": "New York",
            "country":"USA",
            "lon": -73.948753,
            "lat": 40.712784
        },
        {
            "name": "Chicago",
            "country":"USA",
            "lon": -23.948753,
            "lat": 20.712784
        },
        {
            "name": "London",
            "country":"UK",
            "lon": -13.948753,
            "lat": 10.712784
        }
}

ثم قارنه بشجرة مثل البنية في XML والتي قد تبدو كالتالي:

<cities>
  <country name="USA">
     <city name="New York">
        <long>-73.948753</long>
        <lat>40.712784</lat>
     </city>
     <city name="Chicago">
        <long>-23.948753</long>
        <lat>20.712784</lat>
     </city>
  </country>
 <country name="UK">
     <city name="London">
        <long>-13.948753</long>
        <lat>10.712784</lat>
     </city>
  </country>
</cities>

قد تسفر بنية XML عن وقت أسرع من JSON ، إذ إن كنت أتسلق عبر العقدة في المملكة المتحدة للعثور على لندن ، فلا داعي لأن أتعرض لباقي الدول للعثور على مدينتي. في مثال JSON ، قد أفعل فقط إذا كانت لندن بالقرب من أسفل القائمة. لكن ما لدينا هنا هو اختلاف في الهيكل. سأفاجأ عندما أجد أن XML أسرع في كلتا الحالتين أو في حالة تكون فيها البنى متماثلة تمامًا.

Here إحدى التجارب التي استخدمتها في استخدام بايثون - أعلم أن السؤال يدور حول هذا الأمر تحديدًا من منظور جافا سكريبت ، ولكنك قد تجده مفيدًا. تظهر النتائج أن JSON أسرع من XML. ومع ذلك ، فالنقطة هي: كيف سيكون للهيكل تأثير على مدى كفاءة استرجاعها.







json