1

すべてのユーザーが独自の単語リストを持つことができる Java/Spring Web アプリケーションを作成しています。ユーザーが単語を追加/削除するたびに、この単語を含むJSONを送信して追加/削除するajax呼び出しがあり、サーバー側が完了すると、JSONオブジェクトの現在の単語リストがjQueryに返されます。

すべて正常に動作しています。小さな JSON 単語リストの追加と削除は非常に高速ですが、単語リストが大きくなると ajax 呼び出しが遅くなります。また、通話の追加/削除は非常に頻繁になります。

JSON 単語リストの例 [ポーランド語]:

 [{"word":"abrys","wordId":646},{"word":"acpan","wordId":647},
 {"word":"akrania","wordId":457},{"word":"akwawita","wordId":648},
 {"word":"amalgamat","wordId":399},{"word":"amurski","wordId":465},
 {"word":"amurskie","wordId":1030},{"word":"ananke","wordId":649},
 {"word":"androlog","wordId":650}]

jQuery [多かれ少なかれ]:

$("#add_word_submit").live("click", function(e) {
    e.preventDefault();
    var word = $('#add_word').serializeObject();
    $.postJSON("word.html", word, function(words) {
        showDividedAccountWords(words);     
    });
});

$(".delete_button").live("click", function(e) {
    e.preventDefault();
    if(confirm(Main.confirmWordDelete)) {
        var wordId = $(this).attr("id").substring("delete_".length);
        wordName["word"] = $(this).children("img").attr("alt");
        $.ajax({
            type: "DELETE",
            url: "word/" + wordId + ".html",
            success: function(words) {
                showDividedAccountWords(words);
            }
        }); 
    }
});

Java/春:

@RequestMapping(value="/word", method = RequestMethod.POST)
public @ResponseBody List<Word> addNewWord(@RequestBody Word word, Principal principal) {
    wordService.addNewWord(word, principal.getName());
    return getCurrentWords(principal.getName());
}

@RequestMapping(value="/word/{wordId}", method = RequestMethod.DELETE)
public @ResponseBody List<Word> deleteWord(@PathVariable Long wordId, Principal principal) {
    wordService.deleteWord(wordId, principal.getName());
    return getCurrentWords(principal.getName());
}

public List<Word> getCurrentWords(String username) {
    List<Word> accountWords = new ArrayList<Word>();
    accountWords.addAll(wordService.listUserWords(username));
    return accountWords;
}

リファクタリングのヒントを教えてください。ユーザーが単語を追加/削除するたびに、現在の単語リストを返すべきではないでしょうか?

4

2 に答える 2

1

リストに単語オブジェクトを段階的に追加するには、新しい単語をサーバーに渡し、単一の (word:wordid) オブジェクトだけを返すようにします。次に、それを既存のリストに追加して、次のように並べ替えることができます。

var words=[{"word":"abrys","wordId":646},{"word":"acpan","wordId":647},
 {"word":"akrania","wordId":457},{"word":"akwawita","wordId":648},
 {"word":"amalgamat","wordId":399},{"word":"amurski","wordId":465},
 {"word":"amurskie","wordId":1030},{"word":"ananke","wordId":649},
 { "word": "androlog", "wordId": 650}];


var result = { "word": "aklina", "wordid": "702" }; // returned by server from AJAX call
words.push(result); 

words.sort(
  function(a, b) {
    return a.word.localeCompare(b.word);
  }
 );
于 2012-05-26T00:06:49.967 に答える
0

Java/Spring に情報を処理させますが、データの転送に遅延があるかどうかを確認するために小さな文字列のみを返します。データの Java/Spring 処理に実質的な違いがない場合、それは転送または jquery 処理のいずれかにあります。転送が完了したときに jQuery からコンソールにアラートを送信するだけでテストできます。それが速い場合は、長いデータ データを処理する jQuery である必要があります。

于 2012-05-25T19:22:14.157 に答える