자산 파이프 라인이란 무엇입니까

목표

  1. 자산 파이프 라인의 4 가지 주요 기능을 이해합니다.
  2. 자산 경로 식별
  3. 자산 매니페스트가 어떻게 연결되는지를 파악합니다.자산 지문을 정의

개요

오랜 시간 동안,우리는 웹 응용 프로그램을 개발하는 군더더기로 자바 스크립트와 씨에스에스를 처리. 우리의 모든 자산 코드(이미지,스타일 시트 및 자바 스크립트)는public라는 대규모 폴더에 보관되었으며 레일 응용 프로그램의 컨텍스트 외부에서 제공되었습니다. 웹이 진화함에 따라,그것은 더 이상 의미가 없었습니다.

자산 파이프라인은 스타일시트,자바스크립트 및 이미지 관리에 대한 레일 응답입니다.

자산 경로

많은 파일이 웹 응용 프로그램을 만드는 데 사용됩니다. 자바스크립트와 자바스크립트 파일만 정리하기 어려울 수 있습니다. 우리는 어떤 폴더를 만들 수 있습니까? 어떤 파일이 어디로 이동합니까? 자산 파이프라인은 이 문제에 대한 답을 제공합니다. 우리는 우리의 응용 프로그램에서 매우 조직 된 것들을 유지해야하지만,각 개념 또는 코드 단위에 대해 별도의 파일과 폴더를 유지함으로써 두 가지 문제가 있습니다.

  1. 레일은 사물이 어디에 있는지 어떻게 알 수 있습니까? 캘린더 파일이app/assets/javascripts/calendar.js또는vendor/javascripts/calendar.js에 있습니까?
  2. 페이지 로드가 매우 느려지므로 각 파일을 별도로 제공하고 싶지 않습니다. 가독성과 구성을 위해 별도의 작은 파일을 유지하는 것이 합리적이지만 브라우저의 경우 모든 작은 파일을 함께 부수고 1 개의 파일과 1 개의 파일을로드하는 것이 좋습니다. 이 프로세스를 연결이라고합니다.

첫 번째 문제에 대해 이야기 해 봅시다. 자산 파이프라인에는 이를 처리하기 위한 자산 경로라는 개념이 있습니다. 폴더 경로의 조합인 경로 환경 변수가 있는 배쉬에서와 마찬가지로 자산 경로는 레일스에서 자산을 찾기 위한 폴더 경로의 조합입니다. 자산 경로를 구성하는 방법에 대한 예를 살펴보겠습니다.

Rails.application.config.assets.paths =>

이러한 폴더에 자산을 넣으면 응용 프로그램에서’/자산’을 통해 액세스 할 수 있습니다. 레일즈를 검색할 추가 폴더가 있는 경우 자산 경로에 폴더를 추가할 수 있습니다. 이 작업은 파일config/initializers/assets.rb에서 수행됩니다.

Rails.application.config.assets.paths << "New Path"

우리는 어디 에나 자산을 배치하고 자산 경로를 구성하고 단일’/자산’을 통해 액세스 할 수 있습니다.

매니페스트 및 연결

이제 어디서나 파일을 넣을 수 있으므로 웹 페이지에 어떻게 포함시킬 수 있습니까? 자산 파이프라인은 매니페스트 파일을 사용하여 레일즈에게 로드할 내용을 알려줍니다. 이 매니페스트 파일은 응용 프로그램에 필요한 모든 파일을 나열 할 수있는 중앙 위치입니다. 이 기능은 자산 파이프라인이 아니라 자산 파이프라인입니다. 다음은 매니페스트 파일의 예제입니다.

파일:앱/애셋/자바 스크립트/응용 프로그램.매니페스트 파일을 레이아웃에javascript_include_tag과 함께 포함하면 자산 파이프라인에서 자산 경로에 나열된 모든 파일을 찾습니다. 우리가 달력을 요구하는 방법을 알 수 있습니다. 이 파일은app/assets/javascripts/calendar.js에 있지만 전체 경로가 아닌 이름 만 지정했습니다. 자산 파이프라인은 제공된 이름을 가진 파일에 대해 구성된 모든 경로를 검색합니다.

