معلومات إضافية: تقنيات لتحسين أداء تحويلات XSL

ملخص

تسرد هذه المقالة بعض التقنيات لتحسين أداء تحويلات لغة أوراق الأنماط الموسعة (XSL). XSL لغة وظيفية. لا يعتمد XSL ميزات لغة الشائعة. على سبيل المثال، لا يعتمد XSL قيم الإرجاع أو globals. XSL غير لغة كائنية، ويجري النمطي تكاليف دورات المعالج. لا يتوفر أي تصحيح ل XSL، لذلك، يصبح التصحيح صعب.

مزيد من المعلومات

يعتمد أداء تحويل XSL على وحدات السيناريو التي تستخدمها. تقنيات المسردة في هذه المقالة إرشادات عامة. تأكد من أن تقوم بقياس نتائج كل ضبط. اختبار فقط إثبات ما إذا كانت تقنية معينة بتحسين الأداء أم لا. يمكنك استخدام أداة سطر الأوامر msxsl.exe للاختبار و لإجراء تحويلات XSL سطر الأوامر باستخدام المعالج Microsoft XSL. استدعاء الأداة المساعدة msxsl.exe 4.0 محلل XML ل Microsoft (msxml4.dll) لتنفيذ التحويل. يمكنك تنزيل هذه الأداة من موقع MSDN التالي:

