我打算使用mithril.js编写性能敏感的应用程序,该应用程序将有数千个可以随时更新的DOM元素,我必须确保只重新更新已更新的元素。
我的问题是,有没有办法让mithril自动重绘系统记录DOM更改(到浏览器控制台或任何地方),以便我可以查看它并绝对确保只有预期的DOM元素会被更改?我想要防止我自己的逻辑错误,并确信秘银只是触及变化的元素。
答案 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
} )
}
}
} )
}
}
)
。