POJ-3667-Hotel(线段树区间修改,合并)
2026/7/28 15:44:14
Lighthouse 是 Google 推出的前端性能与质量评估工具,核心优化场景围绕性能(Performance)、可访问性(Accessibility)、最佳实践(Best Practices)、SEO、PWA五大维度,其中性能维度以 Core Web Vitals(核心网页指标)为核心,包括 LCP、CLS、INP(替代原 FID)等关键指标,直接影响用户体验。
以下结合前端实际开发场景(如 React/Vue 项目、静态资源处理、服务器配置等),详细拆解每个核心优化场景的定义、问题场景、优化方法,重点覆盖 FCP、LCP、CLS 等高频指标:
async/defer)。<head>,非必需 CSS 异步加载(media="print"+ 加载后切换为all)。async(异步加载,加载完成后执行)或defer(延迟加载,DOM 解析完成后执行)。img标签但未设置width/height属性,浏览器无法提前预留布局空间,图片加载完成后才渲染,LCP 延迟。picture标签降级兼容:<picture><sourcesrcset="banner.avif"type="image/avif"><sourcesrcset="banner.webp"type="image/webp"><imgsrc="banner.jpg"alt="首屏Banner"width="1200"height="400"loading="eager"></picture>link rel="preload"优先加载:<linkrel="preload"as="image"href="banner.webp"imagesrcset="banner.webp 1200w"imagesizes="100vw">loading="lazy"属性,避免抢占首屏带宽。link rel="preconnect"预连接接口域名,减少 DNS 解析耗时:<linkrel="preconnect"href="https://api.example.com">width/height属性,加载完成后“撑开”页面,导致下方文本下移。width/height属性(或通过 CSS 固定宽高比,如aspect-ratio: 16/9):.banner-img{aspect-ratio:1200/400;/* 与图片实际宽高比一致 */object-fit:cover;}div.ads-placeholder { height: 200px; }),加载完成后替换内容。position: fixed; top: 0; width: 100%;)。font-display: swap确保字体加载前显示默认字体,避免布局跳动:@font-face{font-family:'MyFont';src:url('myfont.woff2')format('woff2');font-display:swap;/* 关键:默认字体与自定义字体无缝切换 */}link rel="preload"优先加载自定义字体,减少 FOUT 时间。viewport配置固定页面尺寸。requestIdleCallback、setTimeout或queueMicrotask),避免阻塞主线程:// 拆分长循环任务constprocessData=(data)=>{constchunkSize=100;// 每次处理100条数据letindex=0;constprocessChunk=()=>{for(leti=0;i<chunkSize&&index<data.length;i++){// 处理单条数据renderItem(data[index]);index++;}if(index<data.length){requestIdleCallback(processChunk);// 空闲时继续处理}};processChunk();};React.lazy+Suspense;Vue:defineAsyncComponent),避免首屏加载所有路由脚本。DocumentFragment),减少回流重绘。iframe加载第三方脚本(如广告、统计),避免其占用主线程资源;或使用web workers处理复杂计算(如数据解析、图表渲染)。<div onclick="handleClick()">实现,无role="button"且无法通过键盘聚焦(Tab 键跳过)。alt属性,屏幕阅读器无法读取图片内容。<button>、<input>、<nav>、<main>等原生标签,替代<div>/<span>模拟交互元素。focus()转移焦点;关闭后,焦点回归触发元素。alt属性(无意义装饰图设为alt="");视频添加字幕,音频提供文字转录。role="tablist")和状态(aria-selected="true"),辅助屏幕阅读器识别。ReferenceError),导致部分功能失效。document.write()),部分浏览器不兼容。X-Frame-Options头,页面可能被恶意网站嵌入 iframe(点击劫持)。Strict-Transport-Security(HSTS)头,强制浏览器使用 HTTPS。X-Frame-Options: DENY(禁止iframe嵌入)、X-XSS-Protection: 1; mode=block(防御XSS)。alert()、document.write()),替换为现代方案(如console.log()、动态 DOM 操作)。window.addEventListener('error', handleError)),避免影响全局功能。@supports检测 CSS 特性支持,提供降级方案;通过 Babel 转译 ES6+ 代码,适配低版本浏览器。Cache-Control: max-age=31536000),配合文件指纹(如app.[hash].js)实现缓存更新。<title>标签或<meta name="description">,搜索引擎无法识别页面主题。viewport标签缺失),在手机上显示异常,影响移动搜索排名。#/home),未配置 SSR/SSG,搜索引擎无法爬取动态内容。alt属性,搜索引擎无法识别图片内容,错失图片搜索流量。<title>(≤60字符)和<meta name="description">(≤160字符),包含核心关键词。viewport标签,确保页面响应式:<metaname="viewport"content="width=device-width, initial-scale=1.0">prerender-spa-plugin生成静态 HTML。<h1>-<h6>层级标题(每个页面1个<h1>),<nav>包裹导航栏,<main>包裹核心内容,帮助搜索引擎理解页面结构。manifest.json,用户无法将页面添加到桌面,无原生 App 样式。manifest.json:指定应用名称、图标、启动页、显示模式(如standalone模拟原生 App):{"name":"我的应用","short_name":"应用","icons":[{"src":"icon-192x192.png","sizes":"192x192","type":"image/png"},{"src":"icon-512x512.png","sizes":"512x512","type":"image/png"}],"start_url":"/","display":"standalone","background_color":"#ffffff","theme_color":"#000000"}// service-worker.jsimport{precacheAndRoute}from'workbox-precaching';precacheAndRoute(self.__WB_MANIFEST);// 缓存构建产物