簡體   English   中英

如何從PHP到Javascript獲取壓縮數據

[英]How to get a deflate data from PHP to Javascript

我有一個用IIS壓縮的非常大的json(〜30mb)(由於它,大小約為〜6mb)。 出於未知的原因,gzip大部分時間都可以工作,但有時不起作用,我必須刷新頁面幾次才能在gzip中獲取文件。

在中國的用戶似乎永遠都不會擁有gzip格式的文件,並且在代理和其他內容之后也看不到文件,因此加載時間太長了。 (他給我發送了一個打印屏幕,顯示在4分鍾內下載了12mb)。

該文件是使用php生成的,並使用javascript在客戶端顯示。 當時,我的第一個(也是唯一的)解決方案是我自己將查詢返回的數據gzip壓縮后再放入文件中。

我搜索發現PHP上有gzcompressgzencodegzdeflate ,並且大多數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 {}

我的猜測是gzcompresszlib之間的編碼不一樣(感謝隊長),因此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM