是重新呈现整个模板更好,还是使用jquery修改一些值更好
Would it be better to render a whole template again or use jquery to modify a few values?
让我们以以下模板为例:
<div class="picture">
<img src="<%= model.get("url") %>"></img>
<p class="author"><%= model.get("author") %></p>
<p class="date"><%= model.get("date") %></p>
<div class="likers"><%= some logic that outputs a nice list of people that have liked this picture %></div>
<button class="like-button <%= model.get("is_liked") ? 'active' : '' %>"><%= model.get("is_liked") ? 'You liked this picture' : 'Click here to like this picture' %></button>
</div>
假设我使用Backbone渲染该模板,然后单击类似按钮触发以下功能:
选项A:
var me = "Peeter";
var model; //refrence to the model
var likers = model.get("likers");
model.get("is_liked") ? likers.remove(me) : likers.add(me); //Add/remove me
model.set({
"is_liked" : !model.get("is_liked"), //Toggle state
likers : likers
});
var $button = $(".like-button")
var $likers = $(".likers");
$button.toggleClass("active");
$button.hasClass("active") ? $button.text('You liked this picture') ? $button.text('Click here to like this picture');
$likers.text(/* copy/paste the logic that's in the template to render the list of likers*/);
选项B:
var me = "Peeter";
var model; //refrence to the model
var template; //refrence to the template declared at the top of this question
var likers = model.get("likers");
model.get("is_liked") ? likers.remove(me) : likers.add(me); //Add/remove me
model.set({
"is_liked" : !model.get("is_liked"), //Toggle state
likers : likers
});
template.render();
你推荐哪种方法?为什么?此外,请考虑到移动浏览器,在移动设备上重新渲染整个模板(如果模板稍大一点)是否有点太慢?
这是一个通常无法回答的问题,对您的特定用例进行一些分析肯定会有所帮助。
但作为一个普遍的答案,我认为你必须回顾以下几点:
- 模板的大小以及处理数据所需的时间
- 绑定到视图的事件数。每次重新渲染时,需要绑定和解除绑定的次数越多
- 渲染功能以及如何将其设置为重要影响
有关更多详细信息,请查看以下链接:
- http://ianstormtaylor.com/break-apart-your-backbonejs-render-methods/
- http://ianstormtaylor.com/assigning-backbone-subviews-made-even-cleaner/
- http://ianstormtaylor.com/rendering-views-in-backbonejs-isnt-always-simple/
我更喜欢通过JQuery进行更新。JQuery的小更新即使在600 MHz的安卓系统上也相当快。
您可以尝试使用Backbone ModelBinder将UI元素绑定到模型。最好等待更新小的UI部分,而不重新渲染整个模板。
相关文章:
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- jquery:将动画绑定到滚动条位置的更好方法
- 是重新呈现整个模板更好,还是使用jquery修改一些值更好
- 有没有更好的方法来编写这个Show/hide JQuery代码
- 使用 jQuery 只选择第一级后代 - 有没有更好的方法
- 在速度方面,使用变量而不是重新定义jquery对象更好吗
- 我在jQuery中有一个循序渐进的过程,有没有更好的编码方法
- 使用Jquery处理大量点击事件的更好解决方案
- 优化javascript/jQuery以获得更好的性能
- 使用coffeescript/jQuery生成HTML比使用字符串更好
- 重复我的jQuery中的函数,有更好的方法吗
- 有没有更好的方法来访问用JQuery选择器选择的第一个元素
- 有没有更好的方法可以用jquery更新图像的高度和宽度
- jquery悬停后恢复到原始图像是更好的方式
- 有没有更好的方法以一定的顺序执行一堆部分异步的jQuery函数
- Jquery DOM Manipulation Somenthing比这更好
- 使用 jQuery 清除输入值的更好方法
- 哪个性能更好:jQuery.live(),还是内联onevent属性
- 哪个更好:Jquery.animate()或带有setTimeOut的css转换