아무도 MVC 3에서 gzip 압축을 활성화하는 방법을 알고 있습니까? IIS7을 사용하고 있습니다.
Google 크롬 감사 결과 :
- gzip 압축 활성화 (4)
- 다음 리소스를 gzip으로 압축하면 전송 크기를 약 2/3 (~ 92.23KB) 줄일 수 있습니다.
- / mydomain /은 ~ 1.53KB를 절약 할 수 있습니다.
- jquery-1.4.4.min.js는 ~ 51.35KB를 절약 할 수 있습니다.
- Cufon.js는 ~ 11.89KB를 절약 할 수 있습니다.
- Futura.js는 ~ 27.46KB를 절약 할 수 있습니다.
답변
web.config
다음과 같이 파일을 통해 압축을 구성 할 수 있습니다 .
<system.webServer>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
이 구성 요소에 대한 설명서는 iis.net/ConfigReference 에서 찾을 수 있습니다 . 이것은 다음과 동일합니다.
- 인터넷 정보 서비스 (IIS 관리자) 열기
- 수정하려는 가상 디렉터리에 도달 할 때까지 왼쪽의 트리보기를 탐색합니다.
- 오른쪽 창의 제목이 해당 가상 디렉터리의 이름이되도록 적절한 가상 디렉터리를 선택합니다.
- 오른쪽 창의 “IIS”에서 “압축”선택
- 두 옵션을 모두 선택하고 맨 오른쪽의 “작업”에서 “적용”을 선택합니다.
참고 : (주석에서 지적했듯이) Http Dynamic Compression이 설치되어 있는지 확인해야합니다. 그렇지 않으면 설정 doDynamicCompression="true"
이 적용되지 않습니다. 이를 수행하는 가장 빠른 방법은 다음과 같습니다.
- 시작> 입력
optionalfeatures
( “Windows 기능 켜기 또는 끄기”창으로 이동하는 가장 빠른 방법) - “Windows 기능”트리보기에서 인터넷 정보 서비스> World Wide Web 서비스> 성능 기능으로 이동합니다.
- “동적 콘텐츠 압축”이 선택되어 있는지 확인합니다.
- “확인”을 클릭하고 Windows가 구성 요소를 설치하는 동안 기다립니다.
답변
그렇게한다면 코드에서 할 수 있습니다. 모든 컨트롤이 상속되는 basecontroller를 만들고 아래의이 속성으로 장식합니다.
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted)) return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
var response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
}
}