面试题答案
一键面试选择器优化
- 避免通配符选择器:
通配符选择器(
*
)会匹配页面上的所有元素,计算量极大。例如避免使用* { margin: 0; padding: 0; }
,可针对特定元素或类进行设置,如body { margin: 0; padding: 0; }
。 - 减少选择器的深度:
选择器层级越深,浏览器匹配元素的计算量越大。例如,尽量避免
body div ul li a {... }
这样过深的选择器,可简化为.nav - link {... }
并应用到<a>
标签上。 - 避免使用后代选择器过度嵌套:
后代选择器(空格)会遍历所有子元素来匹配。如
body div.content p {... }
可以优化为div.content - p {... }
并添加到<p>
标签上。
文件加载策略
- 压缩与合并CSS文件:
使用工具(如UglifyCSS)压缩CSS文件,去除不必要的空格、注释等,减小文件体积。同时,将多个CSS文件合并为一个,减少HTTP请求次数。例如,把
styles1.css
、styles2.css
合并成main - styles.css
。 - 按需加载: 对于大型电商网站,不同页面可能需要不同的CSS组件。可以采用动态导入或模块化的方式,只加载当前页面需要的CSS模块。比如,使用JavaScript的动态导入功能,根据页面路由加载对应的CSS文件。
- 设置合适的缓存策略:
通过设置
Cache - Control
头,合理配置CSS文件的缓存。对于不常变动的基础样式文件,设置较长的缓存时间,如Cache - Control: max - age = 31536000
(一年),这样用户再次访问时可直接从缓存中读取,减少加载时间。
动画性能
- 使用CSS3硬件加速:
对于动画效果,利用
transform
和opacity
属性,浏览器可以利用GPU进行硬件加速。例如,在动画中使用transform: translateX(50%);
而不是left: 50%;
,同时可以添加will - change: transform;
提前告知浏览器,优化动画性能。 - 减少动画的复杂度:
避免复杂的动画效果,如同时进行多种属性的动画(颜色、位置、大小等)。尽量保持动画的简单性,只对关键属性进行动画操作,例如,仅对
opacity
进行淡入淡出动画。 - 控制动画的帧率:
设置合适的动画帧率,避免过高帧率导致性能问题。使用
animation - duration
和animation - timing - function
合理控制动画速度和节奏,如animation - duration: 1s; animation - timing - function: ease - in - out;
。
其他优化
- 避免使用@import:
@import
会在文档加载完成后才加载CSS文件,导致额外的延迟。应使用<link>
标签来引入CSS文件,浏览器会并行加载这些文件,提高加载效率。 - 优化字体加载:
电商网站可能会使用自定义字体,通过
font - display
属性来控制字体加载策略。例如,font - display: swap;
可以让文本先使用系统字体显示,等自定义字体加载完成后再替换,避免文本长时间空白。