下一代Web应用程序框架存在哪些内容?他们如何超越RoR,Django等?

时间:2010-07-12 14:49:03

标签: web-frameworks

目前,最受欢迎的网络应用框架包括Ruby-on-RailsDjango以及各种PHP框架,例如DrupalJoomla。但是,我一直在阅读一些声称以不同方式处理Web开发的“下一代”Web应用程序框架。

也许最着名的例子是基于Smalltalk语言的Seaside框架。在其About页面中,它列出了4个主要功能:

  1. 程序化HTML生成
  2. 基于回调的请求处理
  3. 嵌入式组件
  4. 模态会话管理
  5. 我正在开发一个相当复杂的模拟网络应用程序,需要类似于桌面应用程序的功能,如复杂的交互式表单,任务流程,大量图表和视觉效果,以及UI灵活性和重用(许多小部件) ),Seaside的2,3和4声音非常吸引人。

    因此,我想听听其他(高级)Web开发人员关于哪些开源“下一代”Web应用程序框架存在,是什么让他们比Django / RoR等更熟悉的工具“更好”,以及什么可以使用这些较新的工具构建一种应用程序,这些工具对旧框架很难/痛苦,例如据我所知,Seaside基于continuation的会话/状态管理使状态应用程序比全局会话变量更容易。最终会有多大用处?

    提前感谢您的体验和见解!

6 个答案:

答案 0 :(得分:3)

基于haskell语言的Yesod框架。

答案 1 :(得分:3)

Seaside对我们来说非常棒。我们在Pharo上开发并使用Gemstone OODB在VPS上进行部署,目前我们开发的速度是我以前公司在ASP.NET MVC中的五倍。

没有数据库代码,生成的html(没有模板)和javascript(Scriptaculous / jQuery / RaphaelJs)的组合效果非常好。

第1点非常重要。我从来没有见过基于模板的系统足够干净(虽然可能有一个基于lisp的系统)。

我也玩过卡布奇诺的早期版本,如果你有可可/ nextstep背景,这很好,但是(在第一次公开发布后几个月)我们还没有完成。

答案 2 :(得分:3)

MFlow是一个用Haskell编写的Web框架,以Seaside的方式编写,但没有延续问题(持久性和可伸缩性问题)

Web开发的主要问题是HTTP的无状态特性,它强制执行事件处理编程模型,充满了不安全的变量标识符和事件处理程序。大多数情况下,状态采用动态类型数据的哈希表的形式,因为事件处理程序不共享变量范围。

基于延续的框架,如ocsigen(ocaml)和海边(smalltalk)可以很好地处理后退按钮,它们将状态保持在正常变量中,并且可以通过阅读代码来理解导航。而且他们大多数都是RESTFul到一定程度。但是这些框架不具有可扩展性,并且由于延续的固有问题而存在持久性问题。

Web应用程序的另一个问题是HTML的无类型特性,它可能会产生不匹配和运行时错误。

在MFlow中不仅每个页面,而且整个导航在编译时是安全的,并且它不会共享上述问题。它具有基于continuation的框架的良好属性,但它是可伸缩的,因为它使用日志记录和回溯而不是continuation。它使用标准的Haskell Web库:WAI,formlets,stm,blaze-html。它有一个可插拔的独立组件系统。

这是一个包含三页的完整应用程序。在循环中,它要求两个数字并显示总和。您可以随意按下后退按钮。在配置文件,页面和源代码中没有必须放在那里的魔术标识符:

module Main where
import MFlow.Wai.Blaze.Html.All

main= do
  addMessageFlows  [("sum", transient . runFlow $ sumIt )]
  wait $ run 8081 waiMessageFlow

sumIt= do
  setHeader $ html . body
  n1 <- ask $  p << "give me the first number"  ++>  getInt Nothing
  n2 <- ask $  p << "give me the second number" ++>  getInt Nothing
  ask $ p << ("the result is " ++ show (n1 + n2)) ++> wlink () << p << "click here"

只需稍加修改就可以使国家持久。

http://hackage.haskell.org/package/MFlow

这里有一些示例和操作方法:http://haskell-web.blogspot.com.es/

答案 3 :(得分:2)

坦率地说,只要您将每次与用户界面的互动转发到服务器并返回,您就永远不会获得“类似桌面”的体验。我大多放弃了服务器端框架。我的网络应用程序是javascript和Web服务,我尝试最小化服务器端代码的数量。剩下的是什么,我将其包装到Zend Framework中,但数据持久性和验证层确实不需要那么多代码。

我正在使用ExtJS来获取javascript代码,但有很多javascript框架很不错(CappuccinoSproutCoreGWTDojo ,...)。

所有真正丰富的交互最终都是javascript,所以如果你要选择一个平台,选择一个与javascript完全集成的平台。显然javascript工具包有优势。我收集的GWT是神奇的,因为它不是javascript,但你可以假装它没有遇到问题。 Quake II的javascript端口是一个GWT项目,所以这就是说法。

答案 4 :(得分:2)

与Smalltalk的Seaside框架等效的python是Nagare - 它看起来像一个功能强大的系统,虽然文档目前在深度/广度上不一致,我在网上找不到很多开发者故事/经验。它也很有趣,它使用Stackless Python来获得持续支持。

答案 5 :(得分:1)

我相信Meteor是真正的下一代网络框架。顾名思义,它正在杀死恐龙。

为什么下一代?让我列出一些功能,取自documentation

  1. 电线上的数据。 Meteor不会通过网络发送HTML。服务器发送数据并让客户端呈现它。

  2. 一种语言。 Meteor允许您使用JavaScript编写应用程序的客户端和服务器部分。

  3. 数据库无处不在。您可以使用相同的方法从客户端或服务器访问数据库。

  4. 延迟补偿。在客户端,Meteor预取数据并模拟模型,使其看起来像服务器方法调用立即返回。

  5. 完全堆栈反应性。在Meteor中,实时是默认值。从数据库到模板的所有层在必要时自动更新。

  6. 拥抱生态系统。 Meteor是开源的,并与现有的开源工具和框架集成。

  7. 简单性等于生产力。让事情变得简单的最好方法就是让事情变得简单。 Meteor的主要功能是干净,经典的API。