首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轨道mithril.js自动重绘系统

轨道mithril.js自动重绘系统
EN

Stack Overflow用户
提问于 2016-01-11 11:49:10
回答 1查看 214关注 0票数 0

我计划使用mithril.js编写一个性能敏感的应用程序,该应用程序将有数千个DOM元素可以随时更新,而且我必须确保只有更新的元素被重新绘制。

我的问题是,是否有一种方法可以让mithril自动重绘系统记录DOM更改(到浏览器控制台或任何地方),这样我就可以查看它并绝对确定只有预期的DOM元素被更改了吗?我想保护自己不受逻辑错误的影响,并且相信mithril只是在接触变化的元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-11 19:57:48

您可以使用W3C MutationObserver API来让浏览器记录DOM中正在发生的更改(尽管这个API非常谨慎)。这可以让您完全了解对DOM所做的每一项具体修改。

为了在重绘后记录结果,您可以在主应用程序之后挂载一个单独的组件(即从未注入到活动文档),并从takeRecordsconfig解析中获得一个空根节点。这段代码是在未经测试的情况下编写的,但是应该给您一个想法:

代码语言:javascript
复制
// 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
            } )
          }
        }
      } )
    }
  }
)

编辑:当我尝试的时候,我发布的代码不起作用。我更新了它以提供工作代码。正如你所看到的,它是复杂的,不直观的,丑陋的。我已经多次想要这样做了,每次我都与MutationObserver API做斗争:突变记录列表很容易读取,但是初始化观察者很笨拙,而且总是涉及复制+粘贴。所以我写了一个小包装,穆蒂,使这更容易。对于Muty,您所需要做的就是muty( muty.options, el, records => console.log( records ) )

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34720832

复制
相关文章

相似问题

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