Tailor는 스트림을 사용하여 Fragment Services에서 웹 페이지를 작성하는 레이아웃 서비스입니다. O'Reilly는이 블로그 게시물의 제목에서 "Node.js 서버에 통합 할 수있는 미들웨어를 제공하는 라이브러리"라고 설명합니다. 그것은 Facebook의 Bigpipe에서 부분적으로 영감을 받았지만 전자 상거래 상황에서 개발되었습니다.
재단사의 기능 및 혜택 중 일부 :
Tailor는 Project Mosaic의 일부로 개발자가 프론트 엔드 용 마이크로 서비스를 만드는 데 도움이됩니다. 모자이크에는 또한 경로 (여관 주)를 저장하는 관련 편안한 API가있는 서비스 구성을위한 확장 가능한 HTTP 라우터 (선장)가 포함됩니다. 더 많은 구성 요소가 공개 릴리스 파이프 라인에 있습니다. 프론트 엔드 팀이 모노리스-마이크로 서비스를 전환하는 경우 재단사와 이용 가능한 형제 자매가 유리할 수 있습니다.
마이크로 서비스는 요즘 많은 견인력을 얻습니다. 그들은 여러 팀이 서로 독립적으로 일할 수있게하고, 자신의 기술 스택을 선택하고, 자신의 릴리스주기를 설정합니다. 불행히도, 프론트 엔드 개발은 아직 마이크로 서비스가 제공하는 이점에 대해 아직 자본화되지 않았습니다. 웹 사이트 구축의 일반적인 관행은 "Monolith"로 남아 있습니다. 여러 API를 소비하는 단일 프론트 엔드 코드베이스입니다.
프론트 엔드에 마이크로 서비스를 가질 수 있다면 어떨까요? 이를 통해 프론트 엔드 개발자는 동일한 기능에서 백엔드 상대와 함께 협력하고 웹 사이트의 부분 (예 : 헤더, 제품 및 바닥 글과 같은“조각”부분을 독립적으로 배포 할 수 있습니다. 마이크로 서비스를 프론트 엔드로 가져 오려면 웹 사이트를 조각 밖으로 구성하는 레이아웃 서비스가 필요합니다. 이 요구를 해결하기 위해 재단사가 개발되었습니다.
재단사 사용을 시작하십시오.
yarn add node-tailor const http = require ( 'http' ) ;
const Tailor = require ( 'node-tailor' ) ;
const tailor = new Tailor ( { /* Options */ } ) ;
const server = http . createServer ( tailor . requestHandler ) ;
server . listen ( process . env . PORT || 8080 ) ; fetchContext(request) - 컨텍스트의 약속을 반환하는 함수, 이는 페이지의 조각 ID를 조각화 URL에 맵핑하여 페이지의 단편의 URL을 무시하고 Promise.resolve({})fetchTemplate(request, parseTemplate) - 템플릿을 가져와 parseTemplate 호출하고 결과의 약속을 반환 해야하는 함수. S3에서 템플릿을 검색하고 캐시하는 자신만의 방법을 구현하는 데 유용합니다. 기본 구현 lib/fetch-template.js 파일 시스템에서 템플릿을 가져옵니다.templatesPath 이 로컬로 저장되는 경로를 지정하려면 /templates/fragmentTag 조각화 태그의 이름, 기본값으로 fragmenthandledTags 사용자 정의 태그 배열, 자세한 정보는 tests/handle-tag 확인handleTag(request, tag, options, context) - 태그 또는 닫는 태그를 수신하여 문자열로 직렬화하거나 스트림을 반환합니다.filterRequestHeaders(attributes, request) - Fragment Request로 전달되는 요청 헤더를 필터링하는 기능, lib/filter-headers 에서 기본 구현을 확인하십시오.filterResponseHeaders(attributes, headers) - 주어진 응답 헤더를 기본 조각 요청에서 최종 응답으로 매핑하는 함수maxAssetLinks CSS 및 JS에 대한 Link 헤더 지시문 수 1 대한 링크 헤더 디렉토리 수requestFragment(filterHeaders)(url, attributes, request) - FRAGMENT 서버에 요청을 반환하는 함수, lib/request-fragment 의 기본 구현을 확인하십시오.amdLoaderUrl -AMD 로더에서 URL. 우리는 cdnjs의 요구 사항을 기본값으로 사용합니다pipeInstanceName 프론트 엔드 후크 소비를 위해 브라우저 창에서 사용할 수있는 파이프 인스턴스 이름.pipeAttributes(attributes) - 프론트 엔드 후크에서 사용 가능한 최소 단편 속성 세트를 반환하는 함수.tracer - 오프 엔트레이션 호환 트레이서 구현. Tailor는 Parse5를 사용하여 템플릿을 구문 분석하여 각 fragmentTag Fragment Server의 스트림으로 대체하고 handledTags handleTag 기능의 결과로 대체합니다.
< html >
< head >
< script type =" fragment " src =" http://assets.domain.com " > </ script >
</ head >
< body >
< fragment src =" http://header.domain.com " > </ fragment >
< fragment src =" http://content.domain.com " primary > </ fragment >
< fragment src =" http://footer.domain.com " async > </ fragment >
</ body >
</ html >id 선택적 고유 식별자 (자가 생성)src 조각의 URLprimary - 페이지의 응답 코드를 설정하는 조각을 나타냅니다.timeout - 밀리 초 단위의 단편의 선택적 시간 초과 (기본값은 3000)async - 신체 태그가 끝날 때까지 조각을 연기public - 재단사가 필터링 된 요청 헤더를 업스트림에서 조각으로 전달하는 것을 방지합니다.fallback-src 현재 조각에서의 시간 초과/오류의 경우 폴백 조각의 URL다른 속성은 허용되며 관련 함수 (예 :
filterRequestHeaders,filterResponseHeaders등)에도 전달됩니다.
조각은 페이지의 일부만 렌더링하고 CSS 및 JavaScript 리소스에 URL을 제공하도록 Link 헤더를 설정하는 HTTP 서버입니다. 초안 구현에 대한 examples/basic-css-and-js/index.js 확인하십시오.
조각의 JavaScript는 AMD 모듈이며,이 함수를 내보내는 init 모듈이며, 이는 인수로서 조각의 DOM 요소로 호출됩니다.
파편 응답에 '위치'헤더가 포함되어 있더라도 재단사는 리디렉션을 따르지 않습니다. 속성 primary 있는 조각은 페이지의 상태 코드를 제어하므로 리디렉션을 수행 할 수 있습니다.
참고 : AWS와의 호환성을 위해 Link 헤더를 x-amz-meta-link 로 전달할 수도 있습니다.
기본적으로 들어오는 요청은 템플릿을 선택하는 데 사용됩니다.
따라서 index.html 템플릿을 얻으려면 /index 으로 이동합니다.
/product/my-product-123 을 들으려면 product.html 템플릿으로 이동하려면 req.url 을 /product 으로 변경할 수 있습니다.
모든 헤더는 정보가 누출되지 않도록 기본적으로 필터링되지만, 원래 URI와 호스트를 헤더, x-request-host 및 x-request-uri 에 추가하여 프래그먼트를 읽고 가져 오는 제품을 알아 내고 표시 할 수 있습니다.
http
. createServer ( ( req , res ) => {
req . headers [ 'x-request-uri' ] = req . url
req . url = '/index'
tailor . requestHandler ( req , res ) ;
} )
. listen ( 8080 , function ( ) {
console . log ( 'Tailor server listening on port 8080' ) ;
} ) ;재단사의 일부 개념은 특정 문서에 대해 자세히 설명합니다.
테일러는 상자에서 OPENTRACING을 사용하여 배포 된 추적 계측기를 가지고 있습니다. Ingress HTTP 요청의 모든 범위 컨텍스트를 선택하여 기존 원격 프로 시저 호출 (RPC)으로 전파합니다.
현재 파편의 가져 오기 만 인디언트가 있는데, 이는 조각 태그, 속성 및 오류에 대한 스택 추적과 같은 로깅 페이로드와 같은 추가 세부 사항을 제공합니다.
# Get a copy of the repository
git clone https://github.com/zalando/tailor.git
# Change to the folder
cd tailor
# Install dependencies
yarnnode examples/basicnode examples/basic-css-and-jsnode examples/multiple-fragments-with-custom-amdnode examples/fragment-performance특정 예제를 실행 한 후 http : // localhost : 8080/index로 이동하십시오.
참고 : 노드 버전> 6.0.0으로 예제를 실행하십시오.
단일 페이지 응용 프로그램 예제도 사용할 수 있습니다.
벤치 마크를 실행하기 시작하려면 npm run benchmark 실행하고 몇 초를 기다려 결과를 확인하십시오.
기고 가이드 라인을 확인하십시오.