2

ASP.NET MVC 3 Webアプリケーション(Razor)と、jQuery UI AutoCompleteプラグイン(v1.8)を備えた特定のビューがあります。

これが私が現在持っているセットアップです:

$('#query').autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Search/FindLocations",
                type: "POST",
                dataType: "json",
                data: { searchText: request.term },
                success: function (data) {
                    response($.map(data, function (item) {
                        return { name: item.id, value: item.name, type: item.type }
                    }))
                },
                error: function (xmlHttpRequest, textStatus, errorThrown) {
                    // don't know what i should do here...
                }
            })
        },
        select: function (event, ui) {
            $.get('/Search/RenderLocation', { id: ui.item.name }, function (data) {
                $('#location-info').html(data);
            });
        },
        delay: 300, minLength: 3
    });

オートコンプリートは、基本的にGoogleマップのオートコンプリートと同じ世界の場所を返します。

これが私の質問です:

1)delayとの推奨設定は何minLengthですか?デフォルトのままにしますか?

2) Controllerアクションを実行することを考え[OutputCache]ましたが、プラグインが自動的にキャッシュを実行するように見えますか?これはどのように作動しますか?結果をCookieに保存しますか?もしそうなら、それはいつ期限切れになりますか?追加のキャッシュが推奨されますか?

3)何かを入力すると、AJAXリクエストが実行されているときに、他の何かを入力すると、ダイアログに最初の結果が一時的に表示され、次に2番目の結果が表示されます。async: false理由は理解できますが、ユーザーを混乱させます(AJAXリクエストには1〜2秒かかる場合があります)が、複数のリクエストを防ぐためのオプションで使用することを考えてい$.ajaxます-これは悪いデザイン/ UXですか?

4)パフォーマンス/ユーザビリティを改善するために、上記の設定に他の変更を加えることをお勧めしますか?

4

1 に答える 1

0

1)それは本当にあなたの使用法とあなたのデータに依存します。

2)[OutputCache]を使用する必要があります。プラグインでキャッシュが発生している場合は、ユーザーごとにのみキャッシュされます。コントローラーのアクションレベルでキャッシュを使用している場合は、すべてのユーザーに対してキャッシュがキャッシュされます。(繰り返しますが、これは実際には使用法によっては悪い場合がありますが、通常はこれを行うのが良いです)

3)文脈が不足しているため、この質問も難しいものです。ajaxリクエストが1〜2秒で、これを短くする方法がない場合、ユーザーが長い単語を入力しているときに多くのリクエストを送信しないように、かなりの遅延が発生するはずです(入力が遅い場合)。

4)/ search / FindLocationsメソッドを調べて、キャッシュまたは設定の改善をどこで実行できるかを確認する必要があるようです。ここにあるあなたのコードを見てください。もっと提案することができます。

于 2011-01-28T07:22:40.673 に答える