【问题标题】:JavaFX ... what things make my Controller slow?JavaFX ...是什么让我的控制器变慢了?
【发布时间】:2020-04-09 04:54:18
【问题描述】:

我正在构建一个 JavaFX-应用程序。我知道它正在使用反射,并且反射可能没有我在代码中构建 UI 时那么快。

所以,

  1. 如何设计我的控制器以保持开销,即由反射引起的开销尽可能小?
  2. 带有/不带有@FXML-Annotation 的方法的大小是否重要?
  3. 当我在控制器方法中调用另一个没有@FXML 的方法时,有什么区别吗?喜欢:
    @FXML
    public void handleButtonClick(){
       doStuff();
    }
    public void doStuff(){
       //implement the logic
    }
  1. 如果这样做,我应该在控制器类中还是在另一个类中实现这些方法?

P.S.我很抱歉一次问了这么多问题,但我在互联网上找不到这些具体的东西:(

【问题讨论】:

  • 您的应用程序是否遇到过缓慢的情况?通常,在需要之前尝试优化事物并不是一个好主意。它可以增加代码的复杂性并带来相应的回报。如果您遇到缓慢的问题,开始调查的好地方是使用分析器。
  • 我会说,根据我自己的分析经验,设置表格视图单元格的样式(更改颜色)是迄今为止我的应用程序中最昂贵的事情。创建一个可以在不使用样式的情况下更改其颜色的自定义单元格类修复了该问题。
  • 通常只有实现本身会让你的 controller 变慢。调用方法确实会引入一些开销,但不是很重要;除非您调用这些方法的频率无论如何都会冻结您的应用程序,否则您可能看不到任何区别。如果您询问是什么让 fxml 加载过程变慢:有很多因素(提供 fxml 的输入流的速度、类加载器的速度、fxml 中使用的类数量、fxml 的大小、控制器类等(大小指成员数))...
  • 使用分析器而不是假设..

标签: java user-interface javafx fxml


【解决方案1】:
  1. 将任何与 UI 无关的进程排除在主线程之外。

  2. 如果从设计的角度来看是有意义的。

这不是您可以单击以使您的应用程序运行良好的神奇按钮。在项目开始时担心这些类型的事情会导致项目难以管理。相反,如果您想到更好的方法或遇到问题,只需深入研究,不要害怕重构。

当您不可避免地遇到问题时,不要害怕使用调试器进入 JavaFX 代码。这是了解框架内部结构的最佳方式。

【讨论】:

  • 我想有一件事要警告 JavaFX 用户避免这种情况在教程中很常见......选择绑定。在某些极端情况下它们是有用的,但通常是错误的并且使用反射非常差。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2011-05-21
  • 2011-04-26
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多