تقنيات لتحسين الأداء

  • تحديد مسارات التعليمات البرمجية الأكثر شيوعاً لعرض الصفحات، وثم تحسين هذه المسارات. تحسين مقاطع شدة إعادة استخدام XSL.
  • بدلاً من استخدام العناصر الفرعية، استخدم سمات حيثما كان ذلك ممكناً. استخدام سمات بدلاً من العناصر بتحسين الأداء. عند إجراء مطابقات XPath، سمات أسرع لأنه تم كتابتها المزدوجة. هذا يسهل التحقق من صحة المخطط.
  • استخدام مسارات أكثر وضوحاً بدلاً من "//" كلما أمكن ذلك. عندما بيانات XML كبيرة، "//" البحث المتوفى متكرر مكلف للغاية. تعبير XPath معينة تنفيذ أسرع.
  • عند تطابق ضد قيم السمة, استخدام سمات العداد. استخدام أسماء سمات متعددة كمعاهدات الاستثمار الثنائية، وتعيين القيم الخاصة بها إلى true أو false. على سبيل المثال:
    <element_name attr1="1" attr2="1" attr3="0">
  • لا تستخدم برنامج نصي. استخدام برنامج نصي لخفضه الأداء.
  • مقارنة مباشرة باسم لتحسين الأداء. على سبيل المثال، بدلاً من استخدام التعليمات البرمجية التالية:
    ./info[type='title']
    استخدم التعليمات البرمجية التالية:
    ./title
    عند مقارنة القيم بدلاً من استخدام اسم كالتالي:
    Select="*[name()='sample']"
    استخدم التعليمات البرمجية التالية:
    Select="sample"
    بسبب مساحة الاسم معالجة في XPath، هذه مكافئة ليس بالضبط.
  • كافة إصدارات MSXML، الإصدار 3.0 أو الأحدث، تكون أسرع مع تصفية فهرس صريحة. تحسن أداء يعتمد على موضع العنصر في قائمة تابعة للأصل. بدلاً من استخدام ما يلي:
    /child_element
    استخدم ما يلي:
    /child_element[1]
  • استخدام المعلمات بدلاً من تقييم الاستعلام في كل مرة.
  • يسمح تحويلات XSL خيارات متعددة، ومع ذلك، كل منهم قد لا يعمل على نحو كاف. على سبيل المثال، بدلاً من استخدام التحويل التالية:
    <xsl:output method="html"/>
    استخدام التحويل التالية:
    <xsl:output method="html" indent="no" />
    يؤدي ذلك إلى تحسين الأداء للمسافة البادئة يوفر كثير من المسافات غير المرغوب فيها في الإخراج. بشكل افتراضي، القيمة للسمة المسافة البادئة نعم.
  • القالب مضمنة مع لكل أو سمة وضع عند التأكد من أن تطبيق القالب الخاص بك يطابق قالب واحد فقط. على سبيل المثال:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']" /><xsl:template match="//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple">
    لكل عقده يطابق ما يلي:
    "//xa:Axes/xa:Axis[@name='Axis1']"
    التعبير التالي:
    "//xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple"
    يتم تقييم كافة القوالب الأخرى مع وضع نفسه. يبدأ معالج تشغيل القوالب الافتراضية. ذلك نسخ كافة العقد النص، ويستدعي التالي:
    <xsl:apply-templates>
    لكافة العناصر. وبالتالي، لجميع الأطفال من مجموعة عقد الأصلي، يتم تقييم التعبير التطابقات المحتملة. مطابقة التعبير ليس مهمة بسيطة. لتحسين الأداء، كتابة التعليمات البرمجية كما يلي:
    <xsl:apply-templates select="//xa:Axes/xa:Axis[@name='Axis1']/xa:Tuples/xa:Tuple" mode="Axis1"/><xsl:template match="*" mode="Axis1">
  • استخدم قوالب أقل. وهذا ينطبق عند تشغيل القالب نفسه أكثر من مرة واحدة. هناك بعض التحسن في الأداء القوى لكل حلقة للبحث عن قالب عندما تكون أقل العدد من قوالب.
  • تقليل الاستخدام xsl: اختيار/xsl:when/xsl: إلا. ويتم أداء عندما تقع معظم تحديدات شرط إلا . لذلك، نجد عند، ومحاولة تجنب استخدام إلا عند معرفة قيمة معينة موجودة.
  • xsl:variables قيم ديناميكية. هذه المتغيرات غير موجودة في ذاكرة التخزين المؤقت والتشغيل كل مرة يتم الرجوع إليها في XSL. النوع الصريح من xsl:variable بتحسين الأداء. يمكنك القيام بكتابة الصب بوظائف string () و boolean() . على سبيل المثال:
    <xsl:variable name="_attr" select="string( /node/child[ @attr ] )">
  • MSXML مقابل System.Xml
    • محلل MSXML يختلف XmlReader و XmlWriter.
    • MSXML تحميل بيانات XML إلى طراز كائن المستند (DOM). من هذه الشجرة DOM، بيانات يمكن بسهولة الانتقال عبر XPath، تحويل خلال XSL، أو تحريرها وحفظها مرة أخرى. وهذا يمكن تطوير أسهل وأكثر قوة وقدرات على حساب استخدام الذاكرة والسرعة.
    • XmlReader و XmlWriter هي متسلسلة القراء والكتاب. يحتفظ المطور حالة يدوياً عند قراءة أو كتابة بيانات XML. هذا يسمح لاستخدام ذاكرة أقل وذلك، بتحسين الأداء.
    • كما يدعم محلل MSXML ساكس (API البسيط ل XML). ساكس من متسلسلة. يدعم برنامج.NET framework أيضا DOM باستخدام فئة XmlDocument .
    • يعتمد الخيار الأفضل على الاستفادة من برنامج.NET framework وعلى المهمة التي تقوم بها باستخدام XML.
  • ترتبط هذه التقنية للأداء مع قاعدة البيانات. يمكن تحسين الأداء System.Xml و MSXML في ما قبل الانضمام إلى حقول البحث كما هو موضح في التعليمات البرمجية التالية:
    <?xml version="1.0" encoding="UTF-8"?><AllLocalDescriptor xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <Descriptor key="AMC_Labels_" ID="AMC" Name="-2000" TypeName="Labels" LCID="">
    AMC
    </Descriptor>
    <Descriptor key="AMC_Labels_3082" ID="AMC" Name="-2000" TypeName="Labels" LCID="3082">
    AMC
    </Descriptor>
    يمكنك تجنب المسح بتصريح @key معرف نوع.
    desc = doc.getNodeFromID("AMC_Labels_3082")

المراجع

لمزيد من المعلومات، قم بزيارة مواقع ويب شبكة مطوري Microsoft (MSDN) التالية:للحصول على معلومات إضافية حول أداء XSLT، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
معلومات 325689 : أداء تحويلات XSLT في.NET Framework
331026 "أرني كيف": توليف الأداء ورقة أنماط Xslt الخاصة بي في.NET باستخدام System.Xml
الخطأ رقم: 2865 (تعديل المحتوى)
خصائص

رقم الموضوع: 815124 - آخر مراجعة: 15‏/01‏/2017 - المراجعة: 2

تعليقات