2013-01-08 2 views
4

Squishit이 프로덕션 모드에서 번들을 재구성하는 원인을 알려줄 수 있습니까?Squishit에서 번들을 다시 생성하는 이유

예를 들어 다음 번들을 만들면 'Site.Master_ {GUID} .css'파일이 예상대로 만들어집니다.

<%= Bundle.Css() 
    .Add("~/css/reset.css") 
    .Add("~/css/typography.css") 
    .Add("~/css/styles.css") 
    .Add("~/MasterPages/Site.Master.css") 
    .Render("~/Cache/Site.Master_#.css") 
%> 

그러나 파일 묶음 파일을 삭제하면 다시 생성되지 않습니다. 나는, 시행 착오를 발견 한 것을 나는 거짓

<compilation debug="false" targetFramework="4.0" /> 

에 페이지가 다음 요청 번들이 다시 다음 번 다시 다음

<compilation debug="true" targetFramework="4.0" /> 

과의 web.config 파일을 변경하는 경우 하지만 내가 알고 싶습니다 :

A) Squishit이를 다시 재설정의 인식 방법이 있는지 특정 번들) 내장 또는

나 다시 작성해야하는지 여부를 Squishit가 결정하는 방법 번들 - 예를 들어 캐시 정리 또는 사이트 업데이트 후에.

감사합니다.

답변

7

SquishIt은 특정 번들을 빌드하거나 다시 빌드해야하는지 여부를 실제로 결정하지 않습니다. 번들이 SquishIt의 캐시에 있으면 파일이 아직 있다고 가정합니다. 이는 번들 캐시에 액세스 할 때마다 파일 시스템을 확인하는 데 매우 많은 비용이 들기 때문에 의도적으로 설계된 것입니다.

번들은 HttpRuntime.Cache에 캐시되므로 관련 항목을 캐시에서 지워 강제로 재구성 할 수 있습니다. "squishit_"라는 접두사가 추가 된 모든 항목에 사용되며 그 후에 "css"또는 "js"를 사용하여 자산 유형을 묘사 할 수 있습니다. 캐시를 지우는 것은 사이트 재설정 (web.config 변경이 시작됨)을 포함하여 번들이 재구성되어야합니다. 런타임시 제어 할 백도어 방식이 필요하다면 this 같은 것을 사용자의 필요에 맞게 수정할 수 있습니다.

번들을 다시 작성하게 만드는 또 다른 사항은 내용에 포함 된 파일 중 하나에 대한 변경입니다. 이것은 번들이 처음에 캐시에 추가 될 때 CacheDependency를 통해 제어됩니다.

+0

감사합니다. 알기 쉽고 자세한 답변을 제공해 주셔서 감사합니다. 대단히 감사합니다. 나는 HttpRuntime.Cache와 Squishit 사이의 연결을 이해하지 못했습니다. 서버/웹 사이트를 반복적으로 다시 시작하면 캐시 된 번들 파일의 수가 단순히 커지고 늘어날 것이라고 생각하는 것이 맞습니까? – Neilski

+0

정확하지 않습니다. 파일 이름에 포함시키는 "Guid"는 실제로 번들 내용의 해시입니다. 번들 내용 (따라서 해시)이 변경 될 때마다 새 파일을 쓸 것이므로 주기적으로 정리하는 것이 좋습니다. 또는 번들을 Site.Master.css로 렌더링 할 수 있습니다.이 방법은 서버에 하나의 파일 만 저장하고 쿼리 문자열에 해시를 렌더링하여 브라우저 캐시 무효화가 그렇게 처리되도록합니다. – AlexCuse

+0

Alex에게 다시 한번 감사드립니다. 매우 유용합니다. – Neilski

관련 문제