2016-09-12 4 views
0

GWT 순열을 정확하게 지정하고 그 내부의 변형 (각 속성 값의 조합)을 제어해야하지만 자세한 동작 사양을 찾는 데 어려움이 있습니다.* .gwt.xml을 통해 GWT 순열을 정확하게 제어하십시오.

내 실험을하는 동안 나는 set-property 생성을 지켜야한다는 것을 배웠습니다 ... when-property-is cycles는 "안정적"입니다. 즉주기의 어떤 부분도 변경하지 않습니다. "확인"하십시오. 그게 내가 할 수있는 것을 제한, 그래서 다른 방법으로 시도하기로 결정 - 예를 들어 (단지) 새로운 속성을 정의를 :

<define-property name="precise.permutation" values="webkit,gecko,ie,unsupported"/> 

... 다음과 같이 있습니다

<set-property name="precise.permutation" value="webkit"> 
    <!-- ... custom conditions ... --> 
    </set-property> 
    <set-property name="precise.permutation" value="gecko"> 
    <!-- ... custom conditions ... --> 
    </set-property> 
    <set-property name="precise.permutation" value="ie"> 
    <!-- ... custom conditions ... --> 
    </set> 
    <set-property name="precise.permutation" value="unsupported"> 
    <!-- ... custom conditions ... --> 
    </set-property> 

<set-property name="precise.permutation" value="webkit,gecko,ie" /> 

I는 다른 특성을 축소했다 : 그것은 상기와 동일 셋 속성 태그를 사용하므로 ... I는 예를 들어 사용되는 지원되지 않는지만 모든이 제한하려고하지만, 완전히 직관적이고그들이 추가 순열을 일으키지 않는지 확인하십시오.

불행히도, 의도 한대로 작동하지 않는 것 같습니다 (GWT 2.8 RC2로 시도). "지원되지 않는"순열이 나타나지 않더라도 (원하는 경우) 다른 순열에서 속성의 조합이 다시 나타납니다 (원하는 것은 아닙니다).

누구든지 내가 권위있는 을 찾아서 문서를 완성하거나 도움을받을 수 있습니까?

감사합니다!

난 아직 자세한 문서를 발견 have't하지만 실험의 톤을 수행하고 다음과 같은 결론을 내렸다
+0

후속 작업의 세부 사항을 요약 할 수 있습니까? "맞춤형 조건"이 무엇인지, 결과가 무엇일까요? 각각 하나 하나에서 여러 개의 OR 조건을 가지고 있다고 가정하면, collision을 정의하지 않았기 때문에 (정확히는 공유하지 않은) "exact.permutation"에 따라 여러 순열을 가져야합니다. 구체적인 내용이 없으면 우리는 당신이 이해하지 못하는 것을 볼 수 없습니다. –

+0

즉, 정확히 무엇을 시도 했습니까? 무엇을 기대 했습니까? 대신 무엇을 얻었습니까?그로부터 우리는 당신이 설명하지 못한 것을 알려주거나 (어떻게 고칠 것인가, 다른 말로 바꾸는 방법), 또는 당신이 발견 한 버그를 제기 할 수 있습니다. –

+0

제 문제는 * .gwt.xml 구문이 정확히 어디에 정의되어 있지 않은지 정확히 알지 못합니다. 따라서, 나는 어떤 기대도 형성 할 수 없다. 나는 단지 어둠 속을 파고있다. 순열을 직접 제어하는 ​​방법과 내부의 복잡성을 줄이는 방법을 알아 내려고 노력하고 있습니다. 어떤 순열 안에서 .. – Learner

답변

0

...

(참고 : 내 예 내가 함께 개발 센차 GXT에서 몇 가지 개념을 사용)

< define- 속성 >은 속성과 가능한 값을 정의하는 데 사용되지만 실제로 사용되는 값의 마지막 단어는 아닙니다. * .gwt.xml 파일의 계층 구조에는 속성 당 정확히 하나의 정의가 있어야합니다. 값으로 속성을 설정하지만, (이상적으로 & ltdefine 재산권 >에 정의 된 것의 일부에) 해당 속성에 사용할 수있는 값의 컬렉션 규칙의 종류를 생성하지 않습니다 >

< 세트-속성입니다. 주어진 속성에 대해 집합 속성 >의 마지막 선언이 승리합니다. 조심해! <이 모듈을 상속받은 을 상속 한 후에 집합 속성 <을 사용하면 상속 한 규칙을 재정의하거나 무시할 수 있습니다. 조건부 규칙과 무조건 부식 규칙이 있습니다. 순열을 결정할 때, 예를 들어,

<set-property name="gxt.user.agent" value="ie10, ie11, gecko1_9, safari5, chrome"/> 

... 무조건 것을 명시되며, 속성 'gxt.user.agent'는 나열된 값 중 하나를 가질 수있다. 반대로,

<set-property name="user.agent" value="safari"> 
    <any> 
    <when-property-is name="gxt.user.agent" value="safari5" /> 
    <when-property-is name="gxt.user.agent" value="chrome" /> 
    </any> 
</set-property> 

는 "gxt.user.agent"가 "safari5"또는 "크롬"중 하나 일 때 그에서는 user.agent는 "사파리"이 될 수 상태 것이다.순서가 중요해 보이므로 종속성에 대한 규칙 뒤에 선언 된 종속 속성에 대한 규칙을 원할 수 있습니다. 순환 종속성은 컴파일에 실패합니다. 서로 상충하지 않는 한 많은 조건부 규칙을 만들 수 있습니다. 나는 그들이 무슨 일이 일어날 지 아직 모른다. 그러나 마지막 선언이 승리 할 것이라고 나는 생각한다.

