【AI面试临阵磨枪-98】前端如何展示多模态流式输出:文字打字机 + 图片渐进 + 音频播放?
一、面试题目前端如何实现多模态流式输出文字打字机效果、图片渐进加载、音频实时播放说明技术方案、流式协议、渲染时序、难点处理。二、知识储备整体方案后端通过SSE / WebSocket推送多模态流式分片文本块、图片URL、音频片段前端分类型解析、按顺序渲染实现文字逐字输出 图片渐进展示 音频边推边播。流式数据格式JSON 分片{type:text,content:你好} {type:image,url:xxx.png} {type:audio,chunk:base64} {type:end}1. 文字打字机效果流式文本实现方案协议SSEServer‑Sent Events/ WebSocket 接收流式 text chunk前端逐字符追加使用定时器/requestAnimationFrame实现打字机动画支持换行、Markdown 实时解析渲染核心代码JSconst textEl document.getElementById(answer); function typeWrite(textChunk) { let i 0; const interval setInterval(() { if (i textChunk.length) clearInterval(interval); textEl.innerHTML textChunk[i]; }, 20); }优化大量文本直接追加不逐字卡顿支持停止、清空、断点续打2. 图片渐进加载流式图片实现方案后端推送图片 URL / base64前端先占位使用loadinglazy模糊渐进加载图片加载期间显示骨架屏加载完成淡入展示多图按流式顺序依次渲染不乱序核心代码function renderImage(url) { const img new Image(); img.style.opacity 0; img.style.transition opacity 0.5s ease; img.onload () img.style.opacity 1; img.src url; container.appendChild(img); }渐进优化先缩略图占位 → 高清图渐进懒加载不阻塞文字输出3. 音频实时流式播放实现方案两种主流base64 分片 MediaSource 流式解码播放实时语音后端返回完整音频 URL前端 播放流式音频核心MediaSourceconst mediaSource new MediaSource(); const audio new Audio(); audio.src URL.createObjectURL(mediaSource); mediaSource.addEventListener(sourceopen, () { const buffer mediaSource.addSourceBuffer(audio/mpeg); // 不断追加音频分片 });要点音频分片顺序严格不可乱序支持边推边播、暂停、重播4. 多模态时序控制关键难点多模态必须按后端推送顺序串行渲染文字没打完不渲染下一张图图片加载完成后继续输出文字音频在对应节点触发播放实现异步队列 Promise 串行调度const taskQueue []; async function runQueue() { while(taskQueue.length) await taskQueue.shift(); }5. 协议选型对比SSE适合文本、图片推送简单稳定单向流式WebSocket适合音频实时双向通信延迟更低音频优先 WebSocket图文优先 SSE三、破局之道面试升华前端多模态流式输出核心是后端流式分片推送 → 前端解析多类型消息 → 串行队列控制时序 → 文字打字机、图片淡入、音频流式解码。关键难点是多模态渲染顺序、异步调度、音频实时解码、流畅动画兼顾体验与性能。30秒口述精简版前端通过SSE/WebSocket接收多模态流式数据文字用逐字符打字机动画图片渐进淡入骨架屏音频用MediaSource 分片解码实时播放通过异步任务队列保证多模态渲染顺序不乱。