跟踪mithril.js自动重绘系统

时间:2016-01-11 11:49:10

标签: javascript mithril.js

我打算使用mithril.js编写性能敏感的应用程序,该应用程序将有数千个可以随时更新的DOM元素,我必须确保只重新更新已更新的元素。

我的问题是,有没有办法让mithril自动重绘系统记录DOM更改(到浏览器控制台或任何地方),以便我可以查看它并绝对确保只有预期的DOM元素会被更改?我想要防止我自己的逻辑错误,并确信秘银只是触及变化的元素。

1 个答案:

答案 0 :(得分:3)

您可以使用W3C MutationObserver API让浏览器记录DOM中发生的更改(尽管API很繁琐)。这可以让您充分了解对DOM所做的每个特定修改。

为了在重绘后记录结果,您可以在主应用程序之后安装一个未附加的(即从未注入到实时文档)组件,并从Mithril&#39上的观察者那里获得一个空根节点到rescue ; takeRecords决议。这段代码是动态编写的,未经测试但应该给你一个想法:

config

编辑:我刚刚尝试过时,我发布的代码并没有发挥作用。我更新它以提供工作代码。正如你所看到的那样,它是错综复杂的,不直观和丑陋的。我最终想要多次这样做,并且每次我都在使用MutationObserver API时:突变记录列表很容易阅读,但初始化观察者很笨重,总是涉及复制+粘贴。所以我写了一个小包装器Muty,以使这更容易。使用Muty,您需要做的只是// Application code // Mount an unattached component // to log mutation records m.mount( document.createElement( 'div' ), { controller : function(){ return new MutationObserver( function( records ){ console.log( records ) } ) }, view : function( ctrl ){ return m( 'div', { config : function( el, isInitialized ){ if( !isInitialized ){ ctrl.observe( el, { attributes : true, characterData : true, childList : true } ) } } } ) } } )

相关问题