2013-10-23 3 views
15

나는 데이터베이스를 쿼리하기 위해 많은 ajax 호출을 사용하고 있으며 큰 텍스트 (json) 응답을 받는다. 나는 응답을 압축하고 싶다.JSON 응답을 압축하는 방법

JavaScript implementation of Gzip에 자바 스크립트를 사용하여 텍스트를 압축하는 좋은 방법이 있습니다.

문제는 내 aspx 서버에서 응답을 압축하고 javascript로 감추고 싶습니다. 따라서 내 asp.net 서버에서 lzw_encode 함수를 실행해야합니다. 이 함수를 C#으로 변환해야합니까 아니면 다른 방법이 있습니까? 당신은 당신이 사용하여 서버에 코드를 압축 할 수 있습니다 IIS 또는 변경 헤더를 구성 할 해달라고하면 위의 링크를 사용하여

:

C#

public static string Compress(string s) 
    { 
     var dict = new Dictionary<string, int>(); 
     char[] data = s.ToArray(); 
     var output = new List<char>(); 
     char currChar; 
     string phrase = data[0].ToString(); 
     int code = 256; 

     for (var i = 1; i < data.Length; i++){ 
      currChar = data[i]; 
      var temp = phrase + currChar; 
      if (dict.ContainsKey(temp))     
       phrase += currChar;     
      else 
      { 
       if (phrase.Length > 1)      
        output.Add((char)dict[phrase]);      
       else      
        output.Add((char)phrase[0]);      
       dict[phrase + currChar] = code; 
       code++; 
       phrase = currChar.ToString(); 
      } 
     } 

     if (phrase.Length > 1)    
      output.Add((char)dict[phrase]);    
     else    
      output.Add((char)phrase[0]); 

     return new string(output.ToArray()); 
    } 

브라우저에 당신이 그것을 압축을 풀 수 있습니다 로 :

자바 스크립트

,343,575,215,471,833 서버 측 응답 객체 내에서210
+8

을 JSON (및 기타) 응답을 압축하는 가장 쉬운 방법은 웹 서버가 HTTP 압축을 사용하는지 확인하는 것입니다. http://en.wikipedia.org/wiki/HTTP_compression 질문에서 참조하는 링크는 자바 스크립트에서 데이터를 압축하여 서버에 저장할 때 저장 공간을 적게 차지하는 방법에 대해 설명합니다. –

+0

그래, 그게 아마도 더 우아한 해결책 일거야. 나는 그것에게 시도 감사를 줄 것이다! –

+0

@TonoNam - 실제 질문과 일치하도록 질문을 변경했습니다. 자유롭게 되돌리기/수정하십시오. –

답변

36

같이, Gzip으로의 헤더를 추가 : 또한

Response.AddHeader("Content-Encoding", "gzip"); 

,이 같은 콘텐츠를 압축하기 위해 GZipStream 클래스를 사용할 수 있습니다 :

Response.Filter = new GZipStream(Response.Filter, 
           CompressionMode.Compress); 
+0

이것은 ** SUPER ** 유용합니다. 다른 +100을 줄 수 있으면 좋겠습니다. –

+0

JsonResult 메서드를 사용하면 사용할 수 있습니까? return Json (players, JsonRequestBehavior.AllowGet); – VAAA

+1

Karl 또한'Response.AddHeader'를 사용하여 @VAAA와 동일한 케이스를 사용하는 방법에 대한 자세한 내용을 원합니다. 'return Json'이 데이터를 보내려합니다. –