2020-11-18 gzip 前后端數(shù)據(jù)傳輸壓縮‘pako’

?let?zlib?=?require("pako"); //引入

//壓縮方法 用來將大數(shù)據(jù)壓縮后在傳給后端

Vue.prototype.zip?=?function?(str)?{

????????????//encodeURIComponent?將字符串作為URI組件進(jìn)行編碼

????????????//zlib.gzip()?將編碼后的數(shù)據(jù)進(jìn)行壓縮生闲,string類型

????????????let?binaryString?=?zlib.gzip(encodeURIComponent(str),?{

????????????????to:?"string"

????????????});

????????????//btoa()將壓縮后的數(shù)據(jù)變成base64格式

????????????return?btoa(binaryString);

????????},

//解壓縮方法,前端接受后端大數(shù)據(jù)后懒熙,先解壓縮在進(jìn)行后面的邏輯

????????Vue.prototype.unzip?=?function?(b64Data)?{

????????????//atob()將base64格式數(shù)據(jù)轉(zhuǎn)化成壓縮數(shù)據(jù)

????????????let?strData?=?atob(b64Data);

????????????//split()方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組

????????????//通過map函數(shù)進(jìn)行遍歷昼弟,并對每一個(gè)進(jìn)行?Unicode?編碼

????????????let?charData?=?strData.split("").map(function?(x)?{

????????????????//charCodeAt()?方法可返回指定位置的字符的?Unicode?編碼

????????????????return?x.charCodeAt(0);

????????????});

????????????//Uint8Array?8?位無符號(hào)整數(shù)值的類型化數(shù)組

????????????let?binData?=?new?Uint8Array(charData);

????????????//?console.log(binData);

????????????//解壓縮?充氣

????????????let?data?=?zlib.inflate(binData);

????????????//fromCharCode?將?Unicode?編碼轉(zhuǎn)為一個(gè)字符:

????????????//?console.log(data);

?????????? //分片解壓縮还惠,防止數(shù)據(jù)量過大,瀏覽器棧溢出報(bào)錯(cuò)

????????????let?chunk?=?8?*?1024;

????????????let?res?=?"";

????????????let?dataLength?=?data.length?/?chunk;

????????????let?i;

????????????for?(i?=?0;?i?<?dataLength;?i++)?{

????????????????res?+=?String.fromCharCode.apply(

????????????????????null,

????????????????????data.slice(i?*?chunk,?(i?+?1)?*?chunk)

????????????????);

????????????}

????????????res?+=?String.fromCharCode.apply(null,?data.slice(i?*?chunk));

????????????//decodeURIComponent()?對?encodeURIComponent()?函數(shù)編碼的?URI?進(jìn)行解碼

????????????strData?=?res;

????????????return?decodeURIComponent(strData);

????????},

2021-02-20:

? ? 問題更新:最新客戶在使用的過程中私杜,發(fā)現(xiàn)頁面展示會(huì)出現(xiàn)莫名其妙的“+”蚕键。

? ? 對此,我們進(jìn)行了一番查詢衰粹,發(fā)現(xiàn)問題原因如下:后端在將數(shù)據(jù)壓縮的過程中锣光,正常情況下會(huì)將數(shù)據(jù)中的“+”號(hào)編碼成%2B,同時(shí)會(huì)將“ 空格 ”編碼成“%20”铝耻,那么前端接收以后誊爹,就可以進(jìn)行解碼。

? ? 但是瓢捉,我們發(fā)現(xiàn)數(shù)據(jù)中的“+”會(huì)被正常編碼频丘,但是空格卻不會(huì),而是編碼成了“+”.那么泡态,前端接收以后在解碼的過程中搂漠,就無法對“+”進(jìn)行解碼,就會(huì)造成顯示和真實(shí)數(shù)據(jù)不一致某弦。

解決方案:后端在壓縮完成后桐汤,再將所有的“+”編碼替換成“%20”,這樣靶壮,在前端接收數(shù)據(jù)后怔毛,就能將數(shù)據(jù)正常解碼并顯示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腾降,一起剝皮案震驚了整個(gè)濱河市拣度,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌螃壤,老刑警劉巖抗果,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異映穗,居然都是意外死亡窖张,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蚁滋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宿接,“玉大人赘淮,你說我怎么就攤上這事∧丽” “怎么了梢卸?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長副女。 經(jīng)常有香客問我蛤高,道長,這世上最難降的妖魔是什么碑幅? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任戴陡,我火速辦了婚禮,結(jié)果婚禮上沟涨,老公的妹妹穿的比我還像新娘恤批。我一直安慰自己,他們只是感情好裹赴,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布喜庞。 她就那樣靜靜地躺著,像睡著了一般棋返。 火紅的嫁衣襯著肌膚如雪延都。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天睛竣,我揣著相機(jī)與錄音晰房,去河邊找鬼。 笑死酵颁,一個(gè)胖子當(dāng)著我的面吹牛嫉你,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躏惋,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嚷辅!你這毒婦竟也來了簿姨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤簸搞,失蹤者是張志新(化名)和其女友劉穎扁位,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趁俊,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡域仇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寺擂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇务。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泼掠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出垦细,到底是詐尸還是另有隱情择镇,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布括改,位于F島的核電站腻豌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嘱能。R本人自食惡果不足惜吝梅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惹骂。 院中可真熱鬧憔涉,春花似錦、人聲如沸析苫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衩侥。三九已至国旷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茫死,已是汗流浹背跪但。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工渺氧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耳贬,地道東北人姑躲。 一個(gè)月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓畏吓,卻偏偏與公主長得像够话,于是被迫代替她去往敵國和親翁狐。 傳聞我的和親對象是個(gè)殘疾皇子楼雹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 流是Node中最重要的組件和模式之一脐雪。在社區(qū)里有一句格言說:讓一切事務(wù)流動(dòng)起來详幽。這已經(jīng)足夠來描述在Node中流...
    宮若石閱讀 560評論 0 0
  • 8.1 Hadoop源碼編譯支持Snappy壓縮(了解) 8.1.1 資源準(zhǔn)備 1)CentOS聯(lián)網(wǎng) 配置Cent...
    臨時(shí)_01e2閱讀 432評論 0 0
  • 一筛欢、壓縮算法 1.zip 以下參考他發(fā)明了 zip 壓縮格式,功成名就之際死于墮落壓縮大戰(zhàn)真相 轉(zhuǎn)載自2004.1...
    合肥黑閱讀 5,909評論 0 5
  • 一 壓縮算法的原理 最近自己實(shí)現(xiàn)了一個(gè)ZIP壓縮數(shù)據(jù)的解壓程序唇聘,覺得有必要把ZIP壓縮格式進(jìn)行一下詳細(xì)總結(jié)版姑,數(shù)據(jù)壓...
    readilen閱讀 2,660評論 5 22
  • 1.運(yùn)行一個(gè)nodejs文件, 如一個(gè)js文件中只含有console.log("hello world");的文件...
    不忘初心_9a16閱讀 5,809評論 0 8