【问题标题】:Angular change detection vs Svelte change detection角度变化检测与 Svelte 变化检测
【发布时间】:2021-06-17 21:47:06
【问题描述】:

我在日常工作中使用 Angular,同时也在学习 Svelte。我知道 Angular 或 Svelte 都没有使用虚拟 dom 和差异。我知道两者都有其他变化检测机制,而且根据我的研究,它们看起来很相似。谁能向我解释每种方法的独特之处以及 Angular 和 Svelte 的变更检测机制有何不同?

【问题讨论】:

    标签: angular svelte svelte-3 angular-changedetection


    【解决方案1】:

    免责声明:我对 Angular 和 Svelte 的内部工作原理都不是很了解,所以请谨慎回答。

    Angular 中的变更检测是通过某种形式的脏检查来完成的。每次告诉 Angular 这样做时,都会运行一次检查。在普通的 Angular 项目中,通过使用 Zone.js 来修补所有可能的事件源,例如 setInterval 或 DOM 事件侦听器。当修补的事件触发时,Angular 会触发更改检测。然后将 Angular 感兴趣的每个变量与之前的状态进行比较,如果它们不同,则重新渲染内容。 This blog post 更详细地解释了这个概念。

    Svelte 不进行脏检查,而是在编译时分析每个可能触发重绘的变量,并使用 $$invalidate 调用包装分配。所以foo = 'bar' 变成了$$invalidate(.., foo = "bar");(侧节点:这就是为什么像array.push(item) 这样的事情不会触发 - 没有分配 - 新 Svelte 开发人员的常见困惑)。所有变量失效的地方都将在下一个浏览器tick中重新绘制。

    【讨论】:

    • 这有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 2018-10-24
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多