JavaScript est un thread unique. Qu'est-ce que cela signifie et qu'est-ce qu'un fil ?
Un thread est un contexte d'exécution, c'est-à-dire toutes les informations dont un processeur a besoin pour exécuter un flux d'instructions. Donc, normalement, les applications JS sont contenues dans un thread.
Imaginez dans votre application Web que vous devez traiter une longue tâche, le Dom qui est la page Web en langage courant va geler car l'interprète doit terminer la tâche avant de passer à la suivante. Il ne peut pas traiter deux tâches en même temps, donc quand il aura terminé la longue tâche, il pourra alors mettre à jour le Dom et revenir à la vie. La solution pour éviter cela est d'utiliser un web worker.
Un web worker est un script JS exécuté indépendamment en arrière-plan. Les travailleurs Web sont souvent capables d'utiliser plusieurs processeurs.
Dans ce cas, nous allons voir comment utiliser un web worker en réaction.
Installer :
Amusons-nous.
Pour pouvoir communiquer avec le travailleur, nous allons utiliser onMessage et postMessage().
Maintenant, nous allons écrire notre fonction fibonacci qui sera exécutée par le web worker.
//fibo.worker.js
// eslint-disable-next-line import/no-anonymous-default-export
export default () => {
// eslint-disable-next-line no-restricted-globals
self.onmessage = (message) => {
const nbr = message.data;
var n1 = 0;
var n2 = 1;
var somme = 0;
for (let i = 2; i <= nbr; i++) {
somme = n1 + n2;
n1 = n2;
n2 = somme;
}
const result = nbr ? n2 : n1;
postMessage(result);
};
};
// eslint-disable-next-line import/no-anonymous-default-export
// eslint-disable-next-line no-restricted-globals
//woker-builder.js
export default class WorkerBuilder extends Worker {
constructor(worker) {
const code = worker.toString();
const blob = new Blob([`(${code})()`]);
return new Worker(URL.createObjectURL(blob));
}
}
import WorkerBuilder from './worker/woker-builder';
import Worker from './worker/fibo.worker';
instance = new WorkerBuilder(Worker);
componentDidMount() {
instance.onmessage = (message) => {
if (message) {
console.log("Message from worker", message.data);
}
};
}
<button onClick ={() => instance.postMessage(5)}>
Send Message
</button>
import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
import WorkerBuilder from "./worker/woker-builder";
import FiboWorker from "./worker/fibo.worker";
const instance = new WorkerBuilder(FiboWorker);
class App extends Component {
componentDidMount() {
instance.onmessage = (message) => {
if (message) {
console.log("Message from worker", message.data);
}
};
}
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Web worker in React
</p>
<button
onClick={() => {
instance.postMessage(5);
}}
>Send Message</button>
</header>
</div>
);
}
}
export default App;
Si nous approfondissons la console dans l'onglet sources, nous pouvons voir en haut à droite, nous avons deux threads, le principal et le travailleur fibo nommés f18f83d0–6ed0–484e-86f1–6d1938793085
J'espère que vous avez appris quelque chose de cette conférence, merci pour votre lecture.
En 2022, je suis passé d'un rôle non technique à la cybersécurité. J'ai eu mon premier diplôme en langue allemande, je sais que vous êtes choqué et curieux de savoir comment j'ai pu réussir la transition, eh bien c'est juste arrivé.
Introduction Un accident vasculaire cérébral est une urgence médicale qui peut frapper n'importe qui à tout moment. Elle survient lorsque le flux sanguin vers une partie du cerveau est perturbé, entraînant une perte soudaine de la fonction cérébrale.
« Il me protégera quand je serai en danger. Il me cachera dans sa tente.
Quand tu grandis, on a tendance à te dire que le monde est comme il est et que ta vie est juste de vivre ta vie à l'intérieur du monde, sans jamais risquer ta vie, juste suivre un chemin tracé et mourir à la fin, et essayer de ne pas cogner trop les murs. Mais c'est une vie très limitée.
Vous pouvez être un enquêteur OSINT, un joueur CTF ou simplement quelqu'un qui reçoit des appels de spam. Quelqu'un qui essaie de vérifier le numéro que vous avez vu dans une publicité.
J'étais récemment sur Linkedin, le plus grand réseau social professionnel au monde, et j'ai trouvé des messages de designers indépendants que je suis et qui ont attiré mon attention. Ils ont tous posté des photos d'avions, sur la plage avec leurs ordinateurs portables, de piscines et de bureaux avec une vue imprenable.