[英]How to get a deflate data from PHP to Javascript
我有一個用IIS壓縮的非常大的json(〜30mb)(由於它,大小約為〜6mb)。 出於未知的原因,gzip大部分時間都可以工作,但有時不起作用,我必須刷新頁面幾次才能在gzip中獲取文件。
在中國的用戶似乎永遠都不會擁有gzip格式的文件,並且在代理和其他內容之后也看不到文件,因此加載時間太長了。 (他給我發送了一個打印屏幕,顯示在4分鍾內下載了12mb)。
該文件是使用php生成的,並使用javascript在客戶端顯示。 當時,我的第一個(也是唯一的)解決方案是我自己將查詢返回的數據gzip壓縮后再放入文件中。
我搜索發現PHP上有gzcompress
, gzencode
和gzdeflate
,並且大多數gzcompress應該返回zlib
格式,因此我可以在javascript上使用zlib
庫。
PHP端:
file_put_contents('data/data2.json', gzcompress($res, 9));
我每20分鍾刷新一次相同的文件,所以需要file_put_contents。
Javascript方面:
$.ajax({
type: 'GET',
url: "data/data2.json",
headers: { "Content-Encoding" : "gzip", "Content-type": "text/plain" },
dataType: "text",
async: false,
success: function(data) {
let inflate = new zlib.inflate(data);
});
不幸的是,這不起作用。
如果我寫let inflate = new zlib.inflate(data).toString('utf8');
像示例一樣,它返回"[Object object]"
,如果我刪除了toString部分,它將返回e…s.inflate {}
。
我的猜測是gzcompress
和zlib
之間的編碼不一樣(感謝隊長),因此zlib無法轉換但我無法修復它
TL; DR為什么gzip每次都不起作用? 如何在PHP上壓縮json並在Javascript上解壓縮?
我首先要檢查您的IIS服務器是否已正確配置為gzip http響應
之后,我將提出一個簡單的請求,並檢查我的網絡以查看響應是否正確壓縮。
一旦一切正常,您可以刪除手動php壓縮
file_put_contents('data/data2.json', gzcompress($res, 9));
並解壓縮javascript,因為瀏覽器將為您解壓縮,而無需任何額外的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.