Javascript IE9中的Handlebar.js内存泄漏
我想知道是否有人因为使用Handlebar.js编译函数而经历过内存泄漏Javascript IE9中的Handlebar.js内存泄漏,javascript,internet-explorer,backbone.js,handlebars.js,Javascript,Internet Explorer,Backbone.js,Handlebars.js,我想知道是否有人因为使用Handlebar.js编译函数而经历过内存泄漏 我目前正在开发一个单页应用程序,它通过Ajax调用定期从服务器轮询数据。每次获得新数据时,我都会重新渲染视图。(我将Backbone.js与handlbar.js结合使用。我知道我需要在关闭视图或切换到其他视图时手动释放视图对象,我认为这里不是这样。至少,我认为不是这样。关于此主题,请参阅此链接:)以防任何一个视图出现相同问题 我已经解决了这个问题。最后我根本没用车把。我切换到KnockOut.js,它是MVC4包的一部分
我目前正在开发一个单页应用程序,它通过Ajax调用定期从服务器轮询数据。每次获得新数据时,我都会重新渲染视图。(我将Backbone.js与handlbar.js结合使用。我知道我需要在关闭视图或切换到其他视图时手动释放视图对象,我认为这里不是这样。至少,我认为不是这样。关于此主题,请参阅此链接:)以防任何一个视图出现相同问题 我已经解决了这个问题。最后我根本没用车把。我切换到KnockOut.js,它是MVC4包的一部分 KnockOut与IE配合得很好,但不是KnockOut的映射插件(一个帮助您映射javascript对象的插件),所以我必须手动绑定对象的每个字段。这不是太多额外的工作。我很高兴使用KnockOut.js解决了内存泄漏问题
希望Handlebar社区将来能够解决内存泄漏问题 以防万一,任何人都有同样的问题 我已经解决了这个问题。最后我根本没用车把。我切换到KnockOut.js,它是MVC4包的一部分 KnockOut与IE配合得很好,但不是KnockOut的映射插件(一个帮助您映射javascript对象的插件),所以我必须手动绑定对象的每个字段。这不是太多额外的工作。我很高兴使用KnockOut.js解决了内存泄漏问题 希望Handlebar社区将来能够解决内存泄漏问题
// 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);
compileTemplate: function (view, data, templateSelector, ratio) {
var templateSource = $(templateSelector).html(),
template = Handlebars.compile(templateSource);
var el = view.html(templateResult);
}
(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);
<!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>