c# javascript asp.net compression

c# - Cómo comprimir las respuestas JSON



javascript asp.net (1)

Estoy utilizando muchas llamadas ajax para consultar la base de datos y obtengo respuestas de texto grande (json). Me gustaría comprimir la respuesta.

Hay una gran manera de comprimir texto usando javascript en la implementación de JavaScript de Gzip .

El problema es que quiero comprimir la respuesta en mi servidor aspx y descomprimirla con javascript. Por lo tanto, necesito ejecutar la función lzw_encode en mi servidor asp.net. ¿Debería II traducir esa función a C # o hay otra manera?

Utilizando el enlace anterior, si no desea configurar IIS o cambiar el encabezado, puede comprimir el código en el servidor con:

DO#

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()); }

y en el navegador puedes descomprimirlo con:

javascript

// Decompress an LZW-encoded string function lzw_decode(s) { var dict = {}; var data = (s + "").split(""); var currChar = data[0]; var oldPhrase = currChar; var out = [currChar]; var code = 256; var phrase; for (var i = 1; i < data.length; i++) { var currCode = data[i].charCodeAt(0); if (currCode < 256) { phrase = data[i]; } else { phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar); } out.push(phrase); currChar = phrase.charAt(0); dict[code] = oldPhrase + currChar; code++; oldPhrase = phrase; } return out.join(""); }


Dentro de su objeto de respuesta del lado del servidor, agregue un encabezado para GZip, como este:

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

Además, puedes usar la clase GZipStream para comprimir tu contenido, de esta manera:

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