3.4.0에 대한 YUI와 로더 변경 사항

년 | 6시 34분에 2011년 7월 1일는 DAV 유리로 오전 개발 , 성능 | 4 개의 댓글

3.4.0 우리는 단지 더 performant을하지 않으려면 주위 로더의 논리 중 일부를 이동하는 과정을 시작하지만 더 강력하고 (서버 같은) 다른 장소에서 쉽게 이용할 수있게 할 수 있습니다. 우리는 향후 버전에 더 많은 변화를 압연 것입니다,하지만 좀 더 시간을 갖고 그것이 변경 이유, 변경는지 설명 해 드리고 싶었을 어떻게 그것이 개발자에 영향을 수 있습니다. 사용 - 가지 경우 대부분의 경우, 개발자는 것들이 좀 더 빠르고, 그들의 요구 사항 다운로드는 좀 작은 것을 제외하고는 다른 아무것도 통지하지 않습니다.

시드 파일

제가 주소를 원하는 첫번째 것은 YUI 시드 파일입니다. YUI의 이전 버전에서는, 우리의 시드 파일은 매우 작은했고 로더 또는 메타 데이터를 포함하지 않았다. 우리는 90 %를 사용 - 케이스에 우리가 기대했던만큼 performant되지 않았음을 발견했습니다. 일반 사용자가 씨앗 파일이 다음 차례의 씨앗이 처음 로더를 가져올 수 있어야함을 의미합니다 자신의 모듈을 요청 포함, 다음의 종속성을 모두 계산하고 그들을 모두 가져옵니다. 우리는 지금이 추가 HTTP 요청을 할 수있는 잘못된 일이라고 생각, 새로운 표준 씨앗 파일 로더 및 메타 데이터를 포함하므로. 네, 조금 더 큰 초기 요청을하게되지만, 그것은 모듈의 로딩을 것입니다 자사의 메타 데이터 요구 사항의 모든 이미 페이지에 지금 있기 때문에 더 빨리.

당신이 그것에게 옛날 방식을 사용하려는 경우, 당신은 단지 대신 YUI - 기본 시드 파일을 포함할 수 있습니다. 그것은 YUI가 독립 실행형 모드로 실행하기 위해 필요한 플러스가 수요에 로더를 가져올 수있는 능력을 포함합니다 모든이 포함되어 있습니다. 여러분도 세밀으로 분류된 의존성이 필요한 경우, 우리는 오래된 YUI - 기본 씨앗이 있었는지 정확하게 YUI 코어 시드 파일을 만들었습니다.

     / 구축 / YUI / YUI - min.js / / YUI 시드 + 로더
     로더와 함께 / 구축 / YUI베이스 / YUI -베이스 min.js / / 올드 YUI 시드 지원을 가져올 수
     로더없이 / 건설 / Y​​UI 코어 / YUI - 코어 min.js YUI베이스 / / 올드 지원을 페치

그것은이 URL은 이전 URL이 아닌 다른 것을인지해야합니다. 사용하던 사람은 yui/yui-base.js 파일에게 repoint 필요 yui-core/yui-core.js . 당신이 씨앗을 로딩하고 로더 가져오기의 이전 방법을 원한다면, 당신은 사용할 yui-base/yui-base.js 씨앗 파일을.

이러한 변화에 대한 또 다른 이유는 YUI가 가능한 많은 장소로 실행하기위한 우리의 로드맵입니다. 귀하의 응용 프로그램에서 사용할 수있는 콤보 서버가있는 경우 하나의 콤보 서버 요청에 오래된 씨앗 파일 플러스 로더는 잘하고 좋습니다.하지만 서버에 대한? 또는 모바일 장치에서 오프라인 응용 프로그램에서?이 장소는 아직 그들이 필요한 정보를 가져오는 동안 파일 액세스를 최소화해야합니다.

롤업

우리가 변경되는 그 다음은 시스템에서 롤업을 제거하지 않고 로더 설정에서 false로 allowRollup을 defaulting. 이것은 당신에게 무엇을 의미합니까거야? 전혀 글쎄, 아마도 아무것도. 나는 변화의 영향을 설명하기 전에, 내가 그 뒤에 이유를 설명해 드리죠. 주요 이유는 페이 배달과 함께, 다시 공연됩니다. 이 예제를보세요 :

      모듈이 : 이벤트, 이벤트 - B가 필요합니다
      모듈 B는 : 이벤트 C, 이벤트 D 필요

둘 다을 요청하면 롤업 로직 전에 3.4.0로이 이벤트 롤업을해야한다는 결정하는 데 사용. 어떤 사실이 점점 것을 의미 :

      event.a, event.b, event.c, event.d, event.e, event.f, event.g, event.h

