Maison >interface Web >js tutoriel >JavaScript peut-il compresser les données JSON côté client pour les serveurs avec des caches de taille fixe ?

JavaScript peut-il compresser les données JSON côté client pour les serveurs avec des caches de taille fixe ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 13:16:11717parcourir

Can JavaScript Compress JSON Data Client-Side for Servers with Fixed-Size Caches?

Implémentation JavaScript de Gzip

Question :

Existe-t-il un moyen de compresser les données JSON côté client avant de l'envoyer à un serveur avec une taille fixe cache ?

Réponse :

Modifier : Pour de meilleurs résultats, utilisez la solution LZW améliorée trouvée sur http://pieroxy.net/blog /pages/lz-string/index.html.

Original Solution :

Bien que JavaScript ne fournisse pas d'implémentation de Gzip, la bibliothèque jsolait propose des fonctions de compression et de décompression LZW. Voici le code :

Fonction de compression LZW :

function lzw_encode(s) {
    var dict = {};
    var data = (s + "").split("");
    var out = [];
    var currChar;
    var phrase = data[0];
    var code = 256;
    for (var i = 1; i < data.length; i++) {
        currChar = data[i];
        if (dict[phrase + currChar] != null) {
            phrase += currChar;
        } else {
            out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
            dict[phrase + currChar] = code;
            code++;
            phrase = currChar;
        }
    }
    out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
    for (var i = 0; i < out.length; i++) {
        out[i] = String.fromCharCode(out[i]);
    }
    return out.join("");
}

Fonction de décompression LZW :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn