4

Google 翻訳者 (translate.google.com) がポストバックなしでユーザー レートをどのように節約できるのか疑問に思っています。また、ユーザーがポストバックを表示しない場所 (たとえば、スタック オーバーフロー) にも同様の動作があります (すべてが非常に高速でスムーズです)。たとえば、質問/回答の投票や Stack Overflow でのコメントなど、データベースとのやり取りは Ajax ですか? それともJavaScriptだけですか?VS2010、C#、ASP.NET を使用してこれらのタイプの操作を実装するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

概要

これの 2 つの側面:

  • サーバーに記録する必要があることをしたとき
  • 物事を見ているだけで、何もしていないのに物事が更新されていることに気付くと (投票インジケーターが変化し、「この投稿は改訂されました。クリックして読み込みます」、「この質問は閉じられました。これ以上の回答は受け付けません」など)

サーバー側で記録する必要があることを行うとき (例: 投票)

サーバーに ajax メッセージを送信する JavaScript コードです。会話のサーバー側は、好きなテクノロジで実装できます (Web の利点の 1 つであるクライアント側とサーバー側は分離されています)。具体的には、ページには当時のままの投票情報が読み込まれ、投票ボタンをクリックすると、JavaScript コードが投票表示を即座に更新します。、その後、サーバーに ajax リクエストを送信して投票を記録します (したがって、即座に視覚的なフィードバックが得られます)。通常、その要求は適切な時間内に完了し、すべて問題ありません。リクエストの処理中にエラーが発生することがあります (HTTP エラー — たとえば、何かがうまくいかなかった — またはサーバーが投票を拒否した論理エラー)。その場合、エラー メッセージが表示され、コードは投票の表示を元に戻します (サーバーに登録されていないため)。

Stack Exchange の場合、 JavaScript コードでjQueryライブラリを使用しています。これがいかに簡単かを理解していただくために、jQuery を使用した単純な ajax 呼び出しのクライアント側を次に示します。

$.ajax({
    url:    "/path/to/server/resource",
    method: "POST",
    data:   {action: "voteup"},
    success: function(data) {
        // Do something with the successful response from the server,
        // which can send back data
    },
    error:   function(jqXHR, textStatus, errorThrown) {
        // Do something with the error that occurred
    }
 });

サーバー側は、意味のある方法で POST 操作に応答するだけです。

この例では jQuery を使用していますが、他にもYUIClosurePrototypeなど、ajax を非常にシンプルにする JavaScript ライブラリがたくさんあります。jQuery は、現在 (圧倒的に) ブラウザー ベースの JavaScript タスク用の最も人気のあるライブラリですが、それだけではありません。

物事だけを見ているとき

これについては外部からしか話せませんが、Stack Exchange はいくつかの「コメット」手法 (Web ソケット、ロング ポーリング、 hiddeniframesなど) のいずれかを使用していると思います。

Web ソケットが最初の選択肢だと思います。たとえば、[ネットワーク] タブを開いた状態で Chrome を使用して質問を開くと、へのリクエストが表示されます。これはws://sockets.ny.stackexchange.com/、Web ソケットに関連付けられたワイヤ プロトコル RFC6455 でカバーされてwsいる2 つのスキームの 1 つですwss(もう 1 つは、SSL で保護されたバージョンです)。 . Web ソケットの利点は、クライアントとサーバー間の永続的な双方向通信を正式かつ堅牢に許可し、サーバーが必要に応じてクライアントにデータをプッシュできることです。

Web ソケットは、IE9 以前の明らかな省略により、現在かなり十分にサポートされているため、SE はおそらく、上記のリンクに記載されている古い手法の 1 つまたは複数にフォールバックして、それらを持たないブラウザーに対応します。

于 2012-04-25T11:03:00.343 に答える
0

私にとって、DapperのEntityFrameworkの置き換えは非常にうまくいきました。速度が大幅に向上しました。

于 2012-04-25T11:04:44.550 に答える