ECG数据可视化:从解析到动态渲染,分布式秒杀系统设计方案。

张开发
2026/4/16 9:43:47 15 分钟阅读

分享文章

ECG数据可视化:从解析到动态渲染,分布式秒杀系统设计方案。
下载压缩文件并解压从服务器或本地下载包含心电图数据的压缩文件如ZIP格式。使用浏览器内置的fetchAPI或axios库发起请求获取文件通过JSZip库解压import JSZip from jszip; fetch(ecg_data.zip) .then(response response.blob()) .then(blob JSZip.loadAsync(blob)) .then(zip zip.file(ecg.json).async(text)) .then(data { const ecgData JSON.parse(data); renderECG(ecgData); });解析ECG文件格式常见的ECG文件格式包括JSON、CSV或WFDB。假设使用JSON格式结构可能如下{ sample_rate: 500, lead_names: [I, II, III], samples: [[0.1, 0.2, 0.15], ...] }解析时需注意采样率和多导联数据的处理function parseECG(json) { return { sampleRate: json.sample_rate, leads: json.lead_names.map((name, i) ({ name.samples.map(sample sample[i]) })) }; }初始化WaveSurfer.js安装wavesurfer.js库npm install wavesurfer.js创建波形容器并初始化import WaveSurfer from wavesurfer.js; const container document.createElement(div); document.body.appendChild(container); const wavesurfer WaveSurfer.create({ container, waveColor: #4a3b8a, progressColor: #2a1b5a, cursorColor: #1a0b4a, minPxPerSec: 100, fillParent: true });加载并渲染ECG数据将解析后的ECG数据转换为WaveSurfer支持的格式。单导联示例function renderECG(ecgData) { const lead ecgData.leads[0]; // 选择第一导联 const duration lead.data.length / ecgData.sampleRate; wavesurfer.load(, lead.data, { duration, sampleRate: ecgData.sampleRate }); }多导联同步显示实现多导联同步浏览需创建多个WaveSurfer实例并绑定事件const leadsContainer document.getElementById(leads-container); const wavesurfers ecgData.leads.map(lead { const div document.createElement(div); leadsContainer.appendChild(div); const ws WaveSurfer.create({ container: div, height: 80, waveColor: #4a3b8a }); ws.load(, lead.data, { duration: lead.data.length / ecgData.sampleRate, sampleRate: ecgData.sampleRate }); return ws; }); // 同步所有实例 wavesurfers.forEach(ws { ws.on(seek, () { const time ws.getCurrentTime(); wavesurfers.forEach(instance instance.seekTo(time)); }); });添加交互功能实现缩放和测量工具// 缩放控制 document.getElementById(zoom-in).addEventListener(click, () { wavesurfers.forEach(ws { ws.zoom(ws.params.minPxPerSec 50); }); }); // 添加测量标记 wavesurfer.on(click, (time) { const marker document.createElement(div); marker.className marker; marker.style.left ${time * wavesurfer.getDuration() * 100}%; container.appendChild(marker); });性能优化建议处理长时程ECG数据时采用分块加载function loadChunkedData(ws, fullData, chunkSize 10000) { for (let i 0; i fullData.length; i chunkSize) { ws.load(, fullData.slice(i, i chunkSize), { duration: fullData.length / sampleRate, sampleRate }); } }样式定制通过CSS增强可视化效果.ecg-container { border: 1px solid #ddd; margin: 20px; overflow-x: auto; } .lead-display { margin-bottom: 10px; position: relative; } .marker { position: absolute; top: 0; width: 1px; height: 100%; background: red; }异常处理添加错误处理逻辑确保稳定性fetch(ecg_data.zip) .catch(err { console.error(下载失败:, err); showErrorModal(无法加载ECG数据); }) .then(response { if (!response.ok) throw new Error(HTTP错误); return response.blob(); });share.pywnwtr.cn/Article/details/836261.HKMshare.kxbaekm.cn/Article/details/671074.HKMshare.aklgtug.cn/Article/details/559484.HKMshare.kwcnwrx.cn/Article/details/611345.HKMshare.mugicfd.cn/Article/details/881432.HKM

更多文章