完全透明化:我是Snap的主要开发人员之一。
首先,让我们谈谈Snap是什么。现在,Snap团队在hackage上维护五个不同的项目:snap-core、snap-server、heist、snap和xmlhtml。snap-server是一个Web服务器,公开了由snap-core定义的API。heist是一个模板系统。xmlhtml是由heist使用的XML/HTML解析和渲染库。snap是一个伞形项目,将它们全部粘合在一起,并提供了强大的snaplets API,使Web应用程序可组合和模块化。
Yesod在hackage上有大量的项目。大多数(全部?)都列在Yesod category中。其中一些著名的是yesod-core、warp、persistent和hamlet。
Haskell Web开发的现实是,它比看起来要少得多的“排他性选择”。通常,这些项目非常松散耦合且相当可互换的。您可以使用warp(Yesod团队的Web服务器)、heist(Snap团队的模板系统)和acid-state(Happstack项目的持久性系统)构建网站。您还可以使用snap-server与hamlet或persistent。
说实话,这两个项目确实有一些不同之处。我可以客观地指出最大的区别是,Yesod 项目通常大量使用 Template Haskell 和 quasiquoting 来创建简洁的 DSL,而 Snap 项目则坚持构建组合库,更注重可组合性。我能想到的任何其他差异都会对 Snap 产生主观偏见。以这两个项目命名的伞形包显然会为上述组件做出具体选择,并且这些选择将反映在项目依赖项中。但这仍然并不意味着您不能引入其他不同的内容并将其用于项目中。编辑:如果您想进行更详细的比较,可以查看我最近的博客文章。如果您想使用一些更广泛的概括来进行更粗略(但可能更有用)的比较,请查看我的Haskell Web Framework Comparison Matrix。
提醒一下:我是Yesod的首席开发人员。
我不确定您对JavaScript语法有何不喜:它只是普通的JavaScript,具有变量插值。至于CSS,Yesod现在有Lucius,允许您还使用纯CSS。对于HTML,您可以轻松地使用任何其他库,包括Heist(Snap使用的库)。也就是说,如果Snap甚至没有语法来处理CSS / JavaScript,那么跳过Yesod似乎有点可笑。您当然可以使用他们的解决方案,即仅使用静态文件。
Yesod无缝支持身份验证/授权、类型安全的URL、小部件、电子邮件以及各种小功能(面包屑、消息、终极目标等)。此外,Yesod还有一些相当丰富的附加包,用于评论和Markdown等功能,并且还有一些大型的真实代码库供您参考。如果这些功能中的任何一个对您有吸引力,您可能需要检查一下其他选择是否支持它们。
Julius
的方法?我正在使用Google Closure
,需要在注释中保留元数据以供编译器使用。 - Andras Gyomrey尝试一下Hamlet - 你可能会最终喜欢它。表面上的负面反应并不罕见,但实际使用过Hamlet的人没有人会抱怨。
另外,为什么不使用Happstack?仅仅因为他们不在新闻中,并不意味着他们没有稳固的框架。
你可能指的是旧版本的Yesod。最新的Yesod版本具有纯HTML、JavaScript和CSS的语法。
Yesod的模板库Hamlet的HTML语法是包含完整开放和闭合标签以及所有正常HTML属性的纯HTML。是的,您可以省略关闭标签并使用id和class属性的快捷方式。但是你不必这样做,你可以继续编写纯HTML。
不仅如此,HTML模板可以存储在单独的文件中,就像Snap的模板库Heist一样。
Java脚本模板(julius)是纯JavaScript文件,也存储在单独的文件中。
CSS模板确实具有不同的语法,但是Yesod的最新版本现在也提供了纯CSS语法。
如果您选择Heist,您将没有类型安全的URL。
在Heist中,HTML模板每次都会从硬盘中读取。Yesod直接将所有模板编译到可执行文件中,不需要从硬盘中读取任何文件。因此响应速度更快。你可以自己看看基准测试。
在Yesod中,你可以创建良好配合的小部件。Snap根本不处理小部件。你将不得不自己设计。