返回演示 / Back to demo

React 集成

在 React 里,wasm runtime 最好放在应用级别,而不是组件级别。推荐形态是 provider,或者一个稳定的模块级单例,只加载一次并在整棵组件树之间共享。

推荐结构

Provider 草图

const runtime = createVgmstreamRuntimeManager({
  loadModule: createBrowserModuleLoader({
    scriptUrl: '/assets/vgmstream_wasm_min.js',
    wasmUrl: '/assets/vgmstream_wasm_min.wasm',
  }),
});

const VgmstreamRuntimeContext = createContext(runtime);

export function VgmstreamRuntimeProvider({ children }) {
  return (
    <VgmstreamRuntimeContext.Provider value={runtime}>
      {children}
    </VgmstreamRuntimeContext.Provider>
  );
}

为什么这样更稳

wasm 资源体积不小,若把初始化散落到组件内部,很容易反复触发重复下载、重复实例化和难以解释的性能波动。单一 runtime 能让冷启动和热路径的指标更清晰,也更容易做缓存命中分析。

常见反模式

清理建议

切换曲目后,要在 effect cleanup 或拥有当前解码结果的控制器层统一回收旧 blob URL。