看起来渲染代码效率很低,原因很简单:DOM 操作成本很高。只要有可能,您应该操作 DOM 一次而不是多次。JavaScript/CoffeeScript 中的所有其他优化都是次要的。
这是显着的代码(来自与 ambertch 回复的第二条评论相关的要点):
refresh: ->
    @list.listview("refresh")
appendWord: (word)->
    wv = new WordView({model: word}).render().el
    @list.append( wv )
    @refresh()
render: ->
    @list.html("")
    @model.each (word) => @appendWord(word)
    @refresh()
因此,在 上render,首先清除列表的 HTML;然后对于每个单词,列表的 HTML 都会被清除并刷新控件!
我对 jQuery Mobile 不熟悉,所以我不确定主要惩罚是在append(因为它在 jQuery 中)还是在 上listview('refresh'),但很容易重写循环以避免两者,并删除一些函数定义/调用开销以及:
render: ->
  html = []
  @model.each (word) ->
    html.push(new WordView(model: word).render().el)
  @list.empty().append(html)
现在你只有一个htmlsetter 和一个refreshcall,而不是一个htmlsetter、n 个 appendcall 和n+1 个 refreshcall!