Программа JavaFX загружается слишком медленно - PullRequest
0 голосов
/ 11 ноября 2019

Первое появление окна при запуске программы JavaFX занимает слишком много времени - ~ 700 мс. Это заметная задержка.

Может ли JavaFX загружаться быстрее?


Что у меня есть:

У меня есть простой проект HelloWorldот Maven архетип org.openjfx:javafx-archetype-simple:0.0.3. Я только добавил дополнительный класс с PSVM, который вызывает PSVM класса, который расширяет Application class:

public class MainLauncher {
    public static void main(String... args) {
        System.out.println("MainLauncher...");
        App.main(args);
    }
}

public class App extends Application {

    @Override
    public void start(Stage stage) {...}

    public static void main(String[] args) {
        System.out.println("App...");
        Application.launch();
    }
}

MainLauncher необходим для создания Uber-JAR с maven-shade-plugin.

Я использовал запись экрана (60 кадров в секунду), чтобы проверить, сколько времени занимает запуск приложения.

Когда я запускаю java -jar app.jar или java -p ${JARS_AND_FOLDER_WITH_CLASSES} -m com.company/com.company.MainLauncher, другими словами - когда я запускаю MainLauncher класс, я получаю:

  • в 0 мс Я запускаю приложение
  • в ~ 30-110 мс Я вижу консольный журнал
  • в ~ 600-750 мс Я вижу окноначинает рисовать
  • + 30 мс для окна заканчивает рисовать *

Когда я запускаю App класс, поведение немного другое, но общее время остается тем же. В этом случае я вижу журнал "App..." в консоли позже:

  • в 0 мс. Я запускаю приложение
  • в ~ 550 мс. Я вижу журнал консоли
  • в ~ 600-750 мс. Я вижу, что окно начинает рисовать
  • + 30 мс для оконного окрашивания *

* Оконная окраска занимает 2-3 кадра (для60 FPS): 1. Строка заголовка + границы 2. Фон 3. Содержимое

1 Ответ

0 голосов
/ 11 ноября 2019

В последних версиях Java возможно ускорение. Ключ - обмен данными между классами приложений. Совместное использование данных класса приложения Это можно активировать с помощью аргументов командной строки команды java. В основном он хранит все данные инициализации где-нибудь, и когда приложение запускается во второй раз, вся процедура инициализации может быть пропущена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...