私は非常に大きなjson(〜30mb)がIISでgzipされています(そのサイズは約6MBです)。未知の理由から、gzipはほとんどの場合動作しますが、gzipでファイルを取得する前にページを更新する必要があります。PHPからJavascriptにデータを取り込む方法
中国のユーザーは、gzip形式のファイルをプロキシなどの背後に置いたことがないようですが、読み込み時間が長すぎます。 (彼は4分で12MBをダウンロードした印刷画面を送ってくれました)。
ファイルはphpで生成され、クライアント側でjavascriptで表示されます。 私の最初の(そしてユニークな)解決策は、自分のクエリによって返されたデータをgzipでファイルに格納することです。
私が検索し、そこにPHPのgzcompress
、gzencode
とgzdeflate
があり、そしてすべてのgzcompressのほとんどは、私はJavaScriptをzlib
ライブラリを使用できるようzlib
形式を返すことになってました。
PHPサイド:私は、同じファイルを20分ごとに更新するよう
file_put_contents('data/data2.json', gzcompress($res, 9));
ます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で圧縮解除するには?
ブラウザは通常あなたのために解凍します。 JavaScriptを使用してロジックを追加する必要はありません。 –
@RegisPortalez私は正しい方法で試したかどうかは分かりませんが、$ .getJSONで試しましたが(前と同じように)、バイナリの-whatever-zlib言語が返されました。私はサーバーがすでにgzipファイルをgzipしているのだろうか? – So4ne
通常、gzipの問題はサーバーから発生します。それを有効にすることは、すべて適切なサーバー構成に関することです。はい、gzcompressで既にgzipしたもの(あるいはその逆)をgzipsのサーバに表示しているようです。 –