首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化Knockout /tko-Alpha3

优化Knockout /tko-Alpha3
EN

Stack Overflow用户
提问于 2017-06-07 13:49:09
回答 1查看 314关注 0票数 7

在更新版本4.0的淘汰赛的过程中(现在是monorepo tko),我遇到了一些性能问题。

在其他更改中,一些内部循环的内容已经转换为ES6类,这导致了一些主要的性能问题。我不想撤销这种努力,因为它为一些关键代码增加了相当大的清晰度,所以我想征求一些关于如何改进ES6代码的意见。

我在这里设置了一些简单的分析示例:

敲除Alpha2 -349

敲除Alpha3 (预释放) -622

jsFiddles中的代码如下所示,它是许多绑定所经历的减速的典型。

HTML:

代码语言:javascript
复制
<div id='x'>
  <strong>{{ count }} / {{ time }} ms</strong>
  <custom-component></custom-component>
</div>

<div id='cc-template'>
   cc
   {{# unless: finished }}
      <custom-component></custom-component>
   {{ /unless }}
</div>

Javascript:

代码语言:javascript
复制
let count = ko.observable(0)
let time = ko.observable(false)
const start = performance.now()
const ITERATIONS = 1000

class viewModel {
  constructor () {
    this.finished = count() > ITERATIONS
    count(count() + 1)
    time(performance.now() - start)
  }
}

ko.components.register("custom-component", {
  viewModel, template: {element: 'cc-template'}
})

ko.applyBindings({count, time}, document.getElementById('x'))

如果您比较Javascript概要文件,调用树几乎是相同的(尽管ES6更改了)。看起来,在Alpha3中额外的时间是在叶调用上,使得它们更难识别,所以我根据配置文件的比较推测问题是几倍的,包括:

  • 一些非优化或非优化的发生
  • 一些循环被较慢的本机调用所取代,例如Array.from
  • 更多的中间次要垃圾回收
  • 减少ES6isms的本机优化

无论如何,我还没有找出这些问题中的哪一个,如果有的话--或者它们可能发生在哪里。

我将非常感谢您的洞察力,并帮助确定我们可以在哪里进行优化,以使性能恢复到甚至更高的水平。

EN

回答 1

Stack Overflow用户

发布于 2017-06-08 13:04:17

为了巩固任何答案,我已经开始了一个回答,作为一个wiki:

  • 使用if/ifnot/unless/with/elsetemplateforeach绑定删除不适当和不必要的依赖链- 3074AA9
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44414554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档