अद्यतन 17.Jul.2013:
XALAN 2.7
एक अनुरोध के भीतरdocument()
कॉल कैश नहीं है। तो XSL में एक चर में प्रत्येक आवश्यक दस्तावेज़ को स्टोर करना महत्वपूर्ण है।एक्सएसएलटी दस्तावेज़(): क्या यह कई बार कॉल करते समय धीमा है?
मैं काफी कुछ समय के लिए खोज की है और मेरे साधारण सवाल का ठोस जवाब नहीं मिला:
किस तरीके से तेजी से होता है या संकलक "स्मार्ट" पर्याप्त है ताकि दोनों वेरिएंट ही कर रहे हैं ?
नोट: मैं (JDK 1.6 में डिफ़ॉल्ट कार्यान्वयन) Xalan 2.7 उपयोग कर रहा हूँ:
1) मेरे पास है एक बाहरी XML में एक संपत्ति को पढ़ने के लिए:
<xsl:value-of select="document($path)/person/address/city"/>
जब भी मैं शहर की जरूरत है, मैं उपरोक्त अभिव्यक्ति का उपयोग करता हूं (मान लें 100 बार)
2) दस्तावेज़() 100 बार कॉल करने के बजाय, मैं एक्सएमएल नोड को एक चर में संग्रहीत करता हूं:
<xsl:variable name="node" select="document($path)"/>
और फिर मैं का उपयोग 100 गुना
<xsl:value-of select="$node/person/address/city"/>
कौन सा तेज़ी से, बेहतर है, जो कारणों के लिए है? धन्यवाद!
मैं भी एक विशेषज्ञ उत्तर में घुसपैठ कर रहा हूं, लेकिन, जैसा कि मुझे लगता है, 'दस्तावेज़ (path_to_doc)' के एकाधिक कॉल के मामले में, xslt प्रोसेसर कैशिंग प्राप्ति पर निर्भर हैं, मामले में, जब दस्तावेज़ नोड चर चर में संग्रहीत होता है इसे किसी भी मामले में एक बार लोड किया जाना चाहिए। –
हां, मुझे यह भी लगता है कि यह ** प्रोसेसर के कार्यान्वयन ** पर निर्भर करता है, लेकिन मुझे उत्सुकता है कि ** Xalan 2.7 (जेडीके 1.6 में डिफ़ॉल्ट प्रोसेसर) ** यह करता है। – basZero
मैं 100% सकारात्मक नहीं हूं लेकिन मुझे लगता है कि ज़लान 'दस्तावेज़()' परिणाम कैश नहीं करता है, लेकिन xsltproc करता है। हालांकि 'दस्तावेज़()' तर्क को यूआरआई ([देखें spec] (http://www.w3.org/TR/xslt#add-func) के रूप में व्याख्या किया जाता है), इसलिए एक आक्रामक कैशिंग सही समझ में आती है। –