javascript - 在一个页面上运行多个模型投影仪

标签 javascript frameworks components maquette

一些背景

我使用基于前端组件的 UI 框架,该框架完全通过 jQuery 管理其 UI。在它最初创建时,这听起来并没有那么疯狂,jQuery 是制作交互式 Web 组件的稳定的逻辑选择。然而,如今,手动跟踪每个变量和数据的每次更改,然后将其反射(reflect)在 DOM 中,不再是唯一可行的选择。随着框架的发展,维护一致的代码风格和代码效率的负担也随之增加。

我最近一直在查看 Maquette.js,看起来它可能只是帮助解决这些挑战及更多挑战的框架。

问题

我知道使用 this将 Maquette 与其他库集成的技术。然而,我的框架很大,很多人依赖它,并且将我们的渲染全部转换为 Maquette 是不可行的。至少不是一下子就完成的。因此,如果我确实使用模型,我预计自己将被迫为组件的每个实例使用新的投影仪。这就是我关心的问题。

与使用单个投影仪渲染所有内容相比,页面上存在大量投影仪是否会对性能产生负面影响?换句话说,就性能而言,最大限度地减少页面上的投影仪数量有多理想?

如果代码有帮助,我已经修改了 Maquette 主页上的简单示例来说明这一点。 1000 台投影仪同时运行。看起来不错,但感觉就像我正在做一些模型设计不该做的事情。

document.addEventListener('DOMContentLoaded', function () {
  var h = maquette.h;
  var domNode = document.body;
  var yourName = ''; // Piece of data
  var numbers = [];

  // Load up our array
  for(var i = 0; i < 1000; i++){ numbers.push(i); };

  numbers.forEach(function(){
     var projector = maquette.createProjector();
    // Plain event handler
    function handleNameInput(evt) {
      yourName = evt.target.value;
    }

    // This function uses the 'hyperscript' notation to create the virtual DOM. 
    function renderMaquette() {
      return h('div', [
        h('input', { 
          type: 'text', placeholder: 'What is your name?', 
          value: yourName, oninput: handleNameInput 
        }),
        h('p.output', ['Hello ' + (yourName || 'you') + '!'])
      ]);
    }

    projector.append(domNode, renderMaquette);

    });
});

最佳答案

好问题。投影仪重量轻,而且是被动式的。如果您同时在所有 1000 台投影仪上调用 ScheduleRender,我只会预见到一些性能损失。这意味着每个投影仪都会调用 requestAnimationFrame。如果您仅同时在几台投影仪上调用scheduleRender,则开销应该是最小的。

关于javascript - 在一个页面上运行多个模型投影仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42014011/

相关文章:

javascript - 尝试在 for 循环 jquery 中使用 inner.HTML 生成一个 div

angular - 你如何让 Angular 2 组件 self 毁灭?

angular - 如何在 Angular 两个子组件之间进行通信?

javascript - 从浏览器录制视频并流式传输到 Youtube/Twitch 时,如何使用 ffmpeg 添加音频?

javascript - 删除 &lt;script&gt; 标签的 Greasemonkey 脚本

css - 什么是 CSS 框架?

iPhone - MessageUI - 找不到框架消息

php - 异常信息:Message: Invalid controller specified (index)

javascript - 如何将 Zoom Chart 与 Angular 2 集成

javascript - 修改 input type=number 使其两边都有箭头