당신이 실제로 필요 이상의 페이지에 대한 자세한으로 돌아가셨습니다. 롤업 지원을 해제하면, YUI 이제 실제로 요청 및 아무것도 더 많은 것만을 묻는 메시지가 표시됩니다. 대부분의 경우에, 당신은 이것을 통지하지 않습니다. 모듈 개발자는, 과거에 일한 것들이 지금은 작동하지 않을 수 있습니다 상황에 실행할 수 있습니다. 그 이유는 그들이 실제로 전에 사고로 작동한다는 것입니다. 전화 : 나를 실제 예제를 사용합시다.

3.3.0에서 다이얼이 필요합니다 :

     필요 : [
         '위젯'
         'DD - 드래그'
         '대체'
         '이벤트 mouseenter' 
         '전환'
         '국제 공항'
     ]

대부분의 전화는 3.4.0에서 근무하지만 키보드 지원이 작동하지 않았다. 간단한 조사를하고 나면, 그것은 롤업 지원이 실제로 전체 이벤트 롤업을 (이벤트 - 이동 및 이벤트 키 포함) 요청 것을 밝혀졌다. 이벤트의 모든 것 같아서요 롤업 로직없이 3.4.0 전화는 더 이상의 요구 사항을 모두 없었다. 전화의 요구는보다 구체적인 제작과 실제 종속성을 모두 정의하는 것은 제대로 그것이 예상대로 작동합니다.

     필요 : [
         '위젯'
         'DD - 드래그'
         '대체'
         '이벤트 mouseenter'
         '이벤트 이동'
         '이벤트 키'
         '전환'
         '국제 공항'
     ]

모듈 개발자를위한, 당신 모듈이 작동하는 데 필요한 정확해야합니다 있는지 확인하는 가장 좋은 방법입니다. 업스트림 모듈 요구 사항이있다는 것을 가정하지 마십시오. 그것은 당신이 뭘 필요로 요청 있는지 확인하는 것이 좋습니다.

이것은 모듈 요구 사항이 더 잘 정의된 것을 의미합니다. 예를 들어, datatype-date 당신이 좋아하는 국제 공항에 액세스하는 것이 이전 버전에서는 내장되어 국제 지원이 있습니다 :

     Y.Intl.getAvailableLangs ( '데이터 형식 - 날짜');

이 모듈이 실제로 언어 (없기 때문에 그러나 datatype-date-format 모듈 않습니다)를이 실패합니다. 그것은 올바른 모듈 언어에 대한 요청 실제로는 더 구체적이고해야합니다 :

     Y.Intl.getAvailableLangs ( '데이터 형식 - 날짜 형식');

파일 폭발과 Submodule 제거를 구축

이 변경을 마쳤으면, 우리가 만든 다음 변경 사항은 핵심 시스템에서 빌드 디렉토리 및 제거 submodules을 폭발했다. Submodule 논리는 우리의 메타 데이터 구조가 변경되었습니다, 제거되지 않았습니다. 이것은 현재 설치에 대한 이전 버전과의 호환성을 제공합니다.

핵심 시스템에 Submodules 우리가 해결하기 위해 필요한 문제 몇 발생했습니다. 첫 번째 이유는 성능을했다. 의존성을 계산하는 데 필요한 때마다 로더는, 그것은 각 모듈의 submodule / 플러그인 구조를 산책했습니다. 이렇게 시대의 수천 일상을 계산 로더 동안 우리의 성능을 아프게했다. 핵심 시스템에 submodules에 대한 지원을 제거하여 우리는 함수 호출과 반복 수만명의 저장됩니다.

로더는 경우 있도록 변경되었습니다 use 모듈의 메타 데이터의 속성이 더 많은 모듈을 정의, 그것은 원래 모듈을로드하는 대신에 이러한 모듈을 사용합니다. 그래서, 당신은 "요청한 ​​경우 dd "로더"를 검사 것이 dd "의 메타 데이터를이 정도 사용하는 속성을 참조하십시오

     "DD - ddm베이스, DD - ddm, DD - ddm 드롭, DD - 드래그, DD - 프록시, DD는 - 제한, DD - 드롭, DD - 스크롤, DD - 드롭 플러그인"

핵심 YUI 시드 파일에서, 우리는 우리가 가상 롤업 또는 별칭을 호출하는 무엇을 포함하고 있습니다. 이러한 모듈 정의 정확히 로더에서 메타 데이터와 동일합니다. 이 방법 당신은 Configurator의 종속성에서 내보낸 모든 파일을 포함하고 여전히 페이지에 로더 선물 않고이 롤업을 사용할 수 있습니다. 향후 릴리즈에서는, 우리는 더욱이 접근법을 수정합니다.

