1

Javascript で文字列を圧縮できるようにする必要がありますが、一時ファイルを保存する必要はありません。次に、この圧縮データを POST 経由で送信します。Pythonで受け取るので、そこで解凍できる必要があります。次のhttp://rosettacode.org/wiki/LZW_compressionを実装しましたが、ASCII 文字でのみ機能することがわかりました。私はウェブページを読んでいますが、どんな文字が表示されるかわかりません.

(これを行う必要があるのは、文字列が非常に長くなる可能性があり、低速のネットワークでは投稿に時間がかかりすぎるためです。)

4

3 に答える 3

2

事前に文字列の base64 エンコードを試すことができます (これにより、圧縮されたストリームが 1.5 から、直接圧縮できた場合の 2 倍のサイズになります)。

ここに別の実装 (gzip Deflate アルゴリズムのこれ) があります

または、非 ASCII 文字を \xNN (NN = 文字の 16 進コード) に置き換えてエスケープすることもできます。もちろん、スラッシュもエスケープする必要があります。

とにかく、約 10 倍以上の速度向上を達成する可能性は低く、エンコードのオーバーヘッドとのバランスが取れているのではないかと心配しています。ユースケースについて詳しくわからない場合は、Deflate を使用することをお勧めします。

于 2012-10-04T16:21:28.647 に答える
0

OPコメントより。

JavaScript は DOM 要素を読み取り、それを送信します。さまざまな理由でソースを指すことはできません。主な理由は、ページ上で JavaScript によって作成された要素が必要だからです。また、ブラウザが計算してくれるスタイルも必要です。

1 つの解決策は、Python でSeleniumを使用してブラウザーを自動化し、そこから DOM を取得することです。

于 2012-10-04T16:21:57.673 に答える
0

javascriptでdeflate を使用し、python で zlib を使用します。(LZW は古くて時代遅れです -- 最新の方法ははるかに優れています。) base 85 エンコーディングを使用する間に、実験や標準ドキュメントが示すよりも 85 個の ASCII 文字を選択すると、無傷で POST を通過できます。基数 85 は、各文字が基数 85 の数値の数字であり、そのような 5 つの数字が 32 ビットをエンコードします。

于 2012-10-04T17:20:59.733 に答える