3

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

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

  1. 程序化 HTML 生成
  2. 基于回调的请求处理
  3. 嵌入式组件
  4. 模态会话管理

由于我正在开发一个相当复杂的模拟网络应用程序,它需要类似于桌面应用程序的功能,例如复杂的交互式表单、任务流、大量图表和视觉效果,以及 UI 灵活性和重用(大量小部件),Seaside 的特征 2、3 和 4 听起来很吸引人。

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

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

4

6 回答 6

3

基于haskell语言的Yesod框架。

于 2010-07-12T19:05:21.257 回答
3

海边对我们来说很好。我们在 Pharo 上开发并将其部署在带有 Gemstone OODB 的 VPS 上,目前我们的开发速度大约是我以前的公司在 ASP.NET MVC 中的五倍。

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

第1点非常重要。我从未见过足够 DRY 的基于模板的系统(尽管可能有一个基于 lisp 的系统)。

我也玩过早期版本的卡布奇诺,如果你有可可/下一步的背景很好,但是(在第一次公开发布几个月后)对我们来说还不够。

于 2010-07-13T18:49:01.103 回答
3

MFlow是一个用 Haskell 编写的 web 框架,采用 Seaside 的方式,但没有 continuation 的问题(持久性和可扩展性的问题)

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

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

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

在 MFlow 中,不仅每个页面,而且整个导航在编译时都是安全的,并且没有上述问题。它具有基于延续框架的良好特性,但它是可扩展的,因为它使用日志记录和回溯而不是延续。它使用标准的 Haskell 网络库: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/

于 2013-04-27T23:24:17.257 回答
2

与 Smalltalk 的 Seaside 框架等效的 python 是Nagare - 它似乎是一个功能强大的系统,尽管目前文档在深度/广度上不一致,而且我在网上找不到很多开发者的故事/经验。有趣的是,它使用Stackless Python来支持延续。

于 2010-07-12T18:45:36.907 回答
2

坦率地说,只要您在每次 UI 交互到服务器和返回时都进行往返,您就永远不会获得“类似桌面”的体验。我大多放弃了服务器端框架。我的网络应用程序是 javascript 和网络服务,我尽量减少服务器端代码的数量。剩下的很少,我将其封装到 Zend Framework 中,但是数据持久性和验证层确实不需要那么多代码。

我将ExtJS用于 javascript 代码,但是有许多不错的 javascript 框架(CappuccinoSproutCoreGWTDojo等)。

无论如何,所有真正丰富的交互最终都是 javascript,因此,如果您要选择一个平台,请选择一个与 javascript 集成得非常好的平台。显然,javascript 工具包在那里有优势。我收集到的 GWT 很神奇,因为它不是 javascript,但您可以假装它是,而不会遇到问题。Quake II 的 javascript 端口是一个 GWT 项目,所以这说明了一些事情。

于 2010-07-12T18:24:33.373 回答
1

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

为什么是下一代?让我列出它的一些特性,取自它的文档

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

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

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

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

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

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

  7. 简单等于生产力。让事情看起来简单的最好方法就是让它变得简单。Meteor 的主要功能有干净、经典漂亮的 API。

于 2015-03-03T14:44:28.693 回答