延续是Seaside的一个关键特征吗?

时间:2011-11-26 15:10:27

标签: smalltalk continuations seaside

我正在努力加快Smalltalk / Seaside的速度。根据{{​​3}},“Seaside是一个基于延续的Web应用程序框架”。来自Java背景我不太熟悉continuation。

经过一些阅读后,我了解到继续用于维护状态,从而保存了进程的快照,可以在以后恢复(类似于将Windows置于休眠模式)。

这与使用“后退”按钮的Seaside最相关? 使用代码块和“回调”与使用延续不同?

我还试图衡量在Seaside实际使用延续的当前重要性。我很困惑,因为许多在线参考Seaside提到延续作为关键和定义功能。但是,我也发现一些文章提到在Seaside中使用continuation并不常用,实际上并不是一个关键特性。

非常感谢任何有用的输入让我直截了当!

2 个答案:

答案 0 :(得分:13)

最初,Seaside使用延续来模拟页面之间的流程并启用后退按钮。对于Seaside 3.0来说,这已不再适用:延续是完全可选的。如果您想使用call: and answer: functionality,可以加载包Seaside-Flow。否则,Seaside申请将继续免费。

无论哪种方式,作为Web应用程序开发人员,您永远不会看到(或看到)延续。它们是一个很好地封装在Seaside Web框架中的实现细节。

更新:在Seaside 3.0中,每个请求都存储一个特殊对象来管理状态。此对象会记住该时间点的应用程序状态。如果用户回来,该对象知道如何恢复和恢复以前的状态。在这方面,此对象的行为类似于延续(该类称为WASessionContinuation),但其实现方式非常不同。它不会对执行堆栈进行快照,而只会对应用程序状态的特定部分进行快照(这就是消耗更少内存的原因)。此外,它不会像延续那样跳转到代码中,而是在模板方法WASessionContinuation>>#handleRequest中实现必要的恢复逻辑(这就是它更快的原因)。

答案 1 :(得分:2)

Continuations是一个关键功能,表明可以使用正确的抽象进行Web编程。这使得Seaside能够吸引那些喜欢在正确的抽象层面上进行开发的智能开发人员,从而提高生产力。但这并不意味着它对您的Web应用程序是正确的抽象,也不意味着它在Seaside中是必需的。