조건부 규칙은 여러 가능한 값을 지정할 수도 있습니다. 예를 들어 (그림은, 사용자의 요구와 일치하지 않을 수 있습니다) :

<!-- On desktops we do all browsers including IE --> 
<set-property name="gxt.user.agent" value="safari5, chrome, gecko1_9, ie11"> 
    <when-property-is name="gxt.device" value="desktop" /> 
</set-property> 
<!-- ... but on tablets and phones we exclude IE --> 
<set-property name="gxt.user.agent" value="safari5, chrome, gecko1_9"> 
    <any> 
    <when-property-is name="gxt.device" value="tablet" /> 
    <when-property-is name="gxt.device" value="phone" /> 
    </any> 
</set-property> 

당신은 복잡/복합 기준을 만들 < 어떤 > 및 < 모든 >를 사용할 수 있습니다. 이들은 서로 안에 중첩 될 수 있습니다.

순열을 정확하게 제어하는 ​​데 어떻게 이것을 사용할 수 있습니까? 이를 필요로하지 않을 수도 있지만 다음과 같은 두 가지 속성을 정의하여 시작하는 것이 도움이되었습니다.

<define-property name="custom.use.case" values="case1, case2, ..."/> 
<property-provider name="helix.product.mode"><![CDATA[ 
    var useCase = ...; // JavaScript code to determine the use case 
    return useCase; 
    ]]> 
</property-provider> 
<define-property name="custom.permutation" values="perm1, perm2, ..."/> 

첫 번째 속성은 사용 사례를 정의합니다. 위에서 런타임에이를 판별하는 방법이 있습니다. 너는 그것을 건너 뛰거나 건너 뛸 수는 없다. 또한 유스 케이스를 기반으로 다른 모든 속성을 정의 할 수 있으므로 모든 것을 정의하는 출발점 역할을합니다. 예를 들면 :

<collapse-property name="custom.use.case" values="*" /> 
    <collapse-property name="gxt.device" values="*" /> 
    <collapse-property name="gxt.user.agent" values="*" /> 
    <collapse-property name="user.agent" values="*" /> 
    <collapse-property name="user.agent.os" values="*" /> 

: 우리는 custom.permutation가 순열을 구동하기 원하기 때문에

<!-- Case 1 restrictions --> 
<set-property name="gxt.device" value="desktop"> 
    <when-property-is name="custom.use.case" value="case1" /> 
</set-property> 
<set-property name="gxt.user.agent" value="chrome, safari5, gecko1_9, ie11"> 
    <when-property-is name="custom.use.case" value="case1" /> 
</set-property> 
... 

<!-- Case 2 restrictions --> 
<set-property name="gxt.device" value="tablet, phone"> 
    <when-property-is name="custom.use.case" value="case2" /> 
</set-property> 
<set-property name="gxt.user.agent" value="chrome, safari5, gecko1_9"> 
    <when-property-is name="custom.use.case" value="case2" /> 
</set-property> 
... 

<!-- Case 3 restrictions --> 
<set-property name="gxt.device" value="tablet, phone"> 
    <when-property-is name="custom.use.case" value="case3" /> 
</set-property> 
<set-property name="gxt.user.agent" value="safari5"> 
    <when-property-is name="custom.use.case" value="case3" /> 
</set-property> 
... 

etc. 

그다음은 custom.permutation에 대한 제외 모든 속성 을 축소하는 것입니다 이 접근법은 "순열"과 내부 복잡성을 극히 미세하게 제어 할 수있게 해주 며, 일부는 "순열 (soft permutations)"이라고 부릅니다. 가능한 "custom.permutation"속성 값마다 정확히 하나의 순열이 있습니다. 위의 규칙을 잘 설정하면 각 순열에는 필요한 "순열 (soft permutations)"만 있습니다.

실제 및 유사 순열 비용. 많은 순열 (실제 순열로 그룹 지어 짐)은 그룹화 된 순열의 성능과 런타임 코드 크기를 컴파일하는 데 비용이 듭니다. 특히 많은 특성이있는 경우 이것을 무시하지 마십시오. 실제 순열은 컴파일 및 연결 시간 비용이 더 높습니다 (그러나 많은 순 치환을 그룹화 된 실제 순열로 결합하는 것과 대조적으로 각 순열의 크기를 줄입니다).

GXT를 사용하는 경우 버전 4부터 데스크톱, 태블릿 및 휴대 전화와 같은 값을 갖는 gxt.device 속성이 추가됩니다. 이로 인해 GXT 4로 업그레이드 한 후 편집 시간이 6 ~ 7 배 정도 늘어났습니다. 그 이유는 우리의 순열이 통제를 벗어 났기 때문입니다. 결국 일부는 Mac OS 태블릿에서 실행되는 Internet Explorer 용으로 만들어졌습니다. 존재하지 않는 유스 케이스에 대한 시간 순열 낭비가 무엇인지 알 수 있습니다. 위의 구현을 통해 GWT 컴파일 시간을 원래 시간의 약 절반으로 줄이거 나 GXT 4 업그레이드 직후의 약 10-12 배 빠른 속도로 줄일 수있었습니다.