2013-04-12 3 views
0

나는 식을 컴파일하고 하나만 평가하는 것 외에는 같은 것을하는 다음 두 코드 세그먼트를 가진다.XPath 표현식을 컴파일해야하는 이유는 무엇입니까?

//1st option - compile and run 

    //make the XPath object compile the XPath expression 
    XPathExpression expr = xpath.compile("/inventory/book[3]/preceding-sibling::book[1]"); 
    //evaluate the XPath expression 
    Object result = expr.evaluate(doc, XPathConstants.NODESET); 
    nodes = (NodeList) result; 
    //print the output 
    System.out.println("1st option:"); 
    for (int i = 0; i < nodes.getLength(); i++) { 
     System.out.println("i: " + i); 
     System.out.println("*******"); 
     System.out.println(nodeToString(nodes.item(i))); 
     System.out.println("*******"); 
    } 


    //2nd option - evaluate an XPath expression without compiling 

    Object result2 = xpath.evaluate("/inventory/book[3]/preceding-sibling::book[1]",doc,XPathConstants.NODESET); 
    System.out.println("2nd option:"); 
    nodes = (NodeList) result2; 
    //print the output 
    for (int i = 0; i < nodes.getLength(); i++) { 
     System.out.println("i: " + i); 
     System.out.println("*******"); 
     System.out.println(nodeToString(nodes.item(i))); 
     System.out.println("*******"); 
    } 

출력은 완전히 동일합니다. 컴파일과 평가의 차이점은 무엇입니까? 표현식을 컴파일하거나 컴파일하지 않는 이유는 무엇입니까?

+0

동일한 xpath를 반복해서 사용하는 경우 컴파일하여 시간을 절약하십시오. 당신이 갈 때마다 다른 xpath를 사용한다면 (예를 들어, 당신이 그것을 즉석에서 생성 할 때), 컴파일 할 필요가 없습니다. – shakurov

답변

5

XPath 식을 컴파일하면 즉시 사용할 수있는 형식으로 저장됩니다. 표현식 평가도 컴파일되지만 컴파일 된 결과는 이후에 버려집니다.

반복 같은 표현식을 반복 사용할 때 컴파일하는 것이 좋습니다.

0

xpath 컴파일에는 시간이 걸립니다. xpath.evaluate은 호출 할 때마다 xpath를 컴파일합니다. 사전 컴파일 된 표현식을 사용하면 성능이 향상됩니다.

+0

자, 그럼 왜 컴파일해야합니까? 그 차이는 실제로는 있지만 주된 차이는 아닙니다. – Jjang

+0

사람들이 말했듯이, 같은 표현식을 두 번 이상 사용하려는 경우 표현식을 컴파일하는 유일한 이유는 성능을 향상시키는 것입니다. –

1

두 번째 evaluate은 표현식을 암시 적으로 컴파일하지만 평가 직후 컴파일 된 양식을 버립니다. 귀하의 예제에서 이것은 한 번만 표현을 사용하기 때문에 아무런 차이가 없습니다.

그러나 표현식을 두 번 이상 사용하면 한 번 컴파일하고 다시 컴파일 된 양식을 여러 번 사용하면 매번 다시 컴파일하는 것과 비교하여 상당한 처리 시간을 절약 할 수 있습니다.

관련 문제