JavaScript est connu principalement pour développer des applications front-end. Il a été initialement pensé pour cela.
En 2009, Ryan Dahl, créé un logiciel capable d'éxécuter du JavaScript coté serveur, il nomme cet executable Node.js.
Node.js permet aux développeurs d'utiliser JavaScript pour écrire des scripts côté serveur, ce qui ouvre de nouvelles possibilités pour le langage. Grâce à Node.js, il est possible de créer des serveurs web, des API, et même des applications en temps réel avec des performances élevées.
Comment Fonctionne le JavaScript coté serveur ?
Node.js fonctionne en utilisant le moteur JavaScript V8 de Google, qui est écrit en C++. Ce moteur permet d'exécuter du code JavaScript coté back-end. Voici une explication détaillée du fonctionnement de Node.js :
- Moteur V8: Node.js utilise le moteur V8 pour compiler le code JavaScript en code machine natif. V8 est un moteur JavaScript open-source développé par Google, écrit en C++, qui est également utilisé dans le navigateur Google Chrome. Grâce à V8, Node.js peut exécuter du code JavaScript très rapidement.
- Modèle d'E/S non bloquant: Node.js utilise un modèle d'entrée/sortie (E/S ou I/O) non bloquant et événementiel. Cela signifie que les opérations d'E/S (comme la lecture de fichiers, les requêtes réseau, etc.) ne bloquent pas l'exécution du programme. Au lieu de cela, elles sont gérées de manière asynchrone, ce qui permet à Node.js de gérer un grand nombre de connexions simultanées avec une grande efficacité.
- Libuv: Node.js utilise une bibliothèque appelée libuv (Lien de la librairie), écrite en C, pour gérer les opérations d'E/S asynchrones. Libuv fournit une boucle d'événements et des fonctionnalités pour les opérations de système de fichiers, les opérations réseau, les minuteries, etc. Cela permet à Node.js de gérer les opérations d'E/S de manière non bloquante.
- API de Node.js: Node.js fournit une API riche et puissante pour les développeurs, leur permettant d'interagir facilement avec le système de fichiers, les réseaux, les processus, etc. Cette API est construite en utilisant des modules C++ et JavaScript, offrant ainsi des performances élevées et une grande flexibilité.
Le JavaScript coté serveur est-il le même que coté client ?
Il éxiste pas mal de différences entre le JavaScript coté serveur et le JavaScript coté client :
- Environnement d'exécution: Le JavaScript côté client s'exécute dans le navigateur web, tandis que le JavaScript côté serveur s'exécute sur un serveur, généralement avec Node.js.
- Accès aux API: Le JavaScript côté client a accès aux API du navigateur, telles que le DOM, les événements utilisateur, et les API de stockage local. Le JavaScript côté serveur a accès aux API du système d'exploitation, telles que le système de fichiers, les réseaux, et les processus.
- Sécurité: Le JavaScript côté client est exposé aux utilisateurs finaux, ce qui le rend vulnérable aux attaques telles que le cross-site scripting (XSS). Le JavaScript côté serveur est exécuté sur le serveur, ce qui le rend moins vulnérable aux attaques directes, mais il doit toujours être sécurisé contre les attaques telles que l'injection SQL.
- Performances: Le JavaScript côté client dépend des ressources de l'appareil de l'utilisateur (CPU, mémoire, etc.), tandis que le JavaScript côté serveur peut tirer parti des ressources du serveur, qui sont généralement plus puissantes et évolutives.
- Gestion de l'état: Le JavaScript côté client gère principalement l'état de l'interface utilisateur et les interactions utilisateur, tandis que le JavaScript côté serveur gère l'état de l'application, les sessions utilisateur, et les interactions avec les bases de données et autres services backend.
Pour approfondir vos connaissances en cybersécurité, mettez-vous à l'épreuve avec le quizz issu de CISSP, la meilleure certification au monde.
Tester mes connaissances
Points d'attentions spécifiques sur Node.js
Il faut garder en tête que Node.js s'execute sur un serveur, par conséquent, une infrastructure dont vous payez le coût.
Fuite de mémoire
Les fuites de mémoire peuvent être un problème majeur lors du développement avec Node.js. Il est crucial de surveiller l'utilisation de la mémoire et de s'assurer que toutes les ressources sont correctement libérées après utilisation. Les fuites de mémoire peuvent entraîner une dégradation des performances et, dans le pire des cas, provoquer des plantages du serveur. Utilisez des outils de profilage et de surveillance pour détecter et corriger les fuites de mémoire.
Optimisation des ressources
Optimiser l'utilisation des ressources est essentiel pour garantir que votre application Node.js fonctionne de manière efficace et évolutive. Cela inclut la gestion des connexions réseau, l'utilisation de la mémoire, et la répartition de la charge de travail. Utilisez des techniques telles que le clustering pour tirer parti des processeurs multicœurs et mettre en cache les résultats des opérations coûteuses pour améliorer les performances.
Ne jamais faire confiance aux utilisateurs
Lorsque vous développez des applications côté serveur, il est crucial de ne jamais faire confiance aux données fournies par les utilisateurs. Validez et assainissez toujours les entrées utilisateur pour éviter les attaques telles que l'injection SQL, le cross-site scripting (XSS), et d'autres vulnérabilités. Implémentez des mesures de sécurité robustes pour protéger votre application et les données des utilisateurs.
Exemple de validation d'input avec mongo-sanitize
import { MongoClient } from "mongodb";
import sanitize from "mongo-sanitize";
const uri = "your_mongodb_connection_string";
const client = new MongoClient(uri);
export async function findUser(input: string) {
try {
await client.connect();
const database = client.db("your_database_name");
const collection = database.collection("your_collection_name");
// Sanitize the input to prevent injection attacks
const sanitizedInput = sanitize(input);
const query = { username: sanitizedInput };
const user = await collection.findOne(query);
return user;
} finally {
await client.close();
}
}
J'espère que cet article vous a plu.