이 변경을 마쳤으면, 우리는 우리의 빌드 파일을 폭발 앞에. 이전 릴리스에서는 submodules은 모듈 파일의 경로를 결정. 예를 들면 다음과 같습니다

     "DD": {
         "submodules": {
             "DD - 드래그" 
             / / 모듈 데이터
         }
     }

3.3.0에서는이 "DD"를 건설하면, 파일 구조는 다음과 같이 무언가를 보았다 :

     / 구축 / DD / DD - drag.js
     / 구축 / DD / DD - ddm.js
     / 구축 / DD / DD - drop.js

3.4.0에서 폭발이 빌드 시스템으로, "DD"의는 다음과 같이 이제 파일을 빌드 :

     / 구축 / DD - 드래그 / DD - drag.js
     / 구축 / DD - ddm / DD - ddm.js
     / 구축 / DD - 드롭 / DD - drop.js

이것은 파일 크기를 저장하고 모듈의 URL 경로를 조립하는 데 필요한 논리를 줄일뿐만 아니라 우리의 모듈 메타 데이터의에서 "경로"속성을 제거할 수있었습니다.

이 사전 구성된 콤보 URL을 포함하는 경우, 당신은 다시 계산 URL을 업그레이 드해야합니다.

이러한 변화에 단점은 당신이 "준비"페이지에 모듈의 콤보 URL을 포함하는 경우 방금 버전 번호를 변경하고 업그레이드할 수있다는 것입니다. 당신은 종속성이 Configurator 되짚어 및 새로운 모듈 구조를 사용하여 새 URL을 생성해야합니다.

미래

내가 refactor을 보완하고 우리 로더와 시드 전략의 모든 부분을 극대화하기 위해 계속됩니다. 이 첫 단계는뿐만 아니라 우리의 클라이언트 측 전략뿐만 아니라 우리 서버 명령줄 및 모바일 디바이스 전략하여야 할 미래의 변화에​​ 도움이 필요했습니다.

공유하고 확장 : del.icio.us와 스크랩 | 디그 그것! | 레딧!

4 개의 댓글 »

이 게시물에 덧글에 대한 RSS 피드. 트랙백 URI

  1. 나는 정말이 구절을하지 마십시오

    "로더는 모듈의 메타 데이터에서 사용하는 속성보다 모듈을 정의한 경우, 원래 모듈을로드하는 대신에 이러한 모듈을 사용할 수 있도록 변경되었습니다. 그래서, 당신은 "DD"로더를 요청하는 경우 "DD"의 메타 데이터를 검사하고이 정도 사용하는 속성을 볼 수있을 것입니다 :

    "DD - ddm베이스, DD - ddm, DD - ddm 드롭, DD - 드래그, DD - 프록시, DD는 - 제한, DD - 드롭, DD - 스크롤, DD - 드롭 플러그인"
    "
    당신은 현재 버전에서 무슨 일이 일어 나는지 대비하여이 이야기를 설명할 수 있나요?

    THX
    / 파올로

    에 의해 코멘트 파올로 Nesti - 2011년 7월 4일 #

  2. @ 파올로

    이전 3.4.0 PR2에 버전에서, 우리는 정적 롤업 파일을 만들었습니다. 그래서 DD의 경우,라는 파일이있었습니다 :

    / 구축 / DD / dd.js

    그리고 DD 관련 모듈을 모두 포함.

    에 의해 코멘트 DAV 유리 - 2011년 7월 4일 #

  3. 너희가 이런 짓을하는 기쁩니다. 난 항상 전염병처럼 롤 업을 피했다. 그러나, 기본 클래스의 일부 이래 지금 제거하는 것, 노드베이스 예 : 노드 코어되고, 이것이 방법으로 중지되고 모든 클래스의 목록을 얻을 수있는 좋은 일이 될 것입니다.

    에 의해 코멘트 마르크 - 2011년 7월 5일 #

  4. @ 마크

    3.4.0이 출시되면, 변경된 모듈 주위 설명서를 충분히있을 것입니다.

    에 의해 코멘트 DAV 유리 - 2011년 7월 5일 #

코멘트를 남겨

참고 : 설명은 첫번째 타이머를 위해 검토하고 있습니다. 스팸이 삭제되었습니다.

XHTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> 다운로드 <blockquote cite=""> <cite> <code> <del datetime=""> <em> 사용 <I> <q cite=""> <strike> <STRONG>

야후! 주최

저작권 © 2006년부터 2011년까지 야후 주식 회사 판권 소유. 개인 정보 보호 정책 - 서비스 약관

에서 제공하는 워드 프레스 에서 야후! 웹 호스팅 .