すべてのユーザーが独自の単語リストを持つことができる 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;
}
リファクタリングのヒントを教えてください。ユーザーが単語を追加/削除するたびに、現在の単語リストを返すべきではないでしょうか?