2

我们使用EmberJS(版本1.0.0-rc5)创建了一个Web应用程序。我们注意到Chrome的出色表现,不幸的是我们必须支持Internet Explorer 7作为我们的主要平台。Ember.js在IE 7中渲染缓慢

我们注意到在IE7上的性能很糟糕。在调查问题后,归结为模板的渲染(尽管路由也非常慢)。如果这是由于我们构建应用程序时出现错误,或者这是Ember的问题,我们不知道。

我创建了一个小样本应用程序来重现问题。你可以在http://manoswerts.be/playground/ember-performance找到它。它呈现出与我们在应用中所做的相似的树。在Chrome中运行时,结果会立即显示。在IE7中,渲染需要30秒到1分钟的时间。在IE8中,“仅”需要7秒。

有人熟悉这个吗?有没有解决这个问题的方法?

任何帮助,非常感谢。

+2

我不知道Ember是如何工作的,但它看起来像是在每个li元素上添加一个事件侦听器。这是自愿的吗?你不能使用事件代表团吗? –

+2

尽我们最大的尊重,“我们必须支持IE7”有多强大。这是因为你的用户实际上仍然停留在IE7上,还是仅仅因为有人决定将它指定为支持的基准?我的观点是,在过去的12个月里,IE7的使用已经下降了。实际上几乎没有人还在使用它;当然不是自愿的。如果可能的话,我的建议是放弃IE7的支持,因为是的,它吸引人,而且它确实有很糟糕的表现。但最重要的是,因为你会做所有的工作,而且没有人会真正在IE7中使用它。真是浪费。 – Spudley

+1

这是一个问题,无论IE7的支持,因为它是200毫秒铬上渲染80项,或者它只是我吗? Core i5在这里。 – Esailija

回答

1

尝试添加以下,以获取有关这么久什么是采取一些更细节:

Ember.subscribe('render', { 
    before: function(name, start, payload){ 
    return start; 
    }, 
    after: function(name, end, payload, start){ 
    var duration = Math.round(end - start); 
    var template = payload.template || ''; 
    //console.log(Ember.inspect(payload)); 
    //var title; 
    var view = payload.object.toString(); 
    console.log('rendered', template, view, 'took', duration, 'ms'); 
    } 
}); 

这将给你呈现的每个视图时机。当我在Chrome中运行您的示例时,每个人模板都需要大约2ms才能呈现。还有一些开销与嵌套的{{each}}帮助程序有关,并在这些{{each}}块中呈现“虚拟”视图。列表渲染时间总共为104毫秒。总时间将是在您点击Show results按钮后写入的最后一个console.log行。

因此,根据你所说的话,我预计总时间会比ie7和ie8慢一个数量级。如果是这样的话,想知道这是平均分配还是有一个特定的视图呈现得慢得多。

+0

感谢您的提示。我会试试看看输出是否能够启发我。我忘记提到在本地Handlebars(不通过Ember)中嵌套{{each}}块的渲染看起来非常快。最重要的是,这些观点还增加了开销,这使得它不可接受。我会通知你测试的结果。 –

+0

快速更新:我们突然得到绿灯,将IE 8用作我们的目标浏览器。所以目前这不再是我们的问题。不过,我会尽量在业余时间给@Mike Grassotti调查他的调查方法。 –