6

http://blog.urbantastic.com/post/81336210/tech-tuesday-the-fiddly-bits

Urbantastic 的 Heath 描述了他的 HTML 生成系统:

Urbantastic 中的所有 HTML 都是完全静态的。所有动态数据都通过 AJAX 以 JSON 格式发送,然后使用 Javascript 与 HTML 结合。换句话说,Urbantastic 的服务器软件专门生产和消费 JSON。HTML、CSS、Javascript 和图像都通过不同的服务(普通 Nginx 服务器)发送。

我认为这是一个有趣的模型,因为它在物理上将表示与数据分开。我不是架构专家,但似乎效率和稳定性会有所提高。

但是,以下问题与我有关:


  • [主观] Clojure 非常强大;Javascript 不是。在为另一个目标创建的语言上编写所有内容生成会产生一些痛苦(想象用 CSS 编写 Javascript 类型的代码)。除非他有一个用于生成 Javascript 的宏系统,否则 Heath 可能会在 JavaScript 和 Clojure 之间不断切换。他还会有很多JS代码;可能比 Clojure 更多。在切换到基于 LISP 的语言时,这在功能、快速开发、简洁性以及我们正在考虑的所有方面可能并不好。

  • [性能] 我对此不确定,但在用户机器上渲染所有内容可能会滞后。

  • [可访问性] 如果您禁用了 JS,则根本无法使用站点。

  • [accessibility#2] 我怀疑大量使用 JavaScript 填充的动态数据会产生跨浏览器问题。

任何人都可以发表评论吗?我有兴趣阅读您对这种架构的意见。

参考:

  1. 链接到关于 HN 的讨论。
  2. 链接到 /r/programming 的讨论。
4

3 回答 3

3

“Urbantastic 中的所有 HTML 都是完全静态的。所有动态数据都通过 AJAX 以 JSON 格式发送,然后使用 Javascript 与 HTML 结合。”

我认为这是 RIA 的标准模型。这里的重点词似乎是“全部”。因为很多网站很多动态内容还不是通过Ajax获取的,只有关键特性是。

如果您没有包含大量元素的大型网页,我认为渲染问题不会成为主要瓶颈。

JS 可访问性确实是个问题。但是,想要体验 AJAX 的用户必须启用 JS。您是否对有多少用户没有启用它进行过调查?

于 2009-02-26T07:09:25.187 回答
2

优点是,您可以通过 CDN(如 Akamai)提供 99%(按重量计)的内容,甚至可以将其放在外部存储上(例如 S3)。仅提供 JSON 服务几乎不可能让网站受到攻击。

于 2009-02-26T08:51:01.820 回答
1

当 AJAX 开始大受欢迎时,在 2005 年末,我编写了一个客户端模板引擎,并且基本上将我的博客模板变成了完全成熟的 AJAX 体验。

问题是,模板的东西,它真的很容易实现,它消除了很多繁重的工作。

这是它是如何完成的。

<div id="blogger-post-template">
<h1><span id="blogger-post-header"/></h1>
<p><span id="blogger-post-body"/><p>
<div>

然后在 JavaScript 中:

var response = // <- AJAX response
var container = document.getElementById("blogger-post-template");
if (!template) { // template context
    template = container.cloneNode(true); // deep clone
}
// clear container
while(container.firstChild) 
    container.removeChild(template.firstChild);

container.appendChild(instantiate(template, response));

实例化函数对模板进行深度克隆,然后在克隆中搜索标识符以替换为响应中找到的数据。最终结果是一个填充的 DOM 树,它最初是在 HTML 中定义的。如果我有多个结果,我只需遍历上面的代码。

于 2009-02-26T07:24:13.887 回答