質問

私はウェブアプリケーションがクライアント側のファイルをテキストエディタ編集か大きなテキストで知られる、サーバ側です。

顧客がどのような変更を加えます。

その中で最も ネットワーク効率 に送信結果の違いはサーバーを理解し?また、このことが起きるクライアント側(Javascript)においても高速(または少なくとも低遅)

一部のシナリオ:

  • ユーザーは、次の文字
  • ユーザーを変更す複数の文をランダムな位置
  • ユーザーの消去すべき結果を空白にします。

利用できなくなりました。diffような構文でないネットワーク効率でチェックは、例1と3を恐ろしいの違い(特に最後の結果より古い)。

誰でも経験がこの問題なのか?ユーザーとしての応用も大型のデータセット-3-5MBのテキスト、アップロードの全体の"新しい"コンテンツではビッグす。

ている場合がありますか"プロトコル"の移転、文字列比較は問題ではありません。

役に立ちましたか?

解決

私はこのトピックにあまり精通していませんが、非常に便利なオープンソース(Apacheライセンス2.0)プロジェクトを指摘することができます。

これは、GoogleエンジニアのJavaScriptを含むいくつかの言語で書かれたDiff、Match、およびパッチライブラリであり、いくつかのオンライン共同編集サービスで使用されています。

これがリソースのリストです。

他のヒント

サーバー上のコピーが変更されないことを知っていると仮定すると、単純なアプローチは、編集のリスト(削除と追加)を送信するだけで、削除は開始インデックスとエンドインデックスとして表され、追加が表されます。開始インデックスと挿入するテキストとして。

単純なdiffアルゴリズムを使用して作業する以上のものがある場合(「文字列の比較は問題ではない」という意味が正確にはわかりません)また、移動またはコピーされたテキストのエンドインデックスと、挿入する宛先。

インデックスが元のドキュメントを参照するか、これまで編集されたドキュメントを参照するかを確認する必要があることに注意してください。この問題を回避する簡単なアプローチは、常にドキュメントの最後から最初に編集を実行することです。以前の編集は、後の編集によって指定されたオフセットに影響しません。

このようなアプローチの例については、 ed それをフォーマットします diff -e 出力。これは基本的に、 ed ライン指向のテキストエディター. 。絶対的な最小の違いを送信したい場合は、ラインベースのインデックスではなく、キャラクターベースのインデックス作成を行うことができますが、同じ基本的なアプローチが機能する可能性があります。

ユーザーのパフォーマンスを編集する任意の編集は、次のように効率的に分割できます。 xテキスト「何でも」に挿入します。 xとyは、テキストの開始時の文字のオフセットです。 yは多くの文字です。 「何でも」は、あらゆる文字列です。あなたはdiffを計算するのに助けが必要ないと言いますが、例は ここ, 、それがあなたが必要とするよりもその出力が豊富であるが、「除去と挿入」を特定することを除いて、したがって、出力部分を変更するだけです。

データをサーバーに送信する正確な形式を調整できますが、それを行うことにはあまりマイレージがあるとは思いません。小数点以下の数字、引用された形式の挿入された文字列。実際の転送に関するいくつかの統計が実行されると、数値(小数とバイナリ)と引用符のオーバーヘッドの量がわかりますが、それほど意味がないと思われます(それが証明されている場合、すべての種類があります物事をより速くするために、常に最初からではなく、常に挿入または削除の最新のポイントからオフセットを与えるなど、試してみることができることのうち。

ユーザーが数秒ごとに行っていることをサンプリングし、最後の数秒(もしあれば)にわたって増分変更を送信するだけです。これにより、送信する各パケットは小さくなり、ネット接続またはユーザーの場合コンピューター/ブラウザのクラッシュ、ユーザーはあまり作業を失いませんでした。

500msごとに変更を送信することができるため、最後の500msで変更された変更は何でも送信されますが、変更があった場合にのみデータを送信します。

この場合、変更された単語の位置を送信して、単語全体を送信するだけですが、テキストの前から位置を作成できます。

それはいくつかの文の価値はありませんが、いくつかの言葉が関係するかもしれませんが、変化の順にそれらを送ると、結果は一貫しているはずです。

がありますので多くの方法を編集で短期間での時間のように500msを含む ドラッグ&ドロップ、切り貼り、大部分のテキスト以内周辺には、文書または外部からで--どうか分かりませんがされていると思いますが、カバーする全てのシナリオん。これは確かに非不明な点があれば、ここでお答えが思慮のトラブルの開発および維持のようなことと比べて変化するインターフェースを制限する文字サイズの破壊、既存のテキストすることにしました。

それではできない状況にありますがしたものではないでしょうかいに少ないトラブルを避の課題このように送り出すことだけに満文書を後で編集できるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top