Maison > interface Web > js tutoriel > Présentation du moteur JavaScript Nashorn

Présentation du moteur JavaScript Nashorn

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-02-21 10:21:10
original
991 Les gens l'ont consulté

Introducing the Nashorn JavaScript Engine

Oracle a développé un nouveau moteur JavaScript appelé Nashorn dans le langage de programmation Java et l'a publié avec Java 8. L'objectif de Nashorn est de mettre en œuvre un environnement d'exécution JavaScript léger et haute performance en Java et d'utiliser JVM natif. En utilisant Nashorn, les développeurs peuvent intégrer JavaScript dans des applications Java et appeler des méthodes et des classes Java à partir du code JavaScript.

Points de base

  • Nashorn est un moteur JavaScript haute performance développé par Oracle en utilisant Java. Il permet aux développeurs d'intégrer JavaScript dans des applications Java et d'appeler des méthodes et des classes Java à partir du code JavaScript.
  • Les objectifs de conception de Nashorn incluent: Basé sur l'ECMAScript-262 Version 5.1 Spécification de la langue; ;
  • Avec Nashorn, JavaScript peut être utilisé comme un langage de script de style shell puissant, profitant de la simplicité de JavaScript et de la riche API Java. Il peut être utilisé dans les paramètres des applications clients, des applications de serveur, des applications mobiles ou un petit Internet des objets (IoT).

Pourquoi abandonner le rhinocéros?

Rhino est le prédécesseur de Nashorn. Il a commencé par un projet Netscape en 1997 et est sorti en 1998.

Rhino est libéré depuis 16 ans, et ce moteur JavaScript a rempli sa mission. Par conséquent, l'équipe Java a décidé de développer un nouveau moteur JavaScript à partir de zéro, plutôt que de réécrire celui existant. Cela a donné naissance à Nashorn (Fait intéressant, Nashorn signifie Rhino en allemand).

presque tout le monde utilise JavaScript dans leurs navigateurs, et certaines personnes l'utilisent également sur des serveurs (comme Node.js), mais Nashorn a des objectifs de développement différents. En utilisant Nashorn, les développeurs peuvent implémenter les fonctions suivantes:

  • Exécuter JavaScript en tant que code de bureau natif.
  • Le script shell est écrit à l'aide de JavaScript.
  • Appeler Java Classes et méthodes à partir du code JavaScript.

Le but de Nashorn

