本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
Debug 笔记 <Apache Tapestry和Apache Wicket之间的区别?>
提问
Apache Wicket(wicket.apache.org/)和 Apache Tapestry(wicket.apache.org/)
都是面向组件的Web框架
与Apache Foundation的基于条纹的基于动作的框架相反。
两者都允许您从Java组件中构建应用程序。他们俩看起来都和我很相似。
这两个框架之间有什么区别?有人在这两者上都有经验吗?
具体来说:
- 它们的性能如何?可以自定义多少状态处理,可以无状态地使用它们?
- 它们的组件模型有什么区别?
- 您会为哪些应用程序选择什么?
- 它们如何与
Guice,Spring,JSR 299集成?
编辑:我已经阅读了两个的文档,并且我都使用了它们。
阅读文档并不能充分回答这些问题,而是一段时间内使用这些问题的经验,
例如,如何在高性能站点上以无状态模式使用Wicket。谢谢。
回答一
我看到的一些相关差异:
-
Tapestry使用半静态页面结构,您可以在其中使用条件和循环来实现动态行为。小门是完全动态的;您可以动态地加载组件,在运行时替换它们,等等。其结果是Tapestry更易于优化,而Wicket的使用更加灵活。 -
两种框架的执行效率大致相同,但是
Wicket依赖于服务器端存储(默认情况下,会话中的当前页面以及“第二级缓存”中的过去页面,默认情况下是文件系统中的临时文件)。如果这让您感到困扰,请考虑一下您希望在高峰时间有多少个并发会话,并以每个会话大约100kb的速度进行计算(这可能偏高)。这意味着您可以大致支持2GB的20k并发会话。之所以说15k,是因为您还需要该内存来存储其他内容。当然,存储状态的一个缺点是它只能与会话亲缘关系一起很好地工作,因此在使用Wicket时这是一个限制。 -
Wicket的目标是最大程度地支持静态类型,而Tapestry则更多地是关于节省代码行。因此,使用Tapestry,您的代码库可能会更小,这对于维护很有用;而对于Wicket,您的代码库是静态类型的,这使得使用IDE导航和使用编译器进行检查变得更加容易,这也对维护有利。
到目前为止,我已经读过几次,人们认为Wicket可以通过继承工作很多。我想强调,您可以选择。组件有一个层次结构,但是Wicket也通过IBehavior之类的结构(在上面构建了Wicket的Ajax支持)也支持组合。
回答二
Wicket的目标是尝试使Web开发类似于桌面GUI。他们设法以牺牲内存使用量(HTTPSession)的方式做得很好。
Tapestry 5的目标是制作非常优化的(针对CPU和内存)面向组件的Web框架。
对我来说,最大的陷阱是“ Wicket支持无状态组件!” 参数“ Wicket内存不足”。
尽管Wicket确实支持无状态组件,但它们并不是“ Wicket开发的重点”。
我的建议:
- 当页面结构非常动态并且您可以负担每个用户花费
10-200 Kbs的HttpSession内存(这些是粗略数字)时,请使用Wicket。 - 如果需要更有效地利用资源,请使用
Tapestry 5。
回答三
我认为Wicket是使用起来更简单的框架。
另外,Wicket允许通过IDE的热代码替换系统重新加载类。
这是Wicket运行当前正在运行的应用程序类的修改版本所需的全部操作。
通常的限制适用于热代码替换,例如必须以调试模式(Eclipse)运行并且不能更改类的结构方面(即,类名,更改方法签名等)。
文章翻译自Stack Overflow :stackoverflow.com/questions/6…