网页加载速度是衡量一个网页好坏的重要标准,网页遗弃率随网页加载时间的增长而增长。听说近一半的用户但愿网页加载时间不超过2s,超过3s通常就放弃该网页。时间就是生命,干等着,谁愿意无缘无故地+1s呀,因此今天来整理下具体如何加快网页javascript
压缩 HTML: HTML代码压缩,将注释、空格和新行从生产文件中删除。css
为何:html
删除全部没必要要的空格、注释和中断行将减小HTML的大小,加快网站的页面加载时间,并显著减小用户的下载时间。
怎么作:前端
大多数框架都有插件用来压缩网页的体积。你可使用一组能够自动完成工做的NPM模块。
删除没必要要的注释: 确保从您的网页中删除注释。java
为何:git
注释对用户来讲是没有用的,应该从生产环境文件中删除。可能须要保留注释的一种状况是:保留远端代码库(keep the origin for a library)。
怎么作:github
大多数状况下,可使用HTML minify插件删除注释。
删除没必要要的属性: 像 type="text/javascript"
or type="text/css"
这样的属性应该被移除。web
<!-- Before HTML5 --> <script type="text/javascript"> // Javascript code </script> <!-- Today --> <script> // Javascript code </script>
为何npm
类型属性不是必需的,由于HTML5把text/css和text/javascript做为默认值。没用的代码应在网站或应用程序中删除,由于它们会使网页体积增大。
怎么作:浏览器
⁃ 确保全部link和script标记都没有任何type属性。
在JavaScript引用以前引用CSS标记: 确保在使用JavaScript代码以前加载CSS。
为何:
在引用JavaScript以前引用CSS能够实现更好地并行下载,从而加快浏览器的渲染速度。
怎么作:
确保 head 中的 link 和 style 始终位于 script 以前。
DNS预取: 一次 DNS 查询时间大概在60-120ms之间或者更长,提早解析网页中可能的网络链接域名
<link rel="dns-prefetch" href="http://example.com/">
压缩: 全部CSS文件都须要被压缩,从生产文件中删除注释,空格和空行。
为何:
缩小CSS文件后,内容加载速度更快,而且将更少的数据发送到客户端,因此在生产中缩小CSS文件是很是重要,这对用户是有益的,就像任何企业想要下降带宽成本和下降资源。
怎么作:
使用工具在构建或部署以前自动压缩文件。
Concatenation: CSS文件合并(对于HTTP/2效果不是很大)。
<!-- 不推荐 --> <link rel="stylesheet" href="foo.css"/> <link rel="stylesheet" href="bar.css"/> <!-- 推荐 --> <link rel="stylesheet" href="foobar.css"/>
为何:
若是你还在使用HTTP/1,那么你就须要合并你的文件。不过在使用HTTP/2的状况下不用这样(效果待测试)。
怎么作:
在构建或部署以前使用在线工具或者其余插件来合并文件。
固然,要确保合并文件后项目能够正常运行。
非阻塞: CSS文件须要非阻塞引入,以防止DOM花费更多时间才能渲染完成。
<link rel="preload" href="global.min.css" as="style" onload="this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="global.min.css"></noscript>
为何:
CSS文件能够阻止页面加载并延迟页面呈现。使用
preload
实际上能够在浏览器开始显示页面内容以前加载CSS文件。
怎么作:
须要添加rel
属性并赋值preload
,并在<link>
元素上添加as=“style”
。
CSS类(class)的长度: class的长度会对HTML和CSS文件产生(轻微)影响。
为何:
甚至性能影响也是有争议的,项目的命名策略会对样式表的可维护性有重大影响。若是使用BEM,在某些状况下可能会写出比所须要的类名更长的字符。重要的是要明智的选择名字和命名空间。
怎么作:
可能有些人更关注类名的长度,可是网站按组件进行划分的话能够帮助减小类名的数量和长度。
不用的CSS: 删除未使用的CSS选择器。
为何:
删除未使用的CSS选择器能够减少文件的大小,提升资源的加载速度。
怎么作:
⚠️ 检查要使用的CSS框架是否已包含reset/normalize代码,可能不须要用到reset/normalize文件中的内容。
JS 压缩: 全部JavaScript文件都要被压缩,生产环境中删除注释、空格和空行(在HTTP/2仍然有效果)。
为何:
删除全部没必要要的空格、注释和空行将减小JavaScript文件的大小,并加快网站的页面加载时间,提高用户体验。
怎么作:
建议使用下面的工具在构建或部署以前自动缩小文件。
非阻塞JavaScript: 使用defer属性或使用async来异步加载JavaScript文件。
<!-- Defer Attribute --> <script defer src="foo.js"> <!-- Async Attribute --> <script async src="foo.js">
为何:
JavaScript阻止HTML文档的正常解析,所以当解析器到达script标记时(特别是在<head>内),它会中止解析而且执行脚本。若是您的脚本位于页面顶部,则强烈建议添加async
和defer
,但若是在</body>标记以前加载,没有太大影响。可是,使用这些属性来避免性能问题是一种很好的作法。
怎么作:
添加async
(若是脚本不依赖于其余脚本)或defer
(若是脚本依赖或依赖于异步脚本)做为script脚本标记的属性。
若是有小脚本,能够在异步脚本上方使用内联脚本。
使用 tree shaking 技术减小 js 大小: 经过构建工具分析 JavaScript 代码并移除生产环境中用不到的 js 模块或方法
Reduce JavaScript Payloads with Tree Shaking](https://developers.google.com...
使用 code splitting 分包加载 js: 经过分包加载,减小首次加载所需时间
怎么作:
Vendor splitting 根据库文件拆分模块,例如 React 或 lodash 单独打包成一个文件
Entry point splitting 根据入口拆分模块,例如经过多页应用入口或者单页应用路由进行拆分
Dynamic splitting 根据动态加载拆分模块,使用动态加载语法import()
,实现模块按需加载
图像优化: 在保证压缩后的图片符合产品要求的状况下将图像进行优化。
为何:
优化的图像在浏览器中加载速度更快,消耗的数据更少。
怎么作:
尽量尝试使用CSS3效果(而不是用小图像替代)
尽量使用字体图片
使用 SVG
使用编译工具并指定85如下的级别压缩。
图像格式: 适当选择图像格式。
为何:
确保图片不会减慢网站速度
怎么作:
使用 Lighthouse识别哪些图像可使用下一代图片格式(如JPEG 2000m JPEG XR或WebP)。
比较不一样的格式,有时使用PNG8比PNG16好,有时候不是。
使用矢量图像 VS 栅格/位图: 能够的话,推荐使用矢量图像而不是位图图像。
为何:
矢量图像(SVG)每每比图像小,具备响应性和完美缩放功能。并且这些图像能够经过CSS进行动画和修改操做。
图像尺寸: 若是已知最终渲染图像大小,请在<img>上设置宽度和高度属性。
为何:
若是设置了高度和宽度,则在加载页面时会保留图像所需的空间。若是没有这些属性,浏览器就不知道图像的大小,也没法为其保留适当的空间,致使页面布局在加载期间发生变化。
避免使用Base64图像: 你能够将微小图像转换为base64,但实际上并非最佳实践。
懒加载: 图像懒加载(始终提供noscript做为后备方案)。
为何:
它能改善当前页面的响应时间,避免加载一些用户可能不须要或没必要要的图像。
怎么作:
使用 Lighthouse能够识别屏幕外的图像数量。
使用懒加载图像的JavaScript插件。
响应式图像: 确保提供接近设备显示尺寸的图像。
为何:
小型设备不须要比视口大的图像。建议在不一样尺寸上使用一个图像的多个版本。
怎么作:
为不一样的设备设置不一样大小的图像。
使用srcset和picture为每一个图像提供多种变体(variants)。
* 📖 [Responsive images - Learn web development | MDN](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images)
页面大小 < 1500 KB: (理想状况 < 500 KB) 尽量减小页面和资源的大小。
为何:
理想状况下,应该尝试让页面大小<500 KB,但Web页面大小中位数大约为1500 KB(即便在移动设备上)。根据你的目标用户、链接速度、设备,尽量减小页面大小以尽量得到最佳用户体验很是重要。
怎么作:
前端性能清单中的全部规则将帮助你尽量地减小资源和代码。
Cookie 大小: 若是您使用cookie,请确保每一个cookie不超过4096字节,而且一个域名下不超过20个cookie。
为何:
cookie存在于HTTP头中,在Web服务器和浏览器之间交换。保持cookie的大小尽量低是很是重要的,以尽可能减小对用户响应时间的影响。
怎么作:
消除没必要要的cookie
使用CDN提供静态文件: 使用CDN能够更快地在全球范围内获取到你的静态文件。
启用GZIP压缩
以上清单仅为节选,来源 https://github.com/w3cay/Fron...
原文连接: Web加载速度优化清单-安望云海