看起来渲染代码效率很低,原因很简单: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)
现在你只有一个html
setter 和一个refresh
call,而不是一个html
setter、n 个 append
call 和n+1 个 refresh
call!