Advanced

Claude Code के साथ WebAssembly Implementation

Claude Code का उपयोग करके webassembly implementation सीखें। Practical tips और code examples शामिल हैं।

WebAssemblyintegrationको Claude Code से実現する

WebAssembly(Wasm)はブラウザでネイティブに近い速度で動作するバイナリ形式 है।画像processing、暗号計算、ゲームロジック आदिCPU負荷の高いprocessingをWebでfastに実行でき है।Claude Code का उपयोग करके、Wasmmoduleのcreate सेintegration तकスムーズに進められ है।

Rust सेWasmmodule create

> Rustで画像フィルタprocessingのWasmmoduleをबनाओ。
> wasm-packでbuildする構成にして。
# Cargo.toml
[package]
name = "image-filter"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
wasm-bindgen = "0.2"
js-sys = "0.3"
web-sys = { version = "0.3", features = ["console"] }
// src/lib.rs
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn grayscale(pixels: &mut [u8]) {
    for chunk in pixels.chunks_exact_mut(4) {
        let gray = (0.299 * chunk[0] as f64
            + 0.587 * chunk[1] as f64
            + 0.114 * chunk[2] as f64) as u8;
        chunk[0] = gray;
        chunk[1] = gray;
        chunk[2] = gray;
        // chunk[3] はアルファ値、उसまま
    }
}

#[wasm_bindgen]
pub fn blur(pixels: &mut [u8], width: u32, height: u32, radius: u32) {
    let src = pixels.to_vec();
    let r = radius as i32;

    for y in 0..height as i32 {
        for x in 0..width as i32 {
            let mut r_sum = 0u32;
            let mut g_sum = 0u32;
            let mut b_sum = 0u32;
            let mut count = 0u32;

            for dy in -r..=r {
                for dx in -r..=r {
                    let nx = (x + dx).clamp(0, width as i32 - 1) as usize;
                    let ny = (y + dy).clamp(0, height as i32 - 1) as usize;
                    let idx = (ny * width as usize + nx) * 4;
                    r_sum += src[idx] as u32;
                    g_sum += src[idx + 1] as u32;
                    b_sum += src[idx + 2] as u32;
                    count += 1;
                }
            }

            let idx = (y as usize * width as usize + x as usize) * 4;
            pixels[idx] = (r_sum / count) as u8;
            pixels[idx + 1] = (g_sum / count) as u8;
            pixels[idx + 2] = (b_sum / count) as u8;
        }
    }
}

JavaScript सेWasmを読み込む

> Wasmmoduleをブラウザで読み込んで、
> Canvas画像に適用するprocessingを書いて。
// src/wasm-loader.ts
import init, { grayscale, blur } from '../pkg/image_filter';

export async function initWasm() {
  await init();
}

export async function applyGrayscale(canvas: HTMLCanvasElement) {
  const ctx = canvas.getContext('2d')!;
  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const pixels = new Uint8Array(imageData.data.buffer);

  grayscale(pixels);

  ctx.putImageData(imageData, 0, 0);
}

export async function applyBlur(
  canvas: HTMLCanvasElement,
  radius: number
) {
  const ctx = canvas.getContext('2d')!;
  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const pixels = new Uint8Array(imageData.data.buffer);

  blur(pixels, canvas.width, canvas.height, radius);

  ctx.putImageData(imageData, 0, 0);
}

buildとbundlesettings

# wasm-packでbuild
wasm-pack build --target web --out-dir pkg

# Viteでのsettings
# vite.config.ts
// vite.config.ts
import { defineConfig } from 'vite';
import wasm from 'vite-plugin-wasm';
import topLevelAwait from 'vite-plugin-top-level-await';

export default defineConfig({
  plugins: [wasm(), topLevelAwait()],
  build: {
    target: 'esnext',
  },
});

performance比較

JavaScriptとWasmのprocessing速度を比較してみましょう。

// benchmark.ts
async function benchmark() {
  const size = 1920 * 1080 * 4;
  const pixels = new Uint8Array(size);
  crypto.getRandomValues(pixels);

  // JavaScript版
  const jsStart = performance.now();
  grayscaleJS(pixels);
  const jsTime = performance.now() - jsStart;

  // Wasm版
  const wasmStart = performance.now();
  grayscale(pixels);
  const wasmTime = performance.now() - wasmStart;

  console.log(`JS: ${jsTime.toFixed(2)}ms`);
  console.log(`Wasm: ${wasmTime.toFixed(2)}ms`);
  console.log(`速度比: ${(jsTime / wasmTime).toFixed(1)}x`);
}

Full HDsizeの画像processingでは、Wasm版がJavaScript版の3〜5倍fastに動作する場合があり है।

Summary

WebAssemblyをutilizationすれば、Webアプリのperformanceを大幅に向ऊपरでき है।Claude Code का उपयोग करके、RustやAssemblyScriptのcodegenerate सेJavaScriptintegration तकefficiently進められ है।performanceoptimizationガイドRustdevelopmentभी reference के लिए देखें。

WebAssemblyके details के लिएMDN WebAssemblyガイドをदेखें。

#Claude Code #WebAssembly #Wasm #Rust #performance