Rust -> asm.js & webassembly - Calcul haute performance pour WEB
Nous l'avons déjà dit pour javascript, le monde front-end est en constante évolution. Dans les articles précédents, je vous ai dit d'utiliser Emscripten pour compiler le langage C puis d'utiliser asm.js et WebAssembly. Cette méthode peut grandement améliorer la vitesse d'exécution du code front-end, mais en raison du projet lui-même. Le langage C manque de nombreuses fonctionnalités avancées, et de nombreuses fonctions ne peuvent pas être implémentées, ce qui n'est pas propice au développement de projets à grande échelle, et le C++ est trop complexe, j'ai donc finalement choisi d'utiliser Rust.
Au début, je ne savais pas si je devais utiliser Go, Rust ou Swift, mais plus tard, j'ai découvert que Go ne prend actuellement pas en charge la compilation vers WebAssembly. Swift devrait pouvoir le prendre en charge, car ce sont tous des compilateurs créés avec. LLVM, mais je n'ai trouvé aucune bonne information. Il semble que je doive compiler LLVM moi-même pour prendre en charge https://stackoverflow.com/questions/46572144/compile-. assemblage rapide vers le Web. De plus, j'aime beaucoup certaines fonctionnalités de Rust. J'ai entendu dire que Rust est très compliqué et ressemble plus à Scala et Haskell. Cependant, je connais assez bien Scala et j'ai appris quelques mots de Haskell, j'ai donc décidé d'essayer Rust.
https://github.com/ChristianMurphy/compile-to-web Ici vous pouvez voir les langages qui peuvent actuellement être compilés dans WebAssembly.
PS, asm.js et Rust sont tous deux créés par Mozilla.
Installer l'outil de gestion Rust rustup
rustup est utilisé pour installer et gérer les outils liés à Rust, notamment le compilateur rustc, l'outil de gestion de packages cargo, etc., et prend en charge l'installation de différentes versions comme stable, bêta, nocturne, etc. En plus de basculer entre différentes versions, similaire à nvm.
curl https://sh.rustup.rs -sSf | sh
Installer le compilateur Emscripten Rust
Utilisez rustup pour installer la dernière version d'essai (version nocturne) :
rustup toolchain add nightly rustup target add wasm32-unknown-emscripten --toolchain nightly
Installez cmake
Selon à la plateforme Choisissez par vous-même :
brew install cmake # MacOS, brew sudo port install cmake # MacOS, MacPorts sudo apt-get install cmake # Debian Linux
Installer Emscripten
Référez-vous à l'article précédent, ou exécutez directement la commande suivante :
wget https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz tar -xvf emsdk-portable.tar.gz cd emsdk-portable ./emsdk update ./emsdk install sdk-incoming-64bit
Cette étape prend un longtemps, on dit que cela prend plus de 2 heures. Je suis sorti manger avec des amis après avoir exécuté la commande, donc je ne connais pas l'heure précise.
Ajoutez le chemin suivant à PATH :
~/emsdk-portable ~/emsdk-portable/clang/fastcomp/build_incoming_64/bin ~/emsdk-portable/emscripten/incoming
Exécutez emcc -v sur le terminal pour vérifier si l'installation a réussi.
Exécutez Rust avec Webpack
Créez un nouveau projet hybride Rust/Javascript :
cargo new webasm --bin --vcs none cd webasm npm init rustup override set nightly
Installez Webpack, webpack-dev-server, rust-wasm-loader,
npm i -D webpack webpack-dev-server rust-wasm-loader
Ajouter un script package.json :
{ "name": "webasm", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "compile": "webpack --progress", "serve": "http-server", "start": "webpack-dev-server --content-base ./build" }, "author": "magicly", "license": "ISC", "devDependencies": { "http-server": "^0.10.0", "rust-wasm-loader": "^0.1.2", "webpack": "^3.6.0", "webpack-dev-server": "^2.8.2" } }
Créer un nouveau fichier index.html dans le répertoire de build :
<!DOCTYE html> <html> <head> <title>Hello WebAssembly</title> </head> <body> < div id="container"></div> <script src="/bundle.js"></script> </body> </html>
Configurer webpack.config.js :
module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: dirname + '/build', }, module: { rules: [ { test: /\.rs$/, use: { loader: 'rust-wasm-loader', options: { <span>// The path to the webpack output relative to the project root</span> path: '', release: true <span>// 没有的话性能巨差,差不多只有1/10</span> } } } ] }, <span>// The .wasm 'glue' code generated by Emscripten requires these node builtins,</span> <span>// but won't actually use them in a web environment. We tell Webpack to not resolve those</span> <span>// require statements since we know we won't need them.</span> externals: { 'fs': true, 'path': true, } }
Créez un nouveau fichier src/main.rs et ajoutez les fonctions que nous voulons appeler depuis js :
fn main() { println!("Hello, world!"); } <span>// Functions that you wish to access from Javascript</span> <span>// must be marked as no_mangle</span> #[no_mangle] pub fn add(a: i32, b: i32) -> i32 { return a + b }
Créez un nouveau src/index.js et écrivez du code pour charger le module WebAssembly :
const wasm = require('./main.rs') wasm.initialize({ noExitRuntime: true }).then(module => { <span>// Create a Javascript wrapper around our Rust function</span> const add = module.cwrap('add', 'number', ['number', 'number']) console.log('Calling rust functions from javascript!') console.log(add(1, 2)) })
Ensuite, exécutez npm start et visitez http://localhost:8080/ pour voir l'effet de l'appel du code rust. Il prend également en charge les mises à jour à chaud. Vous pouvez directement modifier le code rust, l'enregistrer et voir le dernier effet sur la page.
J'ai testé le code dans l'article précédent. Il ne faut que plus de 300 ms pour exécuter directement le code optimisé pour la rouille. Code C, mais avec Il faut en fait environ 2,7 secondes pour exécuter wasm. Je ne sais pas s'il n'est pas configuré correctement, ou si c'est parce que Rust compilé dans wasm n'est pas optimisé correctement. Le support de Rust pour WebAssembly n'est pas encore particulièrement mature. Vous pouvez suivre https://github.com/rust-lang/rust/issues/38804 pour suivre.
De plus, Rust a un package https://crates.io/crates/webplatform, qui peut être utilisé pour faire fonctionner DOM, mais je ne peux pas l'utiliser actuellement (ça semble inutile)
L'article ci-dessus est J'espère que ma compréhension du calcul haute performance dans le WEB pourra aider les amis dans le besoin. J'ai déjà publié deux articles "asm.js & webassembly-Le calcul haute performance du WEB" et "asm.js & webassembly". -Le calcul haute performance du WEB". 》, les amis dans le besoin peuvent y jeter un œil.
Lecture recommandée :
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

JavaScript est un langage de programmation largement utilisé dans le développement Web, tandis que WebSocket est un protocole réseau utilisé pour la communication en temps réel. En combinant les puissantes fonctions des deux, nous pouvons créer un système efficace de traitement d’images en temps réel. Cet article présentera comment implémenter ce système à l'aide de JavaScript et WebSocket, et fournira des exemples de code spécifiques. Tout d’abord, nous devons clarifier les exigences et les objectifs du système de traitement d’images en temps réel. Supposons que nous disposions d'un appareil photo capable de collecter des données d'image en temps réel.
