Ф
Фронтендим
@frontendino565 подп.
214просмотров
37.9%от подписчиков
24 апреля 2025 г.
Score: 235
Недавно использовал WebAssembly для оптимизации работы с изображениями в браузере. Это позволило ускорить обработку в 8-10 раз по сравнению с чистым JavaScript. Вот пример интеграции Wasm-модуля в React:import React, { useState, useEffect } from 'react'; function ImageProcessor() { const [wasmModule, setWasmModule] = useState(null); const [image, setImage] = useState(null); const [processedImage, setProcessedImage] = useState(null); // Загрузка Wasm-модуля useEffect(() => { async function loadWasm() { try { // Импортируем модуль, скомпилированный из C/C++/Rust const module = await import('../wasm/image_processor'); setWasmModule(module); } catch (error) { console.error('Failed to load WASM:', error); } } loadWasm(); }, []); // Обработка изображения const processImage = async () => { if (!wasmModule || !image) return; // Получаем данные изображения const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); canvas.width = image.width; canvas.height = image.height; ctx.drawImage(image, 0, 0); // Получаем массив пикселей const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); // Вызываем WASM-функцию const result = wasmModule.applyBlur(imageData.data, canvas.width, canvas.height, 5); // Обновляем canvas с результатом const resultCanvas = document.createElement('canvas'); resultCanvas.width = canvas.width; resultCanvas.height = canvas.height; const resultCtx = resultCanvas.getContext('2d'); const resultImgData = new ImageData( new Uint8ClampedArray(result), canvas.width, canvas.height ); resultCtx.putImageData(resultImgData, 0, 0); setProcessedImage(resultCanvas.toDataURL()); }; return ( <div> <input type="file" accept="image/*" onChange={(e) => { const file = e.target.files[0]; const reader = new FileReader(); reader.onload = (event) => { const img = new Image(); img.onload = () => setImage(img); img.src = event.target.result; }; reader.readAsDataURL(file); }} /> {image && <button onClick={processImage}>Обработать</button>} <div className="images"> {image && <img src={image.src} alt="Оригинал" />} {processedImage && <img src={processedImage} alt="Обработанное" />} </div> </div> ); } Когда стоит использовать WebAssembly: — Для интенсивных вычислений (графика, аудио, видео) — Для игр и симуляций в браузере — Когда производительность JavaScript недостаточна — При портировании существующих библиотек на C/C++/Rust WebAssembly — отличный инструмент для оптимизации критичных к производительности задач! Подписывайся на @frontendino
214
просмотров
2964
символов
Нет
эмодзи
Нет
медиа

Другие посты @frontendino

Все посты канала →
Недавно использовал WebAssembly для оптимизации работы с изо — @frontendino | PostSniper