11

javascriptファイル内にbase64形式で保存されている他のファイルタイプの中でも、cssと画像を含めることができることを私は知っています。ただし、これらはかなり巨大です...そしてgzipで圧縮されているため、base64エンコーディングからのオーバーヘッドが約33%であっても、LOTが縮小されます。

gzipされていない画像は、data:image / gif; base64、data:image / jpeg、data:image / png、cssはdata:text /css;base64です。次に、gzipで圧縮されたcssまたは画像データURIを含めるために、どのmimeタイプを使用できますか/使用する必要がありますか?(または、gzip + base64が機能しない場合、JavaScript内にデータを保存したまま、文字列のサイズを小さくするために他にできる圧縮はありますか?)

..編集..質問は誤解されていると思います。javascript内にgzip圧縮されたbase64文字列を含める必要があるかどうかは尋ねていません。はい、ほとんどの場合、サーバー側でjavascriptやその他のファイルをgzipで圧縮するのが最善だと思います。しかし、それはユーザースクリプトには当てはまりません。ユーザースクリプトにはサーバーがなく、単一のファイルのみで構成されています。Firefoxでは@requireディレクティブが許可されていますが、OperaとChromeでは許可されておらず、ローカルファイルのセキュリティの問題がローカルファイルの読み込みに関係しています。したがって、スクリプトに必要なものはすべて、1)Web上(遅い)または2)ユーザースクリプトに埋め込まれている(大きい)必要があります。

ここで、この質問は、遅いよりも大きい方が望ましいと想定していますが、その大きいということは、どれだけ大きいかを完全に無視することを意味する必要はありません。それを小さくすることができれば、それは改善です。

したがって、base64文字列がjavascriptに埋め込まれていると仮定すると、問題はそれを意味のあるものにする方法です。

また:

1)atob()は、javascript内でrawbase64でエンコードされたgzipをrawgzipに変換できます。(atobはメディアタイプを知る必要はありません)。問題は、その生のgzip圧縮されたcssまたは画像ファイルを解凍して、結果の出力をドキュメントにフィードできるようにする方法です。

または2)適切なメディアタイプが与えられた場合、ブラウザは少なくとも理論的には(datauri RFCに従って)datauriから直接任意のファイルをロードできる必要があります。「」は、gzip圧縮されていないcssスタイルシートをロードするのに十分です。ここでの問題は、どのリンクタイプ属性とdatauriメディアタイプの組み合わせが機能する必要があるか(そしてどのブラウザで機能するか)です。できれば、ユーザースクリプトの場合、これはOpera、FF、およびChromeで機能する組み合わせになります。

4

1 に答える 1

5

HTTP では、送信されるペイロードを減らすために、ほとんどの場合、圧縮は送信にのみ適用されます。これは、Content-Encodingヘッダー フィールドによって行われます。

ただし、dataURL スキームは非常に限定されており、メディア タイプのみを指定できます。

dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data

マルチパート メッセージを使用することもできますが、ほとんどのユーザー エージェントはdataURLでそれらをサポートしていません。また、このようなマルチパート メッセージを記述するための追加データが、実際のペイロードを圧縮することで安全になるデータ以上のものではないかどうかも疑問です。

そのため、URL 内のデータを圧縮するdataことは理論的には可能ですが、実際には不可能です。dataURL が埋め込まれているドキュメント全体を単純に圧縮することをお勧めします。

于 2012-01-28T21:42:40.637 に答える