내가 필요로하는 것이 무엇보다 명확한 것입니다.XSLT에서 불필요한 변수 사용은 얼마나 비쌉니까?
에 관해서는 this answer으로, XSLT 변수는 저렴합니다! 내 질문입니다 :이 진술은 모든 시나리오에 유효합니까? 생성되고 얻을 4 라인 코드와 함께 파괴 얻을 인스턴트 변수는 내 생각에 실제로 나쁜 연습입니다 루트 노드 또는 하위 엔티티를로드, 성가신되지 않습니다 ..
나는 두 개의 XSLT 파일, 동일한 입력 및 출력 요구 사항 :
XSLT1 (불필요한 변수없이) :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Collection>
<xsl:for-each select="CATALOG/CD">
<DVD>
<Cover>
<xsl:value-of select="string(TITLE)"/>
</Cover>
<Author>
<xsl:value-of select="string(ARTIST)"/>
</Author>
<BelongsTo>
<xsl:value-of select="concat(concat(string(COUNTRY), ' '), string(COMPANY))"/>
</BelongsTo>
<SponsoredBy>
<xsl:value-of select="string(COMPANY)"/>
</SponsoredBy>
<Price>
<xsl:value-of select="string(number(string(PRICE)))"/>
</Price>
<Year>
<xsl:value-of select="string(floor(number(string(YEAR))))"/>
</Year>
</DVD>
</xsl:for-each>
</Collection>
</xsl:template>
</xsl:stylesheet>
XSLT2 (전체 XML을로드하는 불필요한 변수 "루트"로) :
,536,913,632넣어 앞뒤로하려면 접근 방식을 변경하는 내 제안을 ...뿐만 아니라 자식 개체로 확장 (10)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="root" select="."/>
<Collection>
<xsl:for-each select="$root/CATALOG/CD">
<DVD>
<Cover>
<xsl:value-of select="string(TITLE)"/>
</Cover>
<Author>
<xsl:value-of select="string(ARTIST)"/>
</Author>
<BelongsTo>
<xsl:value-of select="concat(concat(string(COUNTRY), ' '), string(COMPANY))"/>
</BelongsTo>
<SponsoredBy>
<xsl:value-of select="string(COMPANY)"/>
</SponsoredBy>
<Price>
<xsl:value-of select="string(number(string(PRICE)))"/>
</Price>
<Year>
<xsl:value-of select="string(floor(number(string(YEAR))))"/>
</Year>
</DVD>
</xsl:for-each>
</Collection>
</xsl:template>
</xsl:stylesheet>
은 접근-2는 실시간으로 존재하고 가리키고는 XML 변수의 XSLT 사용에서 몇 매크로 블럭에 몇 KB 정도를 것 , 그 뒤에 이론을 확인해야합니다.
접근 방식 -2 내 생각에 따르면, 시스템은 메모리에서 XML 데이터를 계속해서 다시로드합니다 (여러 변수를 사용하여 하위 엔티티를로드 할 때 상황이 바뀝니다) 최악의 경우) 변환 프로세스가 느려집니다.
여기에이 질문을 게시하기 전에 타이머를 사용하여 두 개의 XSLT 성능을 테스트했습니다. 첫 번째 접근 방식은 접근 방식 2보다 적은 밀리 초가 소요됩니다. (필자는 시스템 캐쉬로 복잡성을 피하기 위해 copy-XML 파일을 사용하여 두 개의 XSL 파일을 테스트했습니다). 하지만 다시 시스템 캐시가 큰 혼란스러운 역할을 할 수도 있습니다 ..
이 분석에도 불구하고 나는 여전히 염두에두고있는 질문이 있습니다! 우리는 정말로 변수 사용을 피할 필요가 있습니다. 그리고 내 시스템에 관한 한, 실시간 XSLT 파일을 수정하여 '접근 1'을 사용하는 것이 얼마나 가치가 있습니까?
또는 XSLT 변수가 다른 프로그래밍 언어 (Incase가 아닌 경우)와 다릅니다. 예를 들어, XSLT 변수는 실제로 데이터를 저장하지 않습니다. select="."
자료! 또는이 같은 ..? AND HENCE는 주저없이 XSLT 변수를 계속 사용합니다.
당신의 의견은 어떻습니까?
- 호스트 프로그래밍 언어 또는 시스템 : 현재 시스템에
빠른 정보 시벨
- XSLT 프로세서 (C++ 백엔드 코드입니다) : Xalan에
대답은 구현에 따라 달라집니다. –
당신이 의미하는 * 구현 * 단어를 자세히 설명해 주시겠습니까? – Enthusiastic
호스트 프로그래밍 언어 (C# - net, Java 등) 또는 XSLT 프로세서 (saxon, xalan 등)가 변경되는 것을 의미합니까 ?? – Enthusiastic