如果任何一个经历了内存泄漏使用Handlebar.js编译功能,我想知道。
我目前工作的一个单页应用程序,它定期轮询从通过Ajax调用服务器数据。 每次当我拿到新的数据的时候,我重新渲染视图。 (我与handlbar.js结合使用Backbone.js的。我知道我需要手动自由视图对象当我关闭视图或切换到其他的观点,我觉得是不是这里的情况。至少,我认为它。是不是对于这个话题请访问以下链接: http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/ )< -我有不正是采取的办法,但我试图解除绑定所有的事件和数据,并删除所有引用。
这里是我的代码
// 1. Remove all the old dom
// -- purge all objects
// -- remove dom
Helpers.Purge(this.el); //Purge function is copied from Douglas Crockford's blog
view.empty();
this.compileTemplate(view, viewData, this.model.get("Template"));
// 2. Append the new view
var thisDom = document.getElementsByClassName(this.className);
Helpers.Purge(thisDom);
$(thisDom).remove();
$article.append(this.el);
该this.compileTemplate功能是这样的:
compileTemplate: function (view, data, templateSelector, ratio) {
var templateSource = $(templateSelector).html(),
template = Handlebars.compile(templateSource);
var el = view.html(templateResult);
}
如果我注释掉 “变种EL = view.html(templateResult);” 我不会得到内存泄漏问题。 当我去掉这一行中,IE 9的内存消耗开始募集。 (我强迫视图重新编译每0.5秒以用于测试目的的模板。)
我想知道是否有在Handlbar.js一个已知的内存泄漏问题,或者是我做错了。
预先感谢您非常多。
干杯
新的更新:
我试图找出问题,并写了一个小程序,以测试它是否只是handlebar.js IE9上导致内存泄漏。
下面是代码。
(function ($) {
function render() {
var templateSource = $("#template").html();
var compileTemplate = Handlebars.compile(templateSource);
var data = {
users: [
{ username: "alan", firstName: "Alan", lastName: "Johnson", email: "alan@test.com" },
{ username: "allison", firstName: "Allison", lastName: "House", email: "allison@test.com" },
{ username: "ryan", firstName: "Ryan", lastName: "Carson", email: "ryan@test.com" }
]
};
console.log("before compiling");
var templateWithData = compileTemplate(data);
$("#content").html(templateWithData);
console.log("after compiling");
//this.el = templateWithData;
}
setInterval(render, 500);
})(jQuery);
和HTML代码是在这里:
<!doctype html>
<html lang="en">
<head>
</head>
<body>
<div id="content">
</div>
<!-- JS -->
<script id="template" type="text/x-handlebars-template">
<table>
<thead>
<th>Username</th>
<th>Real Name</th>
<th>Email</th>
</thead>
<tbody>
{{#users}}
<tr>
<td>{{username}}</td>
<td>{{firstName}} {{lastName}}</td>
<td>{{email}}</td>
</tr>
{{/users}}
</tbody>
</table>
</script>
</body>
<script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="js/lib/handlebars-1.0.0.beta.6.js" type="text/javascript"></script>
<script src="js/complieTemplateWithoutBackbone.js" type="text/javascript"></script>
</html>
IE浏览器的内存只是不断攀升不降。 可有一个人请看看这个。
非常感谢你。
干杯