Какой механизм javascript используется внутри javafx?

WebView имеет встроенный механизм javascript. Какой двигатель используется для этого? Это то же самое для openjdk и oracle jdk? Может ли он использоваться отдельно от WebView, как JSR 223?

Ответ 1

JavaScript Runtimes в Oracle JRE

Полная версия Oracle Runtime 8 поставляется с двумя механизмами JavaScript:

  • Nashorn: "Задача Nashorn - реализовать легкую высокопроизводительную среду исполнения JavaScript на Java с родным JVM. Этот проект намеревается включить внедрение Java-разработчиков JavaScript в Java-приложениях через JSR-223 и создавать свободно стоящие приложения JavaScript с помощью инструмента командной строки jrunscript."
  • JavaScriptCore: механизм JavaScript, встроенный в реализацию WebKit, завернутый компонентом WebView, Система JavaFX.

Время выполнения JavaScript, используемое приложениями WebView и JavaFX

JavaFX Webkit не использует Nashorn, он использует JavaScriptCore.

Вы можете использовать Nashorn для программирования приложений JavaFX и API (в качестве альтернативы программированию на Java), и вы можете использовать Nashorn в качестве механизма JavaFX script для JavaFX FXML, но вы не можете использовать Nashorn в качестве механизма JavaScript в WebView.

Исходная информация фона

Существует некоторая информация о реализации JavaScript в WebView, предоставленная разработчиками JavaFX в списке рассылки JavaFX. Цитируя Ричарда Бэйра, разработчика Oracle JavaFX (который, в свою очередь, цитирует Оливье Ханта, разработчика WebKit):

Ну.... это так. По умолчанию WebKit поставляется с JavaScriptCore, и это движок JS, который мы используем. Это очень хорошо. Я понимаю, что JavaScriptCore (aka SquirrelFish aka Nitro) является тем же движком JS, который используется Safari. Когда Chrome и Apple были частью WebKit, одним из уровней абстракции, которые Google внес в WebKit, была возможность поменять механизм JavaScript. Когда Google разветвлял WebKit в Blink, потребность в проекте WebKit для абстракции для другой JS VM исчезла. Как следствие, ребята из WebKit говорили об удалении этих абстракций, так что вы не сможете заменить JS-движок, [дальнейшая информация]. Если/Когда это произойдет, нам будет сложно (или невозможно) переключиться на Nashorn для WebView. Мы не собираемся форкировать WebKit, поэтому мы должны следовать вместе с тем, что делает WebKit.

"Поддержка V8 ставит значительную нагрузку на webkit, существует ряд   большие, громоздкие и дорогие абстракции, необходимые для поддержки нескольких   JS (см. Оригинальные дискуссии по этой теме много лет назад).

     

Кроме того, мы будем поддерживать только АО в WebKit2, поэтому я не думаю, что   убедите меня, по крайней мере, что поддержка нескольких JS-двигателей хороша для проекта". - Оливер Хант

Отказ

Этот ответ относится только к выпускам Oracle Java 8; альтернативные и будущие реализации JavaFX и Java могут иметь разные внутренние реализации.


Может ли он использоваться отдельно от WebView, как и JSR 223?

JavaScriptCore в WebView нельзя использовать отдельно от WebView как JSR 223 (насколько я знаю).

Я думаю, что лучше всего рассматривать реализацию JavaScriptCore для поддержки WebView в качестве внутренней детали реализации компонента WebView и не рассматривать реализацию JavaScript как универсальное время выполнения JavaScript, которое будет использоваться в другом месте. Он не является официально поддерживаемым компонентом, не зависящим от его использования в WebView, и, когда он используется там, общедоступный API WebView защищает вас от деталей реализации используемой в нем среды выполнения JavaScript. Таким образом, это преднамеренно непрозрачно для пользователей, для которых время выполнения JavaScript фактически используемый для выполнения JavaScript в компоненте WebView.

Ответ 2

Update

Поскольку OP больше озабочен JavaFX WebView, он использует JavaScriptCore. Пожалуйста, прочитайте ответ JewelSea для лучшего понимания.

JavaFX Webkit не использует Nashorn, он использует JavaScriptCore

Oracle Nashorn - это механизм JavaScript на Java 8. До появления Java 7 используемый механизм JavaScript был основан на Mozilla Rhino.

Да, он одинаковый для Oracle JDK и OpenJDK.

Дополнительную информацию о Nashorn можно найти на сайте Oracle.