2017-01-11 6 views
0

개발자가 우리 모두에게이 문제가 발생했습니다. 웹 사이트에서 유지 관리를 수행해야하며 클라이언트 스크립트가 있습니다. foo.js 이제 foo.js을 변경하고 테스트하고 체크인하고 테스트 환경에 새로운 코드가 추가되었습니다. 테스트 사용자는 브라우저에 이전 foo.js이 여전히 캐시에 저장되어 있기 때문에 문제를 해결하지 못했다고 주장합니다.브라우저 자바 스크립트 캐싱 문제를 방지하는 모범 사례

파일 내용의 해시를 만들고 파일 이름에 사용하려고합니다. foo_8c736521.js 해시 -> 파일 이름 바꾸기 -> BundleConfig.cs 업데이트를 만들 수 있습니다. 하지만 Visual Studio 내에서 자동으로이 작업을 수행하려고합니다.

C# .NET에서 나를 위해 이것을 처리하는 라이브러리가 있습니까?

내 web.Test.config 파일이 변환을 추가했습니다 :

<system.web> 
     <compilation debug="false" targetFramework="4.5" xdt:Transform="Replace" /> 
    </system.web> 

이제 번들 최적화는이 환경에서 사용할 수 있습니다. 그리고 그것은 작동합니다.

+1

foo.js를 참조 V = 즉, 항상를 얻기 위해 브라우저를 강제 @aabilio – aabilio

+0

? 캐시 메커니즘을 효과적으로 비활성화합니다. 실제 파일 내용이 변경된 경우에만 캐시를 비활성화하고 싶습니다. –

+0

아, 나는 그 질문을 이해하지 못했다. 따라서 서버를 제어 할 경우 Etag 및/또는 Last-Modified HTTP 헤더를 사용합니다. – aabilio

답변

2

ASP.NET 버전 4.5 이상을 사용하는 경우 기본 제공 JS Bundler를 사용하십시오. 번들에 포함 된 JS 파일의 변경 사항을 추적하고 파일이 변경된 경우에만 새 해시를 실행합니다.

MVC를 들어
public class BundleConfig { 
    public static void RegisterBundles(BundleCollection bundles) { 
     bundles.Add(new ScriptBundle("~/bundles/custom").Include(
      "~/Scripts/foo.js", 
      "~/Scripts/bar.js" 
     )); 
    } 
} 

- Global.asax에에 번들 등록 :

protected void Application_Start() { 
    // ... 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 

ASP.NET - Bundling and Minification

+0

이것은 프로젝트에서 이미 구현되었습니다. 번들 최적화를 사용하려면 web.config 테스트 환경에서 debug = "false"옵션을 설정하기 만하면됩니다. –

+0

'debug = "true"'는 개발 환경에서 스크립트를 디버그하기 쉽도록 번들 및 축소를 사용하지 못하게 할 수 있습니다. –