```
* [ ] **CSS embed or line:** ![High][high_img] 避免使用CSS嵌入或内联,仅用于必要的情况(例如: background-image for slider, CSS critical).
* [ ] **浏览器内核前缀:** ![High][high_img] 对部分属性加上浏览器内核前缀,生成你浏览器兼容的属性。
> * 🛠 [Autoprefixer CSS online](https://autoprefixer.github.io/)
### 性能
- [ ] **Concatenation(合并):** ![High][high_img] 将CSS文件合并到一个文件中。 *(不适用HTTP/2)*
- [ ] **Minification(压缩):** ![High][high_img] 压缩所有CSS文件。
- [ ] **Non-blocking(非阻塞):** ![Medium][medium_img] CSS文件需要非阻塞加载,以防在DOM加载时花费大量时间。
> * 📖 [loadCSS by filament group](https://github.com/filamentgroup/loadCSS)
> * 📖 [使用loadCSS预加载CSS的示例](https://gist.github.com/thedaviddias/c24763b82b9991e53928e66a0bafc9bf)
- [ ] **未使用的CSS:** ![Low][low_img] 删除未使用的CSS。
> * 🛠 [UnCSS Online](https://uncss-online.com/)
> * 🛠 [PurifyCSS](https://github.com/purifycss/purifycss)
> * 🛠 [PurgeCSS](https://github.com/FullHuman/purgecss)
> * 🛠 [Chrome DevTools Coverage](https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage)
### CSS 测试
* [ ] **格式检查:** ![High][high_img] 所有的CSS或SCSS文件没有任何格式错误。
> * 🛠 [stylelint, a CSS linter](https://stylelint.io/)
> * 📖 [Sass指南](https://sass-guidelin.es/)
* [ ] **响应式网页设计:** ![High][high_img] 所有页面都需要经过以下几种情况的测试: 320px, 768px, 1024px (根据自己的项目情况,可以设置更多)。
* [ ] **CSS验证器:** ![Medium][medium_img] CSS都需经过测试,同时所有错误都被修复。
> 🛠 [CSS验证器](https://jigsaw.w3.org/css-validator/)
* [ ] **桌面浏览器:** ![High][high_img] 所有页面都在桌面浏览器进行了测试(Safari, Firefox, Chrome, Internet Explorer, EDGE...)。
* [ ] **移动端浏览器:** ![High][high_img] 所有页面都在移动端浏览器进行了测试(Native browser, Chrome, Safari...)。
* [ ] **操作系统:** ![High][high_img] 所有页面都在当前操作系统上进行了测试(Windows, Android, iOS, Mac...)。
* [ ] **Design fidelity 设计图保真度):** ![High][high_img] 页面需要像素级实现。根据设计稿的质量,你可能不会100%与设计稿相同,但你的网页需要尽可能的靠近设计稿的要求。
> [Pixel Perfect - Chrome Extension](https://chrome.google.com/webstore/detail/perfectpixel-by-welldonec/dkaagdgjmgdmbnecmcefdhjekcoceebi?hl=en)
* [ ] **Reading direction(浏览文本方向):** ![High][high_img] 如果需要的话,所有页面都需要对LTR和RTL语言进行测试。
> * 📖 [构建RTL-Aware Web Apps & Websites: Part 1 | Mozilla Hacks](https://hacks.mozilla.org/2015/09/building-rtl-aware-web-apps-and-websites-part-1/)
> * 📖 [构建RTL-Aware Web Apps & Websites: Part 2 | Mozilla Hacks](https://hacks.mozilla.org/2015/10/building-rtl-aware-web-apps-websites-part-2/)
**[⬆ 返回顶部](#目录)**
---
## Images
> **注意:** 想要完整的了解图像优化,可以在Addy Osmani查看免费电子书**[图像优化基础](https://images.guide/)**。
### 最佳实践
* [ ] **优化:** ![High][high_img] 所有图像都经过优化并且可在浏览器中正常显示。WebP格式可用于关键页面(如首页)。
> * 🛠 [Imagemin](https://github.com/imagemin/imagemin)
> * 🛠 使用[ImageOptim](https://imageoptim.com/)免费优化您的图像。
> * 🛠 使用[KeyCDN Image Processing](https://www.keycdn.com/support/image-processing) for image optimization in real time.
> * 🛠 使用[Kraken.io](https://kraken.io/web-interface) png和jpg优化的绝佳替代品。 免费计划每个文件最大1mb。
> * 🛠 [TinyPNG](https://tinypng.com/) 无损优化png,apng(动画png)和jpg图像。 提供免费和付费版本。
> * 🛠 [ZorroSVG](http://quasimondo.com/ZorroSVG/) 使用svg遮罩的类似jpg的压缩形式的透明图像。
> * 🛠 [SVGO](https://github.com/svg/svgo) 基于Nodejs的工具,用于优化SVG矢量图形文件。
> * 🛠 [SVGOMG](https://jakearchibald.github.io/svgomg/) 基于SVGO的基于Web的GUI版本,可在线优化您的svg。
* [ ] **Picture/Srcset:** ![Medium][medium_img] 使用Picture/Srcset为用户当前的视口提供最合适的图像。
> * 📖 [如何使用srcset构建响应式图像](https://www.sitepoint.com/how-to-build-responsive-images-with-srcset/)。
* [ ] **视网膜屏:** ![Low][low_img] 提供x2 或 3x的图像来支持视网膜屏显示。
* [ ] **雪碧图:** ![Medium][medium_img] 小图片放到一个雪碧图中。
* [ ] **宽高:** ![High][high_img] 请在
![]()
上设置宽度和高度属性,如果最终的渲染图像大小已知(可以忽略CSS大小)。
* [ ] **图片描述文本:** ![High][high_img] 所有 `
![]()
` 必须有`alt`属性来直观的描述图片(在无障碍网页中尤其重要)。
> 📖 [Alt-文本: 终极指南](https://axesslab.com/alt-texts/)
* [ ] **懒加载:** ![Medium][medium_img] 图片使用懒加载 (记得适中提供 noscript 标签).
**[⬆ 返回顶部](#目录)**
---
## JavaScript
### 最佳实践
* [ ] **JavaScript 内联:** ![High][high_img] 确保没有任何js代码内联(与HTML代码混合)。
* [ ] **合并:** ![High][high_img] 合并js文件。
* [ ] **压缩:** ![High][high_img] 压缩所有js文件(可以添加 `.min` 后缀)。
> [压缩资源 (HTML, CSS, and JavaScript)](https://developers.google.com/speed/docs/insights/MinifyResources)
* [ ] **JavaScript安全性:** ![High][high_img]
> [用JavaScript开发安全应用程序指南](https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet#Guidelines_for_Developing_Secure_Applications_Utilizing_JavaScript)
* [ ] **`noscript` 标签:** ![Medium][medium_img] 在 HTML 的 body 标签里使用 `