Vaadin 7 - 良好的框架但不适用于我的项目。

12

Vaadin是一个很棒的框架,用于开发丰富多彩的Web应用程序非常有用。然而,我对其中一些意外情况感到非常沮丧。我知道要创建这样一个框架,同时可以编码客户端和服务器端组件非常困难,但它确实节省了我的时间。

但是,我不知道为什么我在服务器环境中遇到通信错误、会话过期提示以及应用程序有时会冻结。然而,在我的本地环境中一切都完全正常。

请问有人能告诉我为什么会出现这些问题吗?

问题:

  1. 通信问题?(http://dev.vaadin.com/ticket/8466)
  2. 会话过期消息?(我将会话设置为在300分钟后过期。但有时提前过期,但不是每次都发生)
  3. 应用程序有时会冻结。(我可以点击按钮,但没用..没有操作..唯一的方法是重启)
  4. 在IE中表现非常糟糕。(我知道对于所有Web应用程序来说都很常见。但是,与其他浏览器相比,IE完全不行。
  5. 懒加载在treetable中对我非常有帮助。
  6. ICEPush附加组件,做得非常好。但是,一段时间后它会在控制台中给我一个异常。( https://vaadin.com/forum#!/thread/234493/4528542)
  7. 如果我在一个浏览器中执行任何操作,则会在另一个浏览器(应用程序的另一个实例)中反映出来。(http://dev.vaadin.com/ticket/10208)
  8. 上下文菜单附加组件:易于实现,非常棒。但是,在慢速网络上连续右击会给我异常。https://vaadin.com/forum#!/thread/119996/4455717
  • 烦人的异常消息。为什么要在用户界面上显示它?
  • 我已经在论坛上花费了大部分时间,我真的从你们这些人那里得到了很好的支持。但是,我不想要。

    我怀疑以下原因可能导致上述问题。

    1. 我的Vaadin服务器在英国,API服务器在美国,这是通信问题的原因吗?
    2. 我从Util类的函数构建组件。这是我列表上第7个问题的原因吗?像这样, ComponentsBuilder.buildVerticalLayout();

    2
    针对您的怀疑之一:您可以考虑在Vaadin服务器上创建一个代理服务,该服务异步地将请求转发到API服务器。 - Atmocreations
    1
    你的Vaadin应用程序是否在集群上运行?这可能是问题#2的原因。这可能是由于会话复制问题导致的。 - Andrew
    2个回答

    6

    这里有很多问题,我没有答案,但是我有一些有见地的想法。

    我曾经开发过一个Vaadin 6应用程序并看到其他三个开发的网络应用程序。它们都失败了,原因各不相同,但我可以和你分享一些我的简陋的见解:

    • 某些Vaadin行为(至少6.x版本)难以自定义,例如会话过期。
    • 生成的HTML非常沉重且难以自定义。通常,对于我的团队来说,实现所需的视觉效果是不可能的。
    • 我认为Vaadin的设计相当差(很多转换/使用Object而不是泛型)。此外,在我谦虚的意见中,源代码质量也不高。
    • 内置小部件有时由于缺乏真实世界的例子和缺陷而难以使用。
    • 在浏览器之间的可移植性是一个神话(尤其是IE,但您已经发现了这一点)
    • 简单的Vaadin应用程序可能会占用大量CPU资源

    还要记住,如果错误地使用Vaadin(不是在单页应用程序中),则会变成噩梦,但这并不是框架本身的问题。对于任何其他工具也是如此。


    1
    我也有过类似的经历,所以我从 vaadin 切换到了 wffweb。但是,对于你提出的第二点,我想说的是 vaadin 的最新版本产生的 HTML 比以前的版本要少。 - RRadley

    5

    Vaadin 8 & 10

    这些年发生了很多变化。


    通讯问题?(http://dev.vaadin.com/ticket/8466)

    该票据已迁移到 GitHub 作为 Issue 2178。现在标记为关闭状态。似乎是 Tomcat 和浏览器中的错误,现已修复。

    这是由某些浏览器的 cookie 处理引起的 bug,当使用 Tomcat 7 并且在应用程序名称后没有使用尾随斜杠时(即 http://host/app 而不是 http://host/app/),会出现该问题。

    您可以通过将上下文属性 sessionCookiePathUsesTrailingSlash 设置为 false 来解决此问题。


    会话过期的消息?(我将会话设置为在300分钟后过期。但有时会在此之前过期,但不是每次都发生)

    我没有尝试过这个方法,只是猜测,看起来我们在这里为用户显示会话过期消息的获取器是 com.vaadin.server.SystemMessages 类,它有两个方法 getSessionExpiredCaption()getSessionExpiredMessage()

    对于 SystemMessages 类的描述如下:

    使用 VaadinService.setSystemMessagesProvider(SystemMessagesProvider) 进行自定义。

    也许我们可以通过实现SystemMessagesProvider接口来覆盖会话过期消息。 (我不确定所有这些是如何工作的。)
    应用程序有时会冻结。(我可以点击按钮,但没有用..没有反应..唯一的方法是重新启动)
    我不知道这个问题。我发现Vaadin 7在生产中非常稳定,可以连续运行数月而不出现故障。目前我正在开发的Vaadin 8也似乎非常可靠。
    Web浏览器、Web服务器、Java Servlet容器(如Tomcat和Jetty)等的实现近年来已经显著改进和演变。
    如果用户的Web浏览器与Vaadin服务器失去联系,他们应该看到显示的消息。

    IE的性能非常差。(我知道所有Web应用程序都普遍存在这个问题。但是,与其他浏览器相比,我的应用程序在IE上完全崩溃了。有人请和盖茨谈谈停止IE吗... :-(

    确实,IE是一系列糟糕的浏览器,存在许多问题。

    幸运的是,有人确实和盖茨/鲍尔默/纳德拉谈过。Internet Explorer产品线已经终止。被Microsoft Edge取代。这是一个巨大的改进。他们似乎有了新精神,并且会全力支持和遵循Web标准。

    请查看CanIUse.com网站,以查看哪些版本的浏览器支持HTML、CSS等功能。


    树形表格中的延迟加载对我非常有帮助。

    TreeTable 小部件在 Vaadin 8 中已被 TreeGrid 取代。这个新小部件与惊人的新 Grid 小部件共享技术。

    还可以查看关于 分层数据 的手册页面。它讨论了从后端延迟加载数据。

    这里有 Alejandro Duarte 撰写的关于 Vaadin 8 中延迟加载的 一篇文章


    ICEPush插件很好地执行了它的工作。但是,过一段时间后,在控制台上会给我抛出异常。(https://vaadin.com/forum#!/thread/234493/4528542)

    推送技术现在在Vaadin中得到支持,并作为内置功能。令人惊讶的是,你只需要在你的应用程序中添加一个 @Push 注解即可。

    Vaadin中的Push实现基于流行、强大且经过充分验证的库Atmosphere

    请查看手册页面服务器推送

    请注意,推送技术在最近几年得到了显著改进,特别是WebSocket。新的HTTP/2标准进一步促进了其发展。请确保使用较新版本的Web容器,例如Tomcat和Vaadin,以及Web浏览器。


    如果我在一个浏览器中执行任何操作,则会在另一个浏览器(应用程序的另一个实例)中反映出来。(http://dev.vaadin.com/ticket/10208
    请参见该票证的更新。似乎不是问题。
    看起来传递页面的方式,如:new Notification(message).show(ui.getPage()) 解决了这个问题...

    上下文菜单插件:易于实现且效果很棒。但是,在网络慢的情况下多次右键单击会导致异常。https://vaadin.com/forum#!/thread/119996/4455717

    我不能对此发表意见,只能说:

    • 该帖子上有很多讨论。
    • 该组件现已作为Vaadin框架的一部分集成。

    建议再试一次。(我没有使用过它。)


    烦人的异常信息。在UI界面上显示它有什么必要吗?

    不确定你的意思。

    如果你指的是Java异常,如果应用程序对该用户发生错误,我不知道还有什么其他的处理方式。

    如果你指的是会话通信问题,你应该知道Vaadin的最新版本更积极地尝试维护和重新建立问题连接。

    我暂时找不到链接,但这已经被记录下来了。也许在他们的博客里可以找到。


    我的Vaadin服务器在英国,API服务器在美国,这会导致通信问题吗?
    当然,在互联网上维护会话可能会有问题。
    我可以告诉你的是,使用Push更新每分钟显示的数据的应用程序,在威斯康星州US的colo中部署我的服务器,并成功地从佛罗里达、西雅图、加拿大甚至香港的用户运行良好。
    如果你的网络不可靠,那么像Vaadin这样活跃的“喋喋不休”的架构就不合适。

    1
    很高兴看到Vaadin有这么多的改进。点赞,这样答案对其他人也会有用。 - Gugan

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接