【问题标题】:Implementing HTML DOM rewriting logic on the server在服务器上实现 HTML DOM 重写逻辑
【发布时间】:2012-09-22 22:31:59
【问题描述】:

我的应用程序在加载时会在客户端对 DOM 进行大量重写。它遍历页面扫描特殊标记(想想 Markdown)或其他模式,用有时相当复杂的 DOM 结构(使用诸如 createElement 之类的 DOM 调用)替换它们以设置文本样式并创建图表和图形。

我采用这种架构是为了避免任何构建或预处理步骤。它在桌面浏览器中运行良好,但在移动设备上明显慢(几秒钟,即使经过不懈的优化)。所以我想重新架构系统以预扫描页面并预构建 DOM。我在弄清楚如何做到这一点时有点精神障碍。显然,我不希望用其他服务器端语言重写所有 Javascript。另外,我想保留在加载时进行构建的选项,就像现在一样,基本的重写逻辑共享相同的代码。

虽然我是一个节点初学者,但听起来最有可能的选择是将其构建为节点应用程序。使用 jsdom 来解析输入和修改 DOM。或者,由于我是 XSLT 的粉丝,并且对 Saxon-CE 很感兴趣,即使这意味着重写所有内容,我也考虑在 XSLT 中实现扫描/重写逻辑,以便从节点调用(用于预构建案例——人们使用节点中的撒克逊人吗?)或浏览器(用于加载时构建案例)。

任何人都可以对这种方法发表评论或提出其他想法吗?

【问题讨论】:

    标签: javascript node.js dom saxon


    【解决方案1】:

    不确定您正在处理大规模 DOM 重写的具体用例,也不确定您的吞吐量要求是什么。也就是说,node/jsdom 路由的另一种方法可能是运行一组无头 Webkit 浏览器,并在该实时渲染上下文中按原样运行您当前的 JavaScript。这将允许您将处理从那些 pokey 移动 CPU 转移到任意可扩展的云资源中(假设这对于您的项目/业务来说可能是负担得起的),并且完全无需重写或调整您当前的工作代码。

    【讨论】:

    • 太棒了。我稍微调整了这个解决方案以满足我的需求,只需在本地运行 PhantomJS 并使用 var dom = page.evaluate(function() {return document.documentElement.outerHTML;}); console.log(dom); 捕获 DOM
    【解决方案2】:

    听起来你想要 Node.js。如果您已经了解 JavaScript,那么学习它真的很容易。

    我会推荐这样的教程:http://www.nodebeginner.org/

    这将花费您一个小时左右的时间来完成,但在您与作者一起构建一个小而实用的应用程序时,会提供对 Node 的全面概述。

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2017-08-08
      • 2013-11-02
      • 2013-03-14
      • 1970-01-01
      相关资源
      最近更新 更多