为什么 localStorage 的同步读写会阻塞主线程?
围绕“为什么 localStorage 的同步读写会阻塞主线程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释同进程访问磁盘/数据库导致 JS 线程等待。
离线应用专题面试题第 2 页,显示第 51–100 题,共找到 121 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“为什么 localStorage 的同步读写会阻塞主线程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释同进程访问磁盘/数据库导致 JS 线程等待。
围绕“如何向浏览器申请永久性存储(persistent storage)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 persist() 的调用和用户授权与自动授予条件。
围绕“如何检测浏览器当前可用存储空间和已用配额”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕用 Storage API 的 estimate() 返回 usage 和 quota。
围绕“当浏览器存储配额超限时,IndexedDB 会抛出什么错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出错误类型和监听 onabort/onerror。
本文解释sessionStorage生命周期与标签页的关系:刷新保留数据,关闭标签页清除;新标签页默认独立,window.open或复制标签页可继承初始快照。区分复制、新开、刷新三种操作对sessionStorage的具体影响并给出工程判断。
围绕“Storage Buckets API 能解决哪些存储配额管理问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明创建多个桶并为每个设置配额。
本题解释 storage 事件不触发原因:其设定是通知其他同源文档,改动页面自身不接收;同时说明 localStorage 和 sessionStorage 的事件范围差异,以及实现跨页同步时的注意事项。
围绕“浏览器对第三方 iframe 的 localStorage 和 Cookie 如何分区”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答访问可能被阻止或返回空,不深入特定浏览器策略。
围绕“当 localStorage 被清除时,storage 事件的 key 属性是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须明确整个 clear() 会触发 key 为 null 的事件。
围绕“Service(服务)Worker 的生命周期包括哪几个阶段?各阶段对应哪些事件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕重点在 install/activate/fetch 等事件。
围绕“Service(服务)Worker 如何与打开的页面进行双向通信”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕通过 postMessage 与 Client 交互。
围绕“Service(服务)Worker 的 fetch 事件如何拦截并处理页面发出的网络请求”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 respondWith 的方法与缓存策略的基础,不深入到 Cache API。
围绕“当 Service(服务)Worker 的脚本文件更新时,浏览器如何决定是否启用新版本”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较脚本内容变化与 skipWaiting。
讲解浏览器中专用 Worker、共享 Worker、Service Worker 三类线程的职责、生命周期差异,给出选型条件、常见误用边界与判断方法。
围绕“在一个 Worker 内部还能再创建新的 Worker 吗?嵌套 Worker 有什么限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持嵌套专用 Worker,但注意共享和 Service Worker 的差异。
围绕“普通 Web Worker 和 Service(服务)Worker 在被用户关闭标签页后的生命周期有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕专用 worker 被终止,service worker 可能存活。
围绕“docker buildx build --output 有哪些输出类型,何时导出 OCI tarball 而非推送”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较 registry、local、tar、oci 输出及离线分发与产物导出的适用场景。
围绕“需要把前端仓库交付给无法访问远程的隔离环境时,git bundle 如何打包仓库并支持增量”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 bundle 作为可 clone 的单文件仓库及基于上次 bundle 的增量能力。
围绕“git clone --filter=blob:none 部分克隆在超大型前端仓库中如何减少体积、代价是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按需拉取 blob 的懒加载机制与离线场景受限的代价,不与浅克隆混为一谈。
本题解释 Git 分布式模型相对 SVN 等集中式 VCS 在离线提交、完整历史副本、单点故障恢复上的具体优势,并给出工程场景和适用边界。
围绕“HTTP 请求指令 only-if-cached 的效果是什么,缓存未命中时客户端会收到什么状态码”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确命中直接用、未命中返回 504 的行为及离线场景用途。
围绕“Service Worker 的 Cache Storage 与浏览器 HTTP 缓存是两套机制,fetch 时默认”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清 fetch 事件拦截与 HTTP 缓存检查的先后关系及只在一层做策略的原则,不写 Service Worker 代码。
围绕“为什么在 activate 事件中清理旧版本缓存而不是在 install 事件中”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明版本化缓存名与清理时机的原因。
围绕“如何检测 PWA 已被安装以及当前是否运行在独立(standalone)窗口模式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分安装事件监听与 display-mode 媒体查询两种检测。
围绕“Background Sync 如何在用户恢复网络后重放离线期间提交的表单请求”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明注册 sync 事件与 IndexedDB 队列的配合,不讲推送通知。
围绕“beforeinstallprompt 事件如何用于实现自定义安装按钮,为什么默认安装横幅有时不出现”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明事件拦截与延迟触发的实现及可安装性条件,不讲 manifest 字段细节。
围绕“Cache Storage API 和浏览器 HTTP 缓存有什么区别,为什么 PWA 离线要显式使用 Cache ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要对比程序化控制与浏览器启发式缓存的可控性。
围绕“带内容哈希的静态资源与 HTML 文档应分别采用什么缓存与失效策略”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分 immutable 长缓存与 HTML 短时效的处理。
围绕“Cache First 缓存策略适用于 PWA 中哪些资源,它最大的风险是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断适合缓存优先的资源类型及内容过期风险,不对比其他策略细节。
围绕“Cache Only 和 Network Only 两种极端策略各自适合什么资源”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分两类极端策略的资源归属与失败表现。
围绕“为什么把 fetch 的 Response 存入缓存前必须 response.clone()”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释响应流只能消费一次及 clone 的正确位置,不讲缓存策略。
围绕“PWA 是否应该把大体积音视频资源纳入离线缓存,取舍标准和替代方案是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖权衡配额占用与按需缓存/Range 请求方案,不讲通用缓存策略。
围绕“Clients.claim() 在什么时候需要调用,不调用会导致什么现象”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释激活后未受控页面的问题与调用时机。
围绕“监听 controllerchange 自动刷新页面为什么可能丢用户数据,更稳妥的做法是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断强制 reload 的数据丢失场景与一次性刷新标记设计,不讲提示 UI。
围绕“如何用 Chrome DevTools 的 Application 面板诊断 Service Worker 注册失败”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出注册状态、Update on reload、Cache Storage 的检查路径。
围绕“离线时图片加载失败如何用临时标记图回退,fetch 事件中如何实现按请求类型的回退”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖描述对图片请求返回预缓存临时标记资源的实现。
围绕“如何在 fetch 事件中识别页面导航请求(request.mode === 'navigate')并与静态资源分流”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按请求模式分流到不同缓存逻辑的判断方式。
围绕“为什么 PWA 无法在用户首次访问时就提供离线能力,这对「离线可用」的宣传口径意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 SW 需先安装激活才能接管请求的事实与预期管理,不讲安装流程细节。
围绕“为什么 Service Worker 只能在 HTTPS 下注册,localhost 为什么例外”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释安全上下文要求与本地开发例外。
围绕“Service Worker 的 install 事件中预缓存失败会发生什么,如何保证安装原子性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 waitUntil 失败导致安装中止的机制与降级方案。
围绕“iOS Safari 上 PWA 的离线能力有哪些实际限制,面试中应如何说明兼容方案”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕列举存储上限、安装入口等差异与降级思路。
围绕“Lighthouse 的 PWA 审计检查哪些离线相关项,常见不通过的原因有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕列举离线 200 响应、manifest、SW 注册等检查点与失败原因,不讲性能指标。
围绕“同一站点不同 scope 注册多个 Service Worker 会怎样,如何避免互相覆盖缓存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 scope 匹配优先级与缓存命名隔离的必要性,不讲生命周期。
围绕“Navigation Preload 如何降低 Network First 页面的启动延迟,启用后要注意什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明预加载请求与 SW 启动并行的机制及 fetch 事件配合,不讲策略对比。
围绕“Network First 策略在什么业务场景下优于 Cache First,网络超时时应如何兜底”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明网络优先的时效性收益与超时回退设计。
围绕“离线状态下 API 数据请求应该如何设计回退,返回缓存数据和返回错误提示如何取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕权衡陈旧数据展示与明确离线提示的产品决策。
围绕“PWA 离线时如何为导航请求提供回退页面(offline fallback page),为什么需要单独处理导航请求”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明导航请求与静态资源请求分开处理的原因及回退页实现。
围绕“navigator.onLine 和 online/offline 事件为什么不足以判断真实连通性,离线功能应如何兜”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖指出该 API 只反映网络接口状态及以请求失败为准的兜底设计,不讲 SW 缓存。
围绕“跨域 no-cors 请求缓存得到的 opaque response 有什么问题,如何影响存储配额统计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明不透明响应无法校验状态与配额放大的风险,不讲 CORS 细节。
围绕“navigator.storage.persist() 的作用是什么,哪些浏览器行为会因持久存储授权而改变”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释持久存储对驱逐行为的影响与授权条件,不讲配额估算。