Comment compresser des réponses JSON
Je suis avec beaucoup d'appels ajax pour interroger la base de données et je reçois un grand texte (json) des réponses. Je souhaite compresser la réponse.
Il est un excellent moyen de compression du texte à l'aide de javascript dans JavaScript mise en œuvre de Gzip.
Le problème c'est que je veux compresser la réponse sur mon aspx serveur et decmpress avec javascript. Donc j'ai besoin d'exécuter le lzw_encode
fonction sur mon asp.net serveur. Dois-je-je traduire cette fonction de C# ou il y a un autre moyen?
En utilisant le lien ci-dessus si vous ne voulez pas configurer IIS ou modifier les en-tête, vous pouvez compresser le code sur le serveur avec:
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());
}
et sur le navigateur, vous pouvez le décompresser avec:
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("");
}
Ouais, c'est probablement une solution plus élégante. Je vais l'essayer, merci!
J'ai changé la question pour correspondre à votre problème actuel. Hésitez pas à revenir ou à éditer.
Grâce sonne beaucoup mieux maintenant!
OriginalL'auteur Tono Nam | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
Au sein de votre serveur-côté de la réponse de l'objet ajouter un en-tête pour GZip, comme ceci:
Aussi, vous pouvez utiliser le GZipStream classe pour compresser votre contenu, comme ceci:
Puis-je utiliser si je utiliser JsonResult méthode: retour Json(joueurs, JsonRequestBehavior.AllowGet);
Karl-je aussi vous souhaitez plus de détails sur la façon d'utiliser
Response.AddHeader
même cas que @VAAA essayer de faire de monreturn Json
envoyer les données à compresserCette réponse était liée à la résolution de cette question avec ASP.NET WebForms, mais je vais vous à une réponse de comment faire pour compresser le contenu dans ASP.NET MVC
Merci Karl, vous êtes l'homme.
OriginalL'auteur