CẬP NHẬT 17.Jul.2013:
XALAN 2.7
không cachedocument()
cuộc gọi trong vòng một yêu cầu. Vì vậy, điều quan trọng là lưu trữ từng tài liệu cần thiết trong một biến trong XSL.Tài liệu XSLT(): Có chậm hơn khi gọi nó nhiều lần không?
Tôi đã tìm kiếm cho khá trong một và không tìm thấy câu trả lời cụ thể cho câu hỏi đơn giản của tôi:
Những cách tiếp cận nhanh hơn hay là trình biên dịch "thông minh" đủ để cả hai biến thể đều giống nhau ?
Lưu ý: Tôi đang sử dụng Xalan (thực hiện mặc định trong JDK 1.6) 2,7:
1) Tôi có đọc một tài sản trong một XML bên ngoài:
<xsl:value-of select="document($path)/person/address/city"/>
Bất cứ khi nào tôi cần thành phố, tôi sử dụng biểu thức ở trên (giả sử 100 lần)
2) Thay vì gọi tài liệu() 100 lần, tôi lưu trữ nút XML trong một biến:
<xsl:variable name="node" select="document($path)"/>
Và sau đó tôi sử dụng 100 lần
<xsl:value-of select="$node/person/address/city"/>
Cái nào nhanh hơn, tốt hơn, mà lý do? Cảm ơn bạn!
Tôi cũng bị đặt trong câu trả lời của chuyên gia, nhưng, như tôi nghĩ, trường hợp có nhiều lệnh 'tài liệu (path_to_doc)' phụ thuộc vào việc thực hiện bộ nhớ đệm xslt, trong trường hợp khi nút tài liệu được lưu trữ trong biến nó phải được nạp một lần trong mọi trường hợp. –
Vâng, tôi cũng đoán rằng nó ** phụ thuộc vào việc thực hiện ** của bộ vi xử lý, nhưng tôi tò mò như thế nào ** Xalan 2.7 (bộ xử lý mặc định trong JDK 1.6) ** hiện nó. – basZero
Tôi không phải là 100% tích cực nhưng tôi nghĩ Xalan không cache 'tài liệu()' kết quả, nhưng xsltproc nào. Tuy nhiên, đối số 'document()' được hiểu là một URI ([xem spec] (http://www.w3.org/TR/xslt#add-func)), do đó một bộ nhớ đệm tích cực sẽ có ý nghĩa hoàn hảo. –