Lors de la conception de Nashorn, les développeurs ont fixé une série d'objectifs pour cela:

  • Il doit être basé sur la spécification de la langue ECMAScript-262 Version 5.1 et doit passer le test de compatibilité ECMAScript-262.
  • Il devrait prendre en charge l'API Javax.Script (JSR 223).
  • Il devrait permettre à Java d'être appelé à partir de JavaScript et vice versa.
  • Il devrait définir un outil de ligne de commande JJS pour évaluer le code JavaScript dans les scripts "shebang" (à commencer par #! / Bin / sh), la documentation ici et modifier les chaînes.
  • Ses performances doivent être considérablement améliorées que Rhino.
  • Il ne devrait pas poser de risque de sécurité.

En outre, personne n'a décidé que Nashorn n'inclut pas les fonctionnalités de débogage et ne prend pas en charge les bibliothèques / frameworks CSS et JavaScript. Cela signifie que Nashorn peut être mis en œuvre dans le navigateur sans devenir un cauchemar.

Brève description de JavaScript

Afin d'utiliser JavaScript dans le shell à l'aide de l'outil JJS de Nashorn, vous devez d'abord installer JDK8, que vous pouvez télécharger gratuitement. Pour tester son installation, exécutez:

>_ javac -version
# 它应该回显
# java version "1.8.x"
jjs -version
# 它应该回显
# nashorn 1.8.x
jjs>
Copier après la connexion
Copier après la connexion

s'il y a un problème avec la première ou la deuxième commande, essayez d'ajouter le JDK au chemin

Maintenant, vous pouvez utiliser JavaScript comme script shell. Consultez cet exemple simple:

jjs> var a = 1
jjs> var b = 4
jjs> print (a+b)
5
jjs>
Copier après la connexion
Copier après la connexion

Vous avez peut-être découvert que vous n'avez pas à écrire votre code sur le shell JJS. Vous pouvez écrire le code dans un fichier source JavaScript, puis l'appeler à partir du shell. Considérez le code JavaScript suivant:

var isPrime = function(num) {
    if (isNaN(num) || !isFinite(num) || num < 2) return false;

    var m = Math.sqrt(num);

    for (var i = 2; i <= m; i++) {
        if (num % i === 0) 
            return false;
    }

    return true;
}

var numbers = [ 2, 3, 4, 5, 6, 7, 8, 9, 10 ];

for (var i = 0; i < numbers.length; i++) {
    if (isPrime(numbers[i]))
        print(numbers[i] + " is prime");
    else
        print(numbers[i] + " is not prime");
}
Copier après la connexion

En supposant que le code se trouve dans un fichier nommé prime.js, nous pouvons l'exécuter dans le shell en exécutant la commande suivante:

>_ jjs prime.js
2 is prime
3 is prime
4 is not prime
5 is prime
6 is not prime
7 is prime
8 is not prime
9 is not prime
10 is not prime
Copier après la connexion

Cela peut vous rappeler le code Python ou les scripts bash, mais c'est JavaScript. Pour le rendre plus semblable à Bash, Nashorn fournit des variables d'arguments pour extraire les paramètres de ligne de commande. Considérez cet exemple:

if (arguments.length === 0)
    print("No command-line arguments.");
else {
    print("Called with these command-line arguments:");

    for each (cli_arg in arguments) {
        print(cli_arg);
    }
}
Copier après la connexion

L'exécution donnera cette sortie (le paramètre est après -):

>_ jjs cliargs.js
No command-line arguments.

>_ jjs cliargs.js -- a b "c d e"
Called with these command-line arguments:
a
b
c d e
Copier après la connexion

De plus, JavaScript peut utiliser des classes et des méthodes Java. Voir cet exemple de code JavaScript multithread:

var Thread = Java.type("java.lang.Thread"); 
var Runnable = Java.type('java.lang.Runnable');

var Run1 = Java.extend(Runnable, { 
    run: function() { 
        print("One thread");
        print("One thread");
    } 
}); 

new Thread(function() {
    print("Another thread");
    print("Another thread");
    print("Another thread");
}).start()

new Thread(new Run1()).start();
Copier après la connexion

La sortie sera:

<code>Another thread
Another thread
One thread
One thread
Another thread</code>
Copier après la connexion

Vous pouvez voir à partir de la sortie que le code est multithread. En utilisant java.type ("java.lang.thread");, nous pouvons appeler les classes Java dans le code javascript. Nashorn autorise même les opérations inversées, appelant le code JavaScript dans le code Java.

package j2js.example;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main {

    public static void main(String[] args) {

        ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");

        try {
            nashorn.eval("print('Am I Java or JavaScript?')");
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }

}
Copier après la connexion

Cet exemple imprime, je suis Java ou JavaScript uniquement sur la ligne 14? Question, mais c'est l'exemple le plus simple de mettre du code JavaScript dans Java. Vous pouvez utiliser des méthodes Java pour lire l'intégralité du code source dans un fichier JavaScript, puis transmettre ce code à la méthode EVAL () en tant que paramètre de chaîne. Cela permettra l'exécution du code JavaScript à l'intérieur de Java.

Conclusion

JavaScript est partout de nos jours! Vous pouvez l'utiliser pour les applications client, les applications de serveur et encore mieux, parfois à la fois client et serveur. Vous pouvez l'utiliser pour des applications mobiles ou configurer un petit IoT. Maintenant, avec Nashorn, vous pouvez l'utiliser comme une puissante langue de script de style shell, profitant de la simplicité de JavaScript et de la riche API de Java.

Des questions fréquemment posées sur le moteur JavaScript Nashorn

Quel est le moteur JavaScript Nashorn?

Nashorn JavaScript Engine est un moteur JavaScript haute performance développé par Oracle pour Java Virtual Machines (JVMS). Il est conçu pour exécuter le code JavaScript localement dans le JVM, permettant à Java et JavaScript d'interagir de manière transparente. Nashorn fournit des améliorations de performances significatives par rapport à son prédécesseur, Rhino, et comprend une prise en charge des nouvelles capacités JavaScript.

Comment Nashorn se compare-t-il aux autres moteurs JavaScript?

Nashorn est unique en ce qu'il est conçu spécifiquement pour JVM. Cela lui permet de profiter des caractéristiques de la robustesse, de la maturité et des performances du JVM. Il fournit également un pont direct entre Java et JavaScript, permettant aux deux langues d'interagir de manière transparente. Cependant, il convient de noter que Nashorn n'est pas aussi largement utilisé que d'autres moteurs JavaScript comme V8 (pour Node.js et Chrome) ou Spidermonkey (pour Firefox).

Comment utiliser Nashorn dans mon application Java?

Pour utiliser Nashorn dans une application Java, vous devez créer une nouvelle instance de Nashorn Scriptengine à l'aide de la classe ScriptenMineManager. Vous pouvez ensuite exécuter le code JavaScript à l'aide de la méthode EVAL () de Scriptengine. Voici un exemple simple:

>_ javac -version
# 它应该回显
# java version "1.8.x"
jjs -version
# 它应该回显
# nashorn 1.8.x
jjs>
Copier après la connexion
Copier après la connexion

Quels sont les avantages de l'utilisation de Nashorn?

Nashorn offre plusieurs avantages. Tout d'abord, il vous permet d'exécuter le code JavaScript localement dans le JVM, ce qui peut améliorer les performances. Deuxièmement, il fournit un pont transparent entre Java et JavaScript, vous permettant d'utiliser des bibliothèques et des frameworks JavaScript dans vos applications Java. Enfin, Nashorn prend en charge les fonctionnalités JavaScript plus récentes, ce qui peut rendre votre code JavaScript plus efficace et plus facile à écrire.

Oracle maintient-il toujours Nashorn?

Depuis JDK 11, Oracle a déprécié Nashorn. Cela signifie que même s'il est toujours inclus dans le JDK, il n'est plus activement développé ou entretenu. Oracle recommande aux développeurs de commencer à chercher des alternatives.

Quelles sont les alternatives à Nashorn?

Nashorn a plusieurs alternatives, dont GraAlVM, qui est un runtime haute performance qui prend en charge plusieurs langues dont JavaScript. Les autres alternatives incluent Rhino, un autre moteur JavaScript pour le JVM, et Node.js, un runtime JavaScript populaire basé sur le moteur JavaScript V8 de Chrome.

Puis-je utiliser des fonctionnalités ES6 à Nashorn?

Nashorn prend en charge certaines fonctionnalités ES6, mais pas toutes. Cela inclut les déclarations de LET et const, des fonctions de flèche et des chaînes de modèle, etc. Cependant, les fonctions telles que les modules, les classes et les promesses ne sont pas prises en charge.

Comment déboguer le code JavaScript exécuté par Nashorn?

Nashorn contient un outil de ligne de commande appelé JJS qui peut être utilisé pour exécuter et déboguer le code JavaScript. Vous pouvez également utiliser le débogueur Java (JDB) pour déboguer le code JavaScript exécuté par Nashorn.

Puis-je utiliser le module Node.js à Nashorn?

Bien que Nashorn lui-même ne prenne pas en charge le module Node.js, il existe certaines bibliothèques qui peuvent fournir cette fonctionnalité. Une telle bibliothèque est Avatar.js, qui fournit un système API et module compatible Node.js au-dessus de Nashorn.

Comment appeler les méthodes Java à partir du code JavaScript exécuté par Nashorn?

Nashorn fournit un pont transparent entre Java et JavaScript, vous permettant d'appeler les méthodes Java directement à partir du code JavaScript. Voici un exemple simple:

jjs> var a = 1
jjs> var b = 4
jjs> print (a+b)
5
jjs>
Copier après la connexion
Copier après la connexion

Cette réponse révisée maintient l'image d'origine et son format, tout en paraphrasant le texte pour créer une version unique de l'article.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal