【问题标题】:a new approach to web development: request for tools and components recommendations一种新的 Web 开发方法:请求工具和组件建议
【发布时间】:2010-07-18 23:30:13
【问题描述】:

我正在寻找编写大量使用 JavaScript 的 Web 应用程序的最佳可能性。因此,我想向您介绍我的想法,并征求您对此的意见和替代方案:)

1 年前,我开始寻找 PHP 之外的 Web 开发可能性。我找到了 JSP 和 Django。我决定和Django一起去。在使用 Django 启动了一些项目后,我得出这样的结论:对我来说,Django 并没有为简单的 Web 开发提供可能性。我不得不担心太多的功能,尤其是需要保持客户端和服务器代码平衡。

于是我再次开始搜索,发现 CouchDB 为 Ajax 应用程序提供了一种很酷的后端。所以我的想法是使用 CouchDB 作为数据库服务器,它只提供数据验证和存储,并将其他所有内容保留给客户端。这显然不是一个新想法,但我还没有找到任何好的例子。 你知道吗?

我想要一个包含以下组件的架构:

  • 数据存储和验证 (CouchDB)
  • Web 服务器:处理文件和 WebSocket 或轮询(Tornado 或 Eventlet)
  • 客户端 JavaScript 来处理其他所有事情(最喜欢:自写的 MooTools)
  • 客户端模板语言(你知道很酷吗?)

对于这些要点,您对使用不同的软件有什么建议吗?

处理如下请求:

初始请求将 JavaScript 文件和基本 HTML(仅 <body><head> 标签)发送到客户端。加载的 JavaScript 函数创建 HTML 代码并将其插入到 <body> 标记中。从现在开始,网站上的整个导航只请求JSON,它是通过Websocket提供并由客户端JavaScript处理的。

优点:

  • 整个代码在客户端用 JavaScript 编写
  • 更新动画非常容易实现
  • 页面的逻辑将非常轻量级和透明
  • 在服务器端可能没有扩展问题
  • 由于出色的客户端缓存可能性,应用程序性能非常快。例如使用 Webstorage

缺点:

  • 在低硬件机器上模板处理可能很慢?!
  • 应用程序代码对所有人公开

问题

  • 您知道此类 Web 开发的任何可用解决方案吗?
  • 您认为以这种方式编写 Web 应用程序会很古怪吗?

也请看Answer 2

【问题讨论】:

  • 不,我也有类似的想法。但也许你应该重申你的问题。现在有点难以回答。
  • 您是否考虑过在服务器端使用 CouchDB "shows" 进行模板处理?
  • 是的,在客户端处理模板将使表示层保持在一侧。更少的请求开销和更轻松的内容更改更新处理。但也许在客户端和服务器端拥有相同的 Javascript 代码会很酷。

标签: javascript templates html mootools couchdb


【解决方案1】:

您知道此类 Web 开发的任何可用解决方案吗?

看看couchapps。它是由couchedb后面的人写的。它基于 jquery,但将其转换为与 mootools 一起使用并不难。还有一个不错的 JavaScript 模板引擎,名为 mustache。模板引擎将在浏览器和 couchdb 双方上工作。

你认为以这种方式编写 Web 应用程序会很古怪吗?

没有。这是大多数谷歌应用程序(邮件、文档、电子表格)的工作方式,也有许多框架以这种方式工作,如 sproutcore 或卡布奇诺。

网络服务器:处理文件和 WebSockets 或轮询(Tornado 或 小事件)

我认为 couchdb 也会处理这个问题

【讨论】:

【解决方案2】:

虽然爱斯基摩人回答了大部分问题,但“我的”描述的开发 Web 应用程序的方法仍然存在一个大问题:模板语言

如上所述,他们中有很多人使用 Javascript 在客户端工作。但在我看来,到目前为止我发现的所有模板语言都缺少一项重要功能:更新功能

我并不是说在更新时重新渲染整个模板,但我希望看到一种模板语言只更新我的变量更改。


用例示例:

想象一下,我目前正在阅读一个包含 25 个 JSON 变量和一个用于呈现这些变量的大模板的博客。突然,地球另一端的某个勇敢的人提出了一个很酷的评论。现在有不同的可能性向当前读者展示“实时更新”:

  • 最坏情况:整个页面重置。 26 个 Json 变量,整个模板处理必须重做。
  • Bad-Case:当前页面的整个博客部分刷新。 15 个 Json 变量和大部分模板处理都必须重做。
  • Better-Case:仅刷新当前页面的评论部分。 5 个 Json 变量和一个小模板处理必须重做。
  • 最佳实践: 新评论被插入到评论列表的顶部。 1 个 Json 变量和一个非常小的模板处理必须重做。

现在您可能会想,一点点 Java 脚本也没有问题。但我想要一种自动执行此操作的模板语言。一种模板语言,它知道其当前状态并在标题更改时仅更新标题。或者从旧的到新的预告图消失。

这样我们可以节省大量自定义更新脚本。在更改页面结构时不必担心动画,并且由于只提供更新而不是当前文档数据的已知部分,我们可以优化网络流量。


问题:

  1. 您如何看待这种模板语言方法?
  2. 您知道任何提供类似处理的模板语言吗?
  3. 是否有可能让它在没有很多性能缺陷的情况下工作?

【讨论】:

  • 数据绑定正是您所需要的。一个名为 SproutCore 的 JavaScript 框架提供了这一点。
  • 数据绑定并不难,尤其是使用 mootools。只需使用 set 和 get 方法创建一个类,它将您的模型保存为 json。该类实现 Options 并在调用 set 方法时触发一个事件。
  • 你能发布一些示例代码吗?不要真正得到你的设置和获取方法。它们是根据传递的 JSON 动态创建的吗?
  • @eskimoblood - 数据绑定中的困难部分不是触发事件,而是将各种类型的 UI 小部件与数据绑定。每当数据值更改或 UI 控件值更改时,另一个都会更新 - 这是更困难的部分。
  • @Anurag 我认为这并不难。考虑一个全局事件总线,您的所有演示者都在监听或触发他们的事件。演示者控制他们的视图和模型,并在必要时在全局总线上触发事件。
【解决方案3】:

在过去的几个大型项目中,我一直在使用 Trimpath Javascript Templates,对此我感到非常满意。

我现在离不开的工作流程的其他几部分:

  • 同时适用于 JavaScript 和 CSS 的构建过程。能够随心所欲地组织我的 js 和 css 文件,将它们分成我想要的小块,然后自动将它们卷成一个大文件,这真是太好了

  • LessCSS -- 对普通 CSS 语法的改进。您使用 LessCSS 语法编写样式表,它类似于 css,但允许您使用变量、数学、mixins、嵌套类等内容。 LessCSS 引擎然后将其编译为常规 CSS。

【讨论】:

  • 您在 JS 和 CSS 构建过程中使用什么工具?
  • 我使用 ant 将整个构建捆绑在一起。还有一个我写的python脚本,它允许我在我的源代码中使用python风格的三引号多行字符串。这样一来,我的模板就可以成为我单个巨大的、卷起的 js 文件的一部分,我可以编写它们而不必担心逐行构建 js 字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多