标签

Chrome

Google Chrome是一款由Google开发的免费网页浏览器,首次发布于2008年。Chrome以其简洁的用户界面、高性能和安全性而广受欢迎,很快成为世界上使用最广泛的浏览器之一。它是基于开源项目Chromium进行开发的,而Chromium项目也同时为其他开发者提供了构建自己浏览器的基础。

Chrome
查看更多相关内容
前端2026年5月30日 19:58
Chrome 为什么会拦截跨域请求?前端该怎么解决?Chrome 拦截跨域是同源策略在保护用户数据。协议、域名、端口任意一个不同就算跨域;前端可以发起请求,但浏览器会在读取响应时检查 CORS 头。真正的解决点通常在服务端:明确允许哪些来源、方法、请求头,是否允许携带 Cookie。开发环境可以用代理绕过限制,生产不要靠关闭安全策略或插件。 ## 追问 ### CORS 和 JSONP 有什么区别? CORS 是标准跨域机制,支持多种方法和预检;JSONP 只利用 script 标签,只能 GET,安全边界差。 ### 为什么有些请求会先发 OPTIONS? 带自定义请求头、非简单方法或特殊 Content-Type 时,Chrome 会先发预检请求确认服务端是否允许。 ### 携带 Cookie 时为什么不能写 `*`? 如果 `credentials: include`,服务端必须回显具体 origin,不能是星号,还要设置 `Access-Control-Allow-Credentials: true`。 ### 开发代理和服务端 CORS 怎么取舍? 本地代理适合调试;上线后要让网关或应用服务配置 CORS,因为开发服务器代理不会跟着用户浏览器上线。 ## 写段代码 ```js res.setHeader('Access-Control-Allow-Origin', 'https://www.example.com'); res.setHeader('Access-Control-Allow-Methods', 'GET,POST,OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Authorization'); res.setHeader('Access-Control-Allow-Credentials', 'true'); ```
前端2026年5月30日 19:58
Chrome 如何管理内存?V8 垃圾回收和泄漏排查怎么做?Chrome 的内存管理主要由多进程架构、Blink 渲染管线和 V8 垃圾回收一起完成。每个标签页、iframe、扩展或站点隔离进程都可能占用独立内存;JS 对象由 V8 管,DOM、样式、图片、GPU 资源则不完全在 JS 堆里。所以排查内存问题不能只看一个数字,要分清是 JS 堆增长、DOM 节点泄漏,还是图片、Canvas、WebGL 资源没有释放。 ## 追问 ### V8 垃圾回收大概怎么工作? V8 会把对象分成新生代和老生代,短命对象优先在新生代快速回收,存活久的对象会晋升到老生代。 ### 最常见的内存泄漏有哪些? 定时器没清、事件监听没移除、全局数组当缓存、闭包引用大对象、已删除 DOM 还被 JS 变量保存,都是高频原因。 ### Chrome DevTools 怎么排查? 先用 Performance 或 Task Manager 观察内存是否持续上升,再到 Memory 面板拍 Heap Snapshot,对比 Retained Size 和 Detached DOM tree。 ### WeakMap 能解决所有泄漏吗? 不能。它适合存跟对象生命周期绑定的附加信息,但如果外部还有全局引用,WeakMap 也救不了。 ### 代码里应该怎么清理? 组件卸载时清理事件、定时器和订阅,长列表做虚拟滚动,大图和 Blob URL 用完释放。 ```js const timer = setInterval(sync, 5000); window.addEventListener('resize', onResize); return () => { clearInterval(timer); window.removeEventListener('resize', onResize); }; ```
前端2026年5月30日 19:58
Chrome Service Worker 是什么?生命周期和缓存坑有哪些?Service Worker 是运行在页面之外的浏览器脚本,Chrome 用它来做请求拦截、离线缓存、推送通知和后台同步。它不直接操作 DOM,也不是一直常驻后台线程,而是被 install、activate、fetch、push 等事件唤醒,处理完任务后可能被浏览器回收。理解它的关键不是背 API,而是记住:它站在页面和网络之间,但生命周期由浏览器控制。 ## 追问 ### Service Worker 和普通 JS 脚本有什么区别? 普通 JS 跟着页面走,页面关闭脚本就结束;Service Worker 注册后独立于页面。它不能访问 window 和 DOM,需要用 postMessage、Cache Storage、IndexedDB 与页面协作。 ### install、activate、fetch 分别做什么? install 适合预缓存静态资源,activate 适合清理旧版本缓存并接管客户端,fetch 决定请求走网络还是缓存。 ### 缓存策略怎么选? 静态资源通常 cache first,HTML 入口常用 network first 或 stale-while-revalidate,接口数据按业务新鲜度决定。 ### 更新为什么经常“不生效”? Chrome 发现 sw.js 字节变化后会安装新版本,但旧页面仍被旧 worker 控制,新版本要等旧页面关闭才激活。 ### 必要代码长什么样? 下面只是兜底示例,真实项目要区分静态资源、HTML 和接口。 ```js self.addEventListener('fetch', event => { event.respondWith(fetch(event.request).catch(() => caches.match(event.request))); }); ```
前端2026年5月30日 19:58
Chrome 如何支持 PWA?安装、离线和缓存边界是什么?Chrome 支持 PWA,靠的不是某个“打包开关”,而是浏览器把 Web App Manifest、Service Worker、HTTPS、安装入口和权限能力串在一起。页面先要像普通网站一样可访问,再通过 manifest 告诉 Chrome 应用名称、图标、启动地址、显示模式和主题色;Service Worker 负责接管部分网络请求,让核心资源可以缓存,弱网或离线时仍有可用界面。 ## 追问 ### Chrome 判断网站能不能安装成 PWA 看什么? 通常要有 HTTPS、有效 manifest、合适尺寸图标,以及可被 Service Worker 控制的页面。安装提示还会结合用户访问行为,不是文件写好就立刻弹窗。 ### Manifest 里最容易漏掉什么? 常见漏项是 start_url、scope、display 和 192/512 尺寸图标。scope 配错会让用户从图标打开后跳回普通浏览器标签页。 ### 离线能力是不是把所有接口都缓存起来? 不是。HTML 壳、CSS、JS、图标适合预缓存;用户数据、价格、库存、权限状态更适合网络优先或短缓存。 ### 更新 PWA 时有什么坑? Service Worker 更新不是刷新就立即生效,新 worker 要等旧页面关闭后才接管,除非主动调用 skipWaiting 和 clients.claim。 ### 最小实现需要哪些代码? 页面注册 Service Worker,worker 在 install 阶段缓存核心资源,fetch 阶段兜底返回缓存。生产还要加版本号和清理旧缓存。 ```js if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/sw.js'); } ```