이제 발견 가능성 문제를 해결 했으므로 연결에 대해 이야기 해 봅시다. 앞서 설명한 것처럼 브라우저에서 파일을 하나씩 로드하고 싶지 않습니다. 그것은 우리의 브라우저에서 작은 다운로드의 무리보다 하나의 다운로드를 수행하는 것이 좋습니다. 레일에서 구성한 매니페스트 파일은 해당 파일에 나열된 파일을 프로덕션에서 하나의 파일로 자동으로 연결합니다. 이것은 디버깅을 어렵게 만들 수 있기 때문에 응용 프로그램을 개발할 때 가장 좋은 옵션이 아닐 수 있습니다. 그러나 레일은 실제로 개발 모드에서 실행할 때 각 파일을 별도로 제공합니다. 아무것도 할 필요가 없습니다.

마지막으로,자산 매니페스트에 전력을 공급하는 스프로킷 지시문은 나중에 자세히 다룰 것입니다.

전처리

응용 프로그램에서 미리 정의된 위치 집합에서 파일을 결합하여 로드할 수 있다는 것은 자산 파이프라인의 큰 이점입니다. 그것은 시작에 불과합니다. 레일을 통해 자산을 로드하고 있기 때문에 다음과 같은 인기있는 언어를 사용하여 파일을 전처리할 수 있습니다. 당신은 자산 명명 된 테마를 만드는 경우.-네테마를 제공하기 전에 전처리기를 통해 파일을 실행하도록 자산 파이프라인을 말하고 있습니다.브라우저로 이동합니다. 이 파일을 컴파일하는 방법은 다음과 같습니다. 우리가 해야 할 일은 파일에 올바른 파일 확장명인.scss을 제공하는 것뿐이었습니다.

지문

우리가 이야기 할 마지막 이점은 지문이지만,먼저 우리가 해결하는 데 도움이되는 문제에 대해 이야기 해 봅시다. 우리는 브라우저에 파일을 제공 할 때,그들은 미래에 다시 다운로드 피하기 위해 캐시 될 가능성이. 당신이 요청할 수 있습니다 캐싱 무엇입니까?

뭔가를 캐싱하는 것은 입력과 출력이 정확히 동일 할 경우 비용이 많이 드는 작업을 다시 다시 할 필요가 없도록 시간이 많이 걸리는 작업의 복사본을 로컬로 유지하는 것을 의미합니다. 캐시는 일반적으로 값 비싼 작업에 대한 답이며 키가 해당 항목에 고유 한 키 값 저장소입니다. 서버에서 페이지를 요청한 다음 서버에서 동일한 페이지를 다시 요청하면 해당 요청을 수행하는 가장 빠른 방법은 실제로 마지막으로 얻은 내용을 로컬로 복사하는 것입니다. 브라우저는 응답과 함께 전송되는 헤더를 사용하여 요청에 대한 많은 응답을 캐시합니다. 헤더는 페이지가 만료되기 전에 페이지가’신선한’상태로 유지되는 시간을 브라우저에 알려줍니다.’페이지가 만료되면 브라우저는 페이지가 캐시를 새로 고치도록 새 요청을 합니다. 우리는 가장 빠른 요청이 이루어지지 않은 요청이라고 말합니다. 또한 캐시 무효화는 컴퓨터 과학에서 두 가지 어려운 문제 중 하나라고 종종 말하므로 캐싱 작업을 시작할 때 신중하게 생각하십시오! 캐싱은 우리를 위해 대역폭을 절약하고 사용자에 대한 속도 향상을 제공합니다. 파일을 변경하고 모든 사용자가 브라우저 캐시에 저장 한 이전 버전 대신 새 버전을 받기를 원할 때까지 유용합니다. 그러나 우리는 어떻게 브라우저가 우리가 파일을 수정 한 알려합니까? 새 버전의 이름이 이전 버전과 같은 경우 브라우저는 캐시에서 이전 파일을 계속 사용합니다. 브라우저가 이전 파일을 계속 제공하지 않도록 내용이 변경 될 때 파일 이름을 변경하는 방법이 필요합니다.

레일스 가이드 프라이머에서

“지문은 파일의 내용에 따라 파일 이름의 이름을 만드는 기술입니다. 파일 내용이 변경되면 파일 이름도 변경됩니다. 정적 또는 자주 변경되지 않는 콘텐츠의 경우 서로 다른 서버 또는 배포 날짜에서도 두 버전의 파일이 동일한지 여부를 쉽게 알 수 있습니다.

파일 이름이 고유하고 그 내용을 기반으로 하는 경우,웹 헤더는 모든 곳에서 캐시를 사용하도록 설정할 수 있습니다. 콘텐츠가 업데이트되면 지문이 변경됩니다. 이렇게 하면 원격 클라이언트가 콘텐츠의 새 복사본을 요청합니다. 이를 캐시 파열이라고합니다.

스프로킷이 지문에 사용하는 기술은 파일 이름 끝에 내용의 해시를 추가하는 것입니다. 예를 들어global.css라는 이름의 파일을 사용합니다. 스프로킷은 다음과 같이 파일 이름의 끝에 해시908e25f4bf641868d8683022a5b62f54을 추가합니다:

global-908e25f4bf641868d8683022a5b62f54.css

이전 버전의 레일(레일 2)을 사용하는 경우기본 제공 도우미와 연결된 모든 자산에 날짜 기반 쿼리 문자열을 추가하는 데 사용되는 전략입니다. 이 같은 모습:

global.css?1309495796

쿼리 문자열 전략에는 몇 가지 단점이 있습니다:

  • 모든 캐시가 파일 이름이 쿼리 매개 변수에 의해서만 다른 콘텐츠를 안정적으로 캐시하는 것은 아닙니다.
    • 스티브 사우 더스는”캐시 가능한 리소스에 대한 쿼리 문자열을 피하는 것이 좋습니다.”귀하의 요청의 5-20%는 캐시되지 않습니다. 특히 쿼리 문자열은 캐시 무효화를 위해 일부 하드디스크에서는 전혀 작동하지 않습니다.
  • 파일 이름은 다중 서버 환경에서 노드 간에 변경될 수 있습니다.
    • 레일스 2 의 기본 쿼리 문자열입니다.엑스 파일의 수정 시간을 기준으로합니다. 자산이 클러스터에 배포될 때 타임스탬프가 동일하다는 보장은 없으므로 요청을 처리하는 서버에 따라 다른 값이 사용됩니다.
  • 캐시 무효화가 너무 많습니다.
    • 정적 자산이 코드의 각 새 릴리스와 함께 배포되면 모든 파일의 시간(마지막 수정 시간)이 변경되어 해당 자산의 내용이 변경되지 않은 경우에도 모든 원격 클라이언트가 다시 가져 오도록 강제합니다.

지문은 파일 이름이 내용에 따라 일관성이 있는지 확인하여 이러한 모든 문제를 해결합니다.

지문은 프로덕션에서는 기본적으로 활성화되고 다른 모든 환경에서는 비활성화됩니다. 5758>옵션을 통해 구성에서 활성화 또는 비활성화할 수 있습니다.”

결론

자산 파이프라인은 공용 폴더에서 자산을 제공하는 것이 더 복잡하며 디버깅하기가 어려울 수 있습니다. 그것을 사용하는 방법을 배우는 것은 우리에게 시간과 두통을 저장하여 장기적으로 돈을 지불 할 것이다. 그것이 우리를 위해 해결하는 모든 문제에 대해 생각해보십시오.

  1. 자산 경로
  2. 매니페스트 및 연결
  3. 전처리
  4. 지문

마지막으로,자산 파이프라인을 소개하는 기조를 확실히 확인하십시오.