代码之家  ›  专栏  ›  技术社区  ›  Albert

Java小程序在web中的可用性

  •  3
  • Albert  · 技术社区  · 14 年前

    在我们大学的在线学习项目中,我们使用Java小应用程序来展示Ilias学习单元中的一些交互式内容(例如一些交互式函数绘图或一些简单的问答系统或其他交互式元素以及它们的任何组合)。

    我们决定使用Java是因为我们想要一个开放的解决方案(而HTML5在当时并不真正可用,Flash过去是,现在也不是一个真正的选项)。

    几年后的今天,我真的感觉到Java并不能真正用于web。主要是因为很多问题,我并不是真的能够解决所有的情况。

    当时遇到的问题:

    • Java小程序需要很长时间才能加载。即使它是一个非常简单的小程序,有时也需要大约一分钟的时间来加载。为什么?Java框架真的比Qt或其他框架大得多吗?还是虚拟机这么大?还是虚拟机太慢了?

    • 有时内存使用率非常高(但并非总是如此)。

    • 加载包含多个小程序的页面时,浏览器崩溃和/或多个小程序无法正确加载的可能性非常高。而且整个操作系统变得非常慢。

    • 有时,javaapplet不在浏览器X中加载,而是在浏览器Y中加载。在重新加载或重新启动浏览器/系统时单击几次后,该行为可能会切换。例如,在Firefox中加载applet的可能性似乎更高(也不总是,但大多数情况下,至少在重新加载时单击一两次之后),而在Chrome上加载applet的可能性更小(但如果幸运的话,它有时也能工作)。根据系统的不同,可能是不同的浏览器工作得最好。尽管从来没有一款浏览器可以完美地工作。我们测试过的所有系统(不同的Linux发行版,32位和64位,WindowsXP/Vista/7,MacOSX)都存在这种行为。

    • 有时,当我切换到另一个选项卡并返回时,小程序保持空白。有时它至少需要很长时间才能再次出现。

    我们遇到这些问题的一些例子:

    如果您看一下这些示例,什么是Java的好的替代解决方案?我在最近的浏览器中考虑了HTML+JavaScript(如果我们告诉用户应该使用 WebKit

    7 回复  |  直到 4 年前
        1
  •  2
  •   Peter Mortensen icecrime    4 年前

    Java小程序在本世纪初是现代的。目前只有少数网站使用Java小程序,这可能是浏览器支持不理想的原因之一。

    从我的浏览器卡住之前看到的情况来看,你的小程序似乎只是在画各种图表。

    我建议尝试一个现代的JavaScript库,它专注于绘制图表: http://javascript.open-libraries.com/utilities/chart/20-best-javascript-charting-and-plotting-libraries/

    或者,如果您需要比库提供的选项更多的选项,并且您不太关心跨浏览器兼容性,则可以使用<画布>HTML5元素和 SVG -除了InternetExplorer之外的所有浏览器都有不错的支持。

    如果您不要求图表是交互式的,您可以在服务器上使用PHP、Ruby、Python、Java或其他任何东西呈现它们,并将它们作为普通图像发送到浏览器。

    MathML 或者可能由服务器脚本动态渲染的普通图像。

        2
  •  4
  •   Peter Mortensen icecrime    4 年前

    试试WebStart。基本上,它允许您从一个web链接启动一个独立的Java应用程序。所有的资源都缓存在客户端,因此后续的启动要快得多。

    就外观而言,如果希望它独立于操作系统,可以显式地设置它。

        3
  •  4
  •   Peter Mortensen icecrime    4 年前

    Java小程序需要很长时间才能加载。甚至 有时需要大约一分钟的时间 Java框架要大得多 比Qt或其他框架更好?或者是

    这完全取决于它运行的机器、web浏览器和Java版本。我加载了您链接到的第一个示例页面,虽然加载确实需要一些时间,但它同时在一台双核机器上加载了19个applet。

    铬)变得很慢 加载小程序,但 之后。

    多个小程序无法正确加载。 而且整个操作系统 非常慢。

    我没有注意到小程序加载方式的问题,除了一次加载很多小程序之外。

    同样,这不仅依赖于Java,还依赖于加载它的浏览器。

    它会消耗掉所有的CPU。即使我关闭了所有的小程序标签。我必须退出浏览器才能解决这个问题。

    离开页面时,小程序并不总是被卸载。小程序的 stop() destroy() 方法和小程序的实际卸载可能不匹配。

    javaapplet在上看起来不同 每个系统。UI控件是 完全不同,而且行为也不同 稍有不同。有时是因为 完全是自己的东西。阿尔索 字体大部分是不同的,通常 支持不同的Unicode子集 角色。这是一个真正的问题 因为我们经常使用Unicode 我们有很多数学符号 对一些人来说。同样的字体 每个系统的尺寸都不一样 报道说这篇文章是为了 杰拉贝尔)。我已经解决了这个问题 通过在 有时我会收到这些报告 即使有独特的字体。

    Java有两个基本的applet类。首先是旧式的 java.applet.Applet javax.swing.JApplet 班级。

    前者使用 AWT 对于渲染,它构建在系统的本机小部件上。后者使用 Swing 对于渲染,应默认为跨平台金属(海洋)主题。

    How to Make Applets

        4
  •  2
  •   Peter Mortensen icecrime    4 年前

    applet,您还可以加载JVM,与JavaScript引擎不同,JVM在启动浏览器时不加载。JVM启动时间不长于JavaScript启动时间,但最后一个时间隐藏在浏览器启动时间中。。。 有一个名为Jigsaw的项目,它将当前的JVM拆分为多个模块,并使这个初始启动更快,并且计划用于java9。

    2. "浏览器(或者至少是Chrome中的选项卡)在加载小程序时速度非常慢,但在加载之后也是如此。”

    3. "Java小程序在每个系统上看起来都不一样。”

    如果你使用 Swing look and feel 它没有。就我个人而言,我更喜欢现代光轮的外观和感觉。

    How to set Nimbus look and feel in main

    4. "有时内存使用率非常高(但并非总是如此)。”

    如果要分析您的代码,您可能正在进行过多的内存分配。阅读对象池和其他减少内存碎片的方法。这通常是小程序编码错误的标志,而不是小程序技术的问题。

    5. "加载包含多个小程序的页面时,浏览器崩溃和/或多个小程序无法正确加载的可能性非常高。而且整个操作系统变得非常慢。”

    6. "有时,Java小程序不在浏览器X中加载,而是在浏览器Y中加载”

    这是一个已知的问题,现代浏览器往往不支持插件好。这实际上和第五个问题是一样的。当您只在页面上使用一个applet时,这个问题就更为罕见了。

    8. "它会消耗掉所有的CPU。即使我关闭了所有的小程序标签。我必须退出浏览器才能解决此问题。”

    AWT / 摇摆 如果你不在它的窗口资源耗尽时关闭它,你会感到非常震惊。。。

    在某些方面您是对的,而在另一些方面您有问题,因为您使用的是过时的库(如AWT或带有默认外观的Swing),或者不了解如何管理applet生命周期。

        5
  •  1
  •   Peter Mortensen icecrime    4 年前

    Google Web Toolkit ). 它允许您编写Java代码并将其转换为JavaScript。

        6
  •  1
  •   Peter Mortensen icecrime    4 年前

    如果说移动访问很重要的话,那么HTML+JavaScript选项确实是你唯一可以选择的,因为它是所有苹果设备、Android设备以及许多其他支持它的移动设备中最广泛支持的实现技术 WebKit . (我们以这种方式实现了德克萨斯州主页上的所有交互。 http://www.txstate.edu/ )

    如果你同意只提供桌面服务, Flash Steve Jobs' protestations 与此相反我们的一些学习模块是基于这种技术构建的。

        7
  •  0
  •   Peter Mortensen icecrime    4 年前

    从描述中可以看出,这些问题中的大多数都与代码的编写方式有关。不幸的是,在我们的行业,质量是罕见的。

    如果小程序需要一分钟才能加载,则可能是DNS问题或其他与I/O相关的问题(它是否依赖于网络、文件或CPU?)

    在现代计算机上,内存使用率很难有效地测量。飞机的头顶 JRE 在一台拥有千兆字节内存的现代计算机上,内存应该相当小。

    如果你使用 Swing ,然后是损益表;F可以设置为跨平台(Metal、Nimbus或下载的实现)。