2010-02-03 6 views
2

JS 및 CSS 모두에 대해 :cache => true 옵션을 지원하는 레일 응용 프로그램에 JS 라이브러리를 포함시키는 가장 좋은 방법을 생각하고 있습니다.with 큰 JS 라이브러리 포함 : cache => true to rails app

jQueryUI (예일뿐입니다)라는 질문을 예로 들어 보겠습니다. 다운로드 할 때 그것은 일반적으로 다음과 같은 구조를 가지고 :

+jq.ui 
    +css 
     +skin1 
     +images 
      all_the_images.png 
     jq-ui.css 
     +skin2 
     +images 
      all_the_images.png 
     jq-ui.css 
    +js 
     jquery.js 
     jq.ui.js 

이제 그것을 사용하기 위해 I 앱 (2 개 JS 파일 + 1-2 CSS)를 레일에이 구조를 포함해야합니다. :cache => true 옵션을 사용할 수 있어야합니다 (jquery, jquery ui, application.js 등이 모두 하나의 파일에 포함될 수 있도록해야하며 jq.ui/skin2/jq-ui.css 및 application.css도 포함될 수 있음). 하나의 파일도).

:cache => true의 문제점은 stylesheets/jq.ui.css/skin2/jq-ui.css 대신 stylesheets 경로로 이동할 때 단일 (결합 된) CSS 파일이 올바른 이미지를 참조하지 않는다는 것입니다. 따라서 CSS의 이미지 링크가 깨졌습니다.

질문은 다음과 같습니다.
여기서 라이브러리는 레일 앱에 있어야하나요? 나는 기본 레일 규칙에 구조를 개편 해야 (그리고 따라서 수동으로 이미지 참조를 해결하기 위해 JQuery와 UI를 CSS를를 수정)은 그대로 또는 사용 모든 파일을 다른 방법으로을 결합?

감사합니다.
Dmitriy.

답변

1

jquery UI 스킨의 디렉토리 구조를 유지하고 싶다면이 CSS 파일을 1 파일에 캐시하지 말아야합니다. 그들은 하나의 파일로 결합되지 않은 경우에도,

stylesheet_link_tag "css-file1", "css-file2", :cache => "main" 

난 그냥 그 캐시 및 JQuery와 UI에 포장 된 스킨을 유지하는 것입니다 : 당신이 JQuery와 UI의 외부 2 개 다른 CSS 파일을 가지고 말. 피부 또는 피부 이미지가 업데이트 된 경우 디렉토리를 재구성하거나 css/js 파일을 수정하는 대신 해당 파일을 업데이트하고 바꾸어서 업데이트 할 수 있기를 원하기 때문에 아마이 작업을 수행 할 것입니다. 오류가 발생하기 쉽고 2 개의 추가 HTTP 요청을 저장할 필요가 없습니다.

1

왜 조합해야하는지 구체적인 이유가 있습니까? 귀하의 웹 서버에 대한 더 많은 요청을 의미하는 것으로 알고 있지만 결과는 캐시됩니다. the google CDN에서 제공되는 jquery 버전을 사용하는 것도 좋습니다.

또는 하나의 파일로 결합해야한다면 디렉토리 구조를 병합하거나 절대 경로를 사용하여 리소스를 배치하는 것이 좋습니다. 이 문제는 라이브러리 편집과 관련하여 타사 라이브러리의 새 버전으로 업데이트 할 때주의해야합니다.

나는 (:cache => true 대신) 내 JS 종속성을 관리하기 위해 개인적으로 sprokets을 사용하지만,이 사용 사례로는 도움이되지 않습니다. 그렇다고해도 자바 스크립트를 많이 사용하게 될지 고려해야합니다.

+0

'왜 조합해야하는지 구체적인 이유가 있을까요? '글쎄, 실제로는 단지 예일뿐입니다. 그런 경우에 어떻게 대처할 수 있는지 알고 싶습니다. –