目前,最受欢迎的网络应用框架包括Ruby-on-Rails,Django以及各种PHP框架,例如Drupal和Joomla。但是,我一直在阅读一些声称以不同方式处理Web开发的“下一代”Web应用程序框架。
也许最着名的例子是基于Smalltalk语言的Seaside框架。在其About页面中,它列出了4个主要功能:
我正在开发一个相当复杂的模拟网络应用程序,需要类似于桌面应用程序的功能,如复杂的交互式表单,任务流程,大量图表和视觉效果,以及UI灵活性和重用(许多小部件) ),Seaside的2,3和4声音非常吸引人。
因此,我想听听其他(高级)Web开发人员关于哪些开源“下一代”Web应用程序框架存在,是什么让他们比Django / RoR等更熟悉的工具“更好”,以及什么可以使用这些较新的工具构建一种应用程序,这些工具对旧框架很难/痛苦,例如据我所知,Seaside基于continuation的会话/状态管理使状态应用程序比全局会话变量更容易。最终会有多大用处?
提前感谢您的体验和见解!
答案 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框架很不错(Cappuccino,SproutCore,GWT,Dojo ,...)。
所有真正丰富的交互最终都是javascript,所以如果你要选择一个平台,选择一个与javascript完全集成的平台。显然javascript工具包有优势。我收集的GWT是神奇的,因为它不是javascript,但你可以假装它没有遇到问题。 Quake II的javascript端口是一个GWT项目,所以这就是说法。
答案 4 :(得分:2)
与Smalltalk的Seaside框架等效的python是Nagare - 它看起来像一个功能强大的系统,虽然文档目前在深度/广度上不一致,我在网上找不到很多开发者故事/经验。它也很有趣,它使用Stackless Python来获得持续支持。
答案 5 :(得分:1)
我相信Meteor是真正的下一代网络框架。顾名思义,它正在杀死恐龙。
为什么下一代?让我列出一些功能,取自documentation。
电线上的数据。 Meteor不会通过网络发送HTML。服务器发送数据并让客户端呈现它。
一种语言。 Meteor允许您使用JavaScript编写应用程序的客户端和服务器部分。
数据库无处不在。您可以使用相同的方法从客户端或服务器访问数据库。
延迟补偿。在客户端,Meteor预取数据并模拟模型,使其看起来像服务器方法调用立即返回。
完全堆栈反应性。在Meteor中,实时是默认值。从数据库到模板的所有层在必要时自动更新。
拥抱生态系统。 Meteor是开源的,并与现有的开源工具和框架集成。
简单性等于生产力。让事情变得简单的最好方法就是让事情变得简单。 Meteor的主要功能是干净,经典的API。