Zephylaci

Results 42 comments of Zephylaci

```js const data = [{ id: '1', name: 'test1', children: [ { id: '11', name: 'test11', children: [ { id: '111', name: 'test111' }, { id: '112', name: 'test112' }...

@ZodiacSyndicate 这个写法想查112的时候不就查不出来了..

@yeild 路过,越俎代庖一下,不一定对... “建议尽可能在使用 v-for 时提供 key,除非遍历输出的 DOM 内容非常简单,或者是刻意依赖默认行为以获取性能上的提升。” 你是说这个么..它的本意是你应该单独指定一个Key而不是使用index来作为key...就像你说的这里还有一个复用问题.. 但,如果说不带key性能会更好,为啥还要建议带key呢? 这个性能提升的前提有一句“刻意依赖默认行为”..也就是说不是说你不带key就会有性能提升... 而实际上,只是单纯的说查找这一过程...你去试试 在arr中使用indexOf 和使用obj[key] 的性能区别..就能感受到性能差异了..

@yeild 你这里说的是创建的开销 而这道题讨论的是diff时的速度,我的理解是在说查找某一节点进行修改时的耗时.. 我并不知道vue如果不指定key时对这个查找是否会有别的优化,但从这个解答来说是没有的. 所以其实我们说的性能不是一个东西 不过,于我来说通过你的回复也理清了一些创建过程的概念,总之是有收获的

@yeild 了解你的意思,这么说的确楼主的说法有歧义,而我在思考上也先入为主了... 但是,总觉得有齿轮没有咬合在一起.. “key的作用就是更新组件时**判断两个节点是否相同**。相同就复用,不相同就删除旧的创建新的。” 这是在说创建的情况吧?新增的时候如果没有key,就会复用默认的而不重新创建 那么修改呢?需要先通过key来找到需要修改的节点,而如果没有key则会遍历所有节点..这个过程应该也算是diff的过程吧? 那么严格来说:**key对于修改节点时执行diff时会对性能有所提升,而对于新增这种情况时整体性能是下降的** 这么描述是不是准确一些? **** 2019-03-01 补充一篇文章,感兴趣的去翻翻,也许认识会全一些.. [vue diff算法解析](https://github.com/aooy/blog/issues/2)

@yeild 学习到了,看代码的确,key只在查找复用节点的时候起到了查找作用... 那么,的确楼主的说法不完全错....但放在这道题里是不合适的 至少对于diff过程来说这个key是起不到提速效果的

@yeild 刚发现楼主回复了.. 然后按它说的去查了下...发现我们两个前面的讨论也有一些误导性内容.... 虽然过程可能的确是有没有key都是遍历...但是key似乎的确在diff中能起到提速作用... 具体看看这个?[vue diff算法解析](https://github.com/aooy/blog/issues/2)

@mm-bt 第一个测试我也是forEach稍微快一丝丝,记得以前看过说针对forEach的实现是改过的.. 也就是用底层实现的循环(forEach,map)比自己写for循环效率要好.. 当时我在浏览器里跑过测试发现的确是这样..(10万以内) 然而刚我又写了一遍类似的..单次的话..for循环是要慢一些..

@jjeejj 看了你后面的时间测试结果,和我以前测得结果类似..你可以再加上map,10万以内map也会快一些.. 今天,我又查了下,发现,测试工具测试的是多次的结果...单次来看的确是forEach快..但是连着执行就会出现问题..10万以内的量级 连续执行10次就会有一倍的差距展示出来.. 期待有大佬能解答,为什么会这样,以及循环的这几个阈值是怎么来的..为什么.. 参考: [别人验证的文章](https://www.jianshu.com/p/8e2a90813055) [别人验证的文章2](https://juejin.im/post/5b645f536fb9a04fc9376882) [v8的建议](https://v8.dev/blog/elements-kinds) ```js var number = 100000;//array大小 var iteranum = 10;//迭代次数 var array = []; for(let i=0;i

![Uploading 1.png…]() ![3](https://cloud.githubusercontent.com/assets/13960592/21355141/d1677fb8-c707-11e6-8c4a-943cab6536dd.png) 我还尝试着重新下了次....