2016-05-11 11 views
0

私は非常に大きなjson(〜30mb)がIISでgzipされています(そのサイズは約6MBです)。未知の理由から、gzipはほとんどの場合動作しますが、gzipでファイルを取得する前にページを更新する必要があります。PHPからJavascriptにデータを取り込む方法

中国のユーザーは、gzip形式のファイルをプロキシなどの背後に置いたことがないようですが、読み込み時間が長すぎます。 (彼は4分で12MBをダウンロードした印刷画面を送ってくれました)。

ファイルはphpで生成され、クライアント側でjavascriptで表示されます。 私の最初の(そしてユニークな)解決策は、自分のクエリによって返されたデータをgzipでファイルに格納することです。

私が検索し、そこにPHPのgzcompressgzencodegzdeflateがあり、そしてすべての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 {}が返されます。

私の推測では、gzcompresszlib間のエンコーディングは同じ(感謝キャプテン)されていないですので、zlibのは、変換することはできませんが、私はそれを

TLを修正するために管理することはできません。DRにgzipがない理由毎回働く? PHPでjsonを圧縮し、Javascriptで圧縮解除するには?

+0

ブラウザは通常あなたのために解凍します。 JavaScriptを使用してロジックを追加する必要はありません。 –

+0

@RegisPortalez私は正しい方法で試したかどうかは分かりませんが、$ .getJSONで試しましたが(前と同じように)、バイナリの-whatever-zlib言語が返されました。私はサーバーがすでにgzipファイルをgzipしているのだろうか? – So4ne

+0

通常、gzipの問題はサーバーから発生します。それを有効にすることは、すべて適切なサーバー構成に関することです。はい、gzcompressで既にgzipしたもの(あるいはその逆)をgzipsのサーバに表示しているようです。 –

答えて

2

私は最初、私は単純な要求を行い、応答が適切にgzip圧縮されているかどうかを確認するために自分のネットワークを検査したいその後、IISサーバーが適切にgzip http responses

に設定されていることを確認します。ブラウザは余分なロジックなしで、あなたのために解凍されますので、

一旦全てその作業良いの、あなたは、手動でPHPの圧縮

file_put_contents('data/data2.json', gzcompress($res, 9)); 

とJavaScript解凍を削除することができます。

+0

すべてのステップを実行し、サーバーが正しくセットアップされています。私の質問で述べたように、gzipはほとんどの場合動作します。とにかくありがとう – So4ne

関連する問題