澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

澳门新浦京娱乐场网站:前端性能优化和测试工

值得收藏!Web开发的各种性能工具

2015/06/22 · HTML5 · 性能

原文出处: Robin Rendle   译文出处:南北   

嗨,各位,又到了周末总结时间!得益于大量的 Grunt 和 Gulp 插件,我们可以轻松实现网站数据的可视化,虽然深入理解这些工具还比较困难,但分门别类的将它们列出来,也是很有帮助的。

翻译自:

什么是关键 CSS

2017/10/05 · CSS · CSS

原文出处: Dean Hume   译文出处:众成翻译   

网络速度很慢,但是有一些简单的策略可以使网站变快。其中之一就是将关键的css内联插入到网页的``标签, 但是,如果您的网站包含数百页,甚至更糟糕的是包含数百种不同的模板,那么你该怎么做呢? 你不能手动做这件事。 Dean Hume解释了一个简单的方法来完成它。如果您是经验丰富的网页开发人员,您可能会发现这篇文章显而易见,并且不言而喻,但对于您的客户和初级开发人员来说,这是一个很好的选择。— Ed.

提供快速,流畅的网络体验是如今构建网站的重要部分。 大多数情况下,我们开发网站,而不去理解浏览器实际在做什么。 浏览器是如何从我们创建的HTML,CSS和JavaScript渲染我们的网页? 我们如何使用这些知识来加速我们网页的渲染

原文出处: Dean Hume   译文出处:众成翻译   

快速提升前端性能

2015/09/26 · HTML5, JavaScript · 1 评论 · 性能

本文由 伯乐在线 - cucr 翻译,唐尤华 校稿。未经许可,禁止转载!
英文出处:Jonathan Suh。欢迎加入翻译组。

去年,我写了一篇文章Need for Speed,分享了在开发我的网站中使用的工作流程和技术(包含工具)。从那时起,我的网站又经过了一次重构,完成了很多工作流程和服务器端改进,同时我对前端性能也给与了额外关注。以下就是我做的工作,为什么我要这么做,以及我在网站上用来优化前端性能的工具。

内容分发网络(CDN)

CDN 可以帮你把网站的资源分发到世界各地,有助于提高网站的响应速度,当然,这对于那些特殊地区的用户是收效甚微的。

嗨,各位,又到了周末总结时间!得益于大量的 Grunt 和 Gulp 插件,我们可以轻松实现网站数据的可视化,虽然深入理解这些工具还比较困难,但分门别类的将它们列出来,也是很有帮助的。

在 SmashingMag阅读更多:

  • 改善粉碎杂志的表现:案例研究
  • PostCSS介绍
  • 预加载,有什么好处?
  • 前端性能检查表

如果我想快速提高网站的性能, Google的 PageSpeed Insights 工具是我的首选。 当尝试检测网页并找到需要改进的区域时,这非常有用。 您只需输入要测试的页面的URL,该工具就会提供一系列性能建议。

如果您曾经通过PageSpeed Insights工具运行自己的网站,您可能会遇到以下建议。

澳门新浦京娱乐场网站 1

CSS and JavaScript 会阻塞页面的渲染。 (查看大图)

我必须承认,我第一次看到这个时有点困惑。 该建议的内容如下:

“如果以下资源未下载完成,您的页面上的任何内容都不会被渲染。 尝试延迟或异步加载阻塞资源,或直接在HTML中内联嵌入这些资源的关键部分。“

幸运的是,解决这个问题比看起来更简单! 答案在于CSS和JavaScript在您的网页中的加载方式。

网络速度很慢,但是有一些简单的策略可以使网站变快。其中之一就是将关键的css内联插入到网页的``标签, 但是,如果您的网站包含数百页,甚至更糟糕的是包含数百种不同的模板,那么你该怎么做呢? 你不能手动做这件事。 Dean Hume解释了一个简单的方法来完成它。如果您是经验丰富的网页开发人员,您可能会发现这篇文章显而易见,并且不言而喻,但对于您的客户和初级开发人员来说,这是一个很好的选择。— Ed.

最小化请求

所有在你的网站加载时用来渲染页面(外部CSS或JS文件、web字体、图片等等)的资源,都是不同的HTTP请求。一般的网站平均有 93个请求!

我的目标是减少HTTP请求。一种方法是分别编译或连接(组合、合并)CSS和javascript到一个文件中。让这个过程自动化(例如使用构建工具 Grunt 或 Gulp)是理想的效果,但至少也应该在生产环境下手动完成。

第三方脚本是增加额外请求最常见的罪魁祸首,很多获取额外的文件如脚本、图像或CSS的请求都不止1个。浏览器内置的开发者工具可以帮助你发现这些元凶。

澳门新浦京娱乐场网站 2
Google Chrome开发者工具的网络选项卡

例如,Facebook的脚本发起3次请求。测试环境中使用一些来自著名社交网站的社交分享脚本,可以看到他们快速增加:

站点 文件 大小
Google 1 15.1KB
Facebook 3 73.3KB
LinkedIn 2 47.7KB
Pinterest 3 12.9KB
Tumblr 1 1.5KB
Twitter 4 52.7KB
Total 14 203.2KB

来源:更有效的社会分享链接

这有额外的14个HTTP请求,共203.2KB。相反,我看看 “share-intent” 这个url,它基本上是通过传递和构建数据来生成一个共享,可以只使用HTML来创建社交共享链接。它让我丢掉用于共享的第三方脚本,这些脚本需要7次请求。我在Responsible Social Share Links这篇文章有更多的阐述。

评估每一个第三方脚本并确定其重要性。也许存在一种不依赖第三方的方法来完成它。你可能会失去一些功能(例如like、tweet、分享数量),但是请问一下自己:“像数量统计就那么重要吗?”

CloudFlare

CloudFlare 的强大之处在于它可以成为你的 DNS 服务器(CDN 只是它所有服务的一个组成部分),这样对你的网站发起的所有请求都会经过它。

CloudFlare 的 CDN 在过去十五年的设计和发展中,并没有一味的守旧和固步自封。我们的专利技术中充分利用了最新的技术进步,包括并不限于硬件、web 服务器和网络路由。换言之,我们创新的建设了下一代的 CDN。新的 CDN 配置简单、价格低廉,其性能也一定比你使用过的任何传统 CDN 都要优秀。

CDN 可以帮你把网站的资源分发到世界各地,有助于提高网站的响应速度,当然,这对于那些特殊地区的用户是收效甚微的。

什么是关键CSS?

对CSS文件的请求可以显著增加网页呈现所需的时间。 原因是默认情况下,浏览器将延迟页面呈现,直到它完成加载、解析和执行所有在“页面”中引用的CSS文件。 这样做是因为它需要计算页面的布局。

不幸的是,这意味着如果我们有一个非常大的CSS文件,并且需要一段时间才能完成下载,我们的用户将在浏览器开始呈现页面之前等待整个文件被下载下来。 幸运的是,有一个巧妙的技术,使我们能够优化我们的CSS的传输并减轻阻塞。这种技术被称为优化关键渲染路径。 关键渲染路径表示浏览器呈现页面的所有必须步骤。 我们想要找到最小的阻塞CSS集合 ,或者关键 CSS,以使页面显示给用户。 关键资源是可能阻塞页面首屏呈现的所有资源。 这背后的想法是,网站应该在前几个TCP数据包响应中为用户获取第一个屏幕的内容(或“首屏”内容)。 想要简要了解如何在网页上工作,请查看下面的图片。

澳门新浦京娱乐场网站 3

关键 CSS是向用户呈现第一屏的内容所需CSS的最少集合。 (查看大图)

在上面的示例中,网页的关键部分只是用户在首次加载页面时可以看到的内容。 这意味着我们只需要加载最小量的CSS来渲染页面顶部的内容。 对于CSS的其余部分,我们不需要担心,因为我们可以异步加载它。

我们如何确定关键CSS? 确定页面的关键CSS是相当复杂的,需要您浏览网页的DOM。 接下来,我们需要确定当前应用于视图中每个元素的样式列表。 手动执行此操作将是一个繁琐的过程,但是一些很棒的工具可以自动执行这个过程。

在本文中,我将向您展示如何使用关键的CSS提高您的网页呈现速度,并介绍一个可以帮助您自动执行此过程的工具。

提供快速,流畅的网络体验是如今构建网站的重要部分。 大多数情况下,我们开发网站,而不去理解浏览器实际在做什么。 浏览器是如何从我们创建的HTML,CSS和JavaScript渲染我们的网页? 我们如何使用这些知识来加速我们网页的渲染

压缩、优化

现在我找到了减少请求的方法,我开始寻找各种方法来减重。文件越小,加载速度越快。通常平均的页面大小为1950KB。按照内容分类:

图片:1249KB HTML:58KB CSS:60KB JS:303KB 字体:87KB Flash:67KB 其它:126KB

我使用这些数据作为参考和比较的起点,同时找到我可以用来为网站减负的方法。 我的网站耗费的流量有多少?是一个由Tim Kadlec编写的很棒的工具,可以用来帮助你测试和可视化,来自世界各地的访问在你的网站上消耗的流量。

MaxCDN

CSS-Tricks 当前就在使用 MaxCDN 托管所有的静态资源。它可以无缝地融合 WordPres 和 W3 的所有缓存资源,所以我们无需做什么特别处理,即可将资源移入 CDN,并能保证链接的准确性。

澳门新浦京娱乐场网站 4

对于一个博客来说,考虑到其中的大文件主要是 JavaScript、CSS 和图片,而不是视频等类型,这贷款占用的可真多。

我们的 CDN 服务同样是一个网站加速器和实时控制中心。创建它,就是为了让网站的用户和运维都能从下一代 CDN 中获得最大收益。

CloudFlare

CloudFlare 的强大之处在于它可以成为你的 DNS 服务器(CDN 只是它所有服务的一个组成部分),这样对你的网站发起的所有请求都会经过它。

CloudFlare 的 CDN 在过去十五年的设计和发展中,并没有一味的守旧和固步自封。我们的专利技术中充分利用了最新的技术进步,包括并不限于硬件、web 服务器和网络路由。换言之,我们创新的建设了下一代的 CDN。新的 CDN 配置简单、价格低廉,其性能也一定比你使用过的任何传统 CDN 都要优秀。

关键CSS实践

使用关键CSS,我们需要改变我们处理CSS的方式 – 这意味着将其分成两个文件。 对于第一个文件,我们仅提取渲染上述内容所需的最小CSS集,然后将其内联在网页中。 对于第二个文件或非关键的CSS,我们异步加载它,以免阻塞网页。

一开始似乎有点奇怪,但是通过将关键的CSS集成到HTML中,我们可以消除关键路径中的额外的请求。 这使我们能够在一次请求中提供关键的CSS,以尽快向用户展示页面。

下面的代码给出了一个基本的例子。

JavaScript

<!doctype html> <head> <style> /* 内联CSS */ </style> ``<script> loadCSS('non-critical.css'); </script>`` </head> <body> ...body goes here </body> </html>

1
2
3
4
5
6
7
8
9
&lt;!doctype html&gt;
&lt;head&gt;
  &lt;style&gt; /* 内联CSS */ &lt;/style&gt;
  ``&lt;script&gt; loadCSS('non-critical.css'); &lt;/script&gt;``
&lt;/head&gt;
&lt;body&gt;
  ...body goes here
&lt;/body&gt;
&lt;/html&gt;

如上,我们将关键CSS内联在style 标签中。然后,使用 loadCSS(); 异步加载非关键的CSS。 这很重要,因为我们在展示首屏后加载繁重的(非关键) CSS。

起初,这似乎是一场噩梦。 为什么要手动在每个页面内嵌CSS片段? 但是有一个好消息,这个过程可以自动化,在这个例子中,我将运行一个名为Critical 的工具。 Addy Osmani 创造,它是一个允许您自动提取和内联关键路径CSS到HTML中的的Node.js包。 我将把这个工具和 Grunt 一起介绍, Grunt是一个JavaScript 任务执行器, 自动处理CSS。 如果你之前没听过Grunt, 这个网站有一些非常 详细文档, 以及配置项目的各种解释。我之前博客介绍过这个工具.

在 SmashingMag阅读更多:

  • 改善粉碎杂志的表现:案例研究
  • PostCSS介绍
  • 预加载,有什么好处?
  • 前端性能检查表

如果我想快速提高网站的性能, Google的 PageSpeed Insights 工具是我的首选。 当尝试检测网页并找到需要改进的区域时,这非常有用。 您只需输入要测试的页面的URL,该工具就会提供一系列性能建议。

如果您曾经通过PageSpeed Insights工具运行自己的网站,您可能会遇到以下建议。

澳门新浦京娱乐场网站 5

CSS and JavaScript 会阻塞页面的渲染。 (查看大图)

我必须承认,我第一次看到这个时有点困惑。 该建议的内容如下:

“如果以下资源未下载完成,您的页面上的任何内容都不会被渲染。 尝试延迟或异步加载阻塞资源,或直接在HTML中内联嵌入这些资源的关键部分。“

幸运的是,解决这个问题比看起来更简单! 答案在于CSS和JavaScript在您的网页中的加载方式。

CSS和JavaScript

压缩样式表和JavaScript文件可以明显减少文件大小,我仅在压缩上就从一个文件上节省了56%的空间。

压缩前 压缩后 节省比例
CSS 135KB 104KB 23.0%
JS 16KB 7KB 56.3%

我使用 BEM (代码、元素、修饰符) 方法论编写CSS,这将导致冗长的类名。重构我的一些代码变得更简短(“navigation”为 “nav”, “introduction” 为 “intro”),这让我节省了一些空间,但和我期望的后期压缩相比并不是那么明显。

冗长的类 精简后 节省比例
104KB 97KB 6.7%

我也重新评估了使用jQuery的必要性。对于压缩的135KB的JavaScript,大约96KB是jQuery库——71%之多!这里并没有很多需要依赖于jQuery,所以我花时间重构了代码。我通过剥离jQuery和在Vanilla重写它,去除了122KB,最终压缩后的文件大小减少到13KB。

jQuery Vanilla JS 节省比例
135KB 13KB 122KB (90%)

从那时起,我设法去掉更多空间(压缩后7KB),最后脚本在压缩和gzipped后只有0.365KB。

CloudFront

亚马逊网络服务(AWS)版本的 CDN。

亚马逊 CloudFront 是一个内容分发网络服务。它可以无缝融合入其他的亚马逊网络服务产品,为开发者和企业分发内容到最终用户手中提供了一种简单的方式,整个过程都具有低延迟、高转换速度的特点,也没有最小使用量的强制要求。

MaxCDN

CSS-Tricks 当前就在使用 MaxCDN 托管所有的静态资源。它可以无缝地融合 WordPres 和 W3 的所有缓存资源,所以我们无需做什么特别处理,即可将资源移入 CDN,并能保证链接的准确性。

澳门新浦京娱乐场网站 6对于一个博客来说,考虑到其中的大文件主要是 JavaScript、CSS 和图片,而不是视频等类型,这带宽占用的可真多。

我们的 CDN 服务同样是一个网站加速器和实时控制中心。创建它,就是为了让网站的用户和运维都能从下一代 CDN 中获得最大收益。

开始

我们先从Node.js控制台开始,并导航到您的网站的路径。 通过在您的控制台中输入以下命令来安装Grunt命令行界面:

npm install -g grunt-cli 

1
2
npm install -g grunt-cli


这将把grunt命令放在你的系统路径中,允许从任何目录运行它。 接下来,使用以下命令安装Grunt任务运行程序:

npm install grunt --save-dev 

1
2
npm install grunt --save-dev


然后安装 grunt-critical 插件.

npm install grunt-critical --save-dev 

1
2
npm install grunt-critical --save-dev


接下来,您需要创建项目任务配置的Gruntfile。 看起来有点像下面的代码。

module.exports = function (grunt) { grunt.initConfig({ critical: { dist: { options: { base: './' }, // The source file src: 'page.html', // The destination file dest: 'result.html' } } }); // Load the plugins grunt.loadNpmTasks('grunt-critical'); // Default tasks. grunt.registerTask('default', ['critical']); }; 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module.exports = function (grunt) {
grunt.initConfig({
  critical: {
    dist: {
      options: {
        base: './'
      },
      // The source file
      src: 'page.html',
      // The destination file
      dest: 'result.html'
      }
    }
  });
  // Load the plugins
  grunt.loadNpmTasks('grunt-critical');
  // Default tasks.
  grunt.registerTask('default', ['critical']);
};


在上面的代码中,我配置了 Critical 插件来查看我的page.html文件。 然后它会根据给定的页面处理CSS来计算关键的CSS。 接下来,它将内联关键的CSS并相应地更新HTML页面。

通过在控制台中输入grunt来运行插件。

澳门新浦京娱乐场网站 7

使用Grunt自动检测网络性能。(查看大图)

如果您导航到该文件夹,则应该会注意到一个名为result.html的文件,其中包含内联的关键CSS,而剩余的CSS异步加载。 您的网页现在就可以使用了!

在幕后, 插件自动使用 PhantomJS, 一个无头WebKit浏览器,捕获所需的关键CSS。 这意味着它能够静默地加载您的网页并测试最佳关键CSS。 这个功能还保证了插件在不同屏幕尺寸上的灵活性。 例如,您可以提供不同的屏幕尺寸,插件将相应地捕获并内联您的关键CSS

critical: { dist: { options: { base: './', dimensions: [{ width: 1300, height: 900 }, { width: 500, height: 900 }] }, files: [ {src: ['index.html'], dest: 'dist/index.html'} ] } } 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
critical: {
  dist: {
    options: {
      base: './',
      dimensions: [{
        width: 1300,
        height: 900
      },
      {
        width: 500,
        height: 900
      }]
    },
    files: [
      {src: ['index.html'], dest: 'dist/index.html'}
    ]
  }
}


上面的代码将从多个维度处理给定的文件,并内联相应的关键CSS。 这意味着您可以根据多个屏幕宽度运行您的网站,并确保您的用户仍然拥有相同的体验。 我们知道,使用3G和4G的移动连接可能是不稳定的 – 这就是为什么这种技术对于移动用户来说如此重要。

什么是关键CSS?

对CSS文件的请求可以显著增加网页呈现所需的时间。 原因是默认情况下,浏览器将延迟页面呈现,直到它完成加载、解析和执行所有在“页面”中引用的CSS文件。 这样做是因为它需要计算页面的布局。

不幸的是,这意味着如果我们有一个非常大的CSS文件,并且需要一段时间才能完成下载,我们的用户将在浏览器开始呈现页面之前等待整个文件被下载下来。 幸运的是,有一个巧妙的技术,使我们能够优化我们的CSS的传输并减轻阻塞。这种技术被称为优化关键渲染路径。 关键渲染路径表示浏览器呈现页面的所有必须步骤。 我们想要找到最小的阻塞CSS集合 ,或者关键 CSS,以使页面显示给用户。 关键资源是可能阻塞页面首屏呈现的所有资源。 这背后的想法是,网站应该在前几个TCP数据包响应中为用户获取第一个屏幕的内容(或“首屏”内容)。 想要简要了解如何在网页上工作,请查看下面的图片。

澳门新浦京娱乐场网站 8

关键 CSS是向用户呈现第一屏的内容所需CSS的最少集合。 (查看大图)

在上面的示例中,网页的关键部分只是用户在首次加载页面时可以看到的内容。 这意味着我们只需要加载最小量的CSS来渲染页面顶部的内容。 对于CSS的其余部分,我们不需要担心,因为我们可以异步加载它。

我们如何确定关键CSS? 确定页面的关键CSS是相当复杂的,需要您浏览网页的DOM。 接下来,我们需要确定当前应用于视图中每个元素的样式列表。 手动执行此操作将是一个繁琐的过程,但是一些很棒的工具可以自动执行这个过程。

在本文中,我将向您展示如何使用关键的CSS提高您的网页呈现速度,并介绍一个可以帮助您自动执行此过程的工具。

图片

图片通常占到一个网站的大头。通常网站平均有1249 KB的图片。

我抛弃了图标字体,取而代之的是内联SVG。此外,任何可以矢量化的图片都使用内联SVG替换。我的网站先前版本的一个页面仅仅图标web字体就加载了145KB,同时对于几百个web字体,我只使用了一小部分。相比之下,当前网站的一个页面只加载10KB内联SVG,这可是93%的差异。

SVG sprites看起来很有趣,它可能是我在整个网站使用普通内联SVG图标的一个可行的替代解决方案。

在可能的情况下使用CSS代替图片,现在的CSS能做的已经很多了。然而,浏览器兼容性可能是现代CSS使用的一个问题;因此,充分利用 caniuse.com 和逐步改进。

你也可以通过优化图片来压缩字节。有两种方法来优化图片:

  1. 有损压缩:降低图像的质量
  2. 无损压缩:不影响质量

要同时使用两种方法取得最好的效果,顺序是很重要的。首先使用有损图像压缩方法,比如在不超过必要大小的情况下调整图像大小然后在略低质量且不压缩太多的情况下导出如我通常在82 – 92%下导出JPG图片

澳门新浦京娱乐场网站 9

ImageOptim是OS X下的一个图像优化工具

接下来,使用无损图像优化工具比如 ImageOptim进行处理,从而通过删除不必要的信息,如元数据或颜色配置文件来进一步减少图像文件大小。

CDNperf

上述的 CDNs 并不能托管你任意的资源,它们往往只是托管最频繁用到的文件。虽然对于线上产品来说将资源和服务器托管到私有的 CDN 上并不是最好的方式,但这种方式对于分发资源来说仍然是快速和简单的。

CDNperf 可以帮你找出最快和最可信赖的 JavaScript CDNS,让你的网站更快更有朝气。

澳门新浦京娱乐场网站 10

CloudFront

亚马逊网络服务版本的 CDN。

亚马逊 CloudFront 是一个内容分发网络服务。它可以无缝融合入其他的亚马逊网络服务产品,为开发者和企业分发内容到最终用户手中提供了一种简单的方式,整个过程都具有低延迟、高转换速度的特点,也没有最小使用量的强制要求。

在生产环境中使用Critical

使用Critical这样的工具是自动提取和内联关键CSS的好方法,而无需改变开发网站的方式,但是如何适应真实场景? 要将新更新的文件置于目标文件,您只需按照通常的方式进行部署 – 无需在生产环境中更改。 您只需记住,每次构建或更改CSS文件时,都需要运行Grunt。

我们在本文中运行的代码示例涵盖了单个文件的使用,但是当您需要处理多个文件关键CSS甚至整个文件夹时会发生什么? 您的Gruntfile可以更新以处理多个文件,类似于下面的示例。

critical: { dist: { options: { base: './', dimensions: [{ width: 1300, height: 900 }, { width: 500, height: 900 }] }, files: [ {src: ['index.html'], dest: 'dist/index.html'}, {src: ['blog.html'], dest: 'dist/blog.html'} {src: ['about.html'], dest: 'dist/about.html'} {src: ['contact.html'], dest: 'dist/contact.html'} ] } } 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
critical: {
  dist: {
    options: {
      base: './',
      dimensions: [{
        width: 1300,
        height: 900
       },
       {
        width: 500,
        height: 900
      }]
    },
    files: [
      {src: ['index.html'], dest: 'dist/index.html'},
      {src: ['blog.html'], dest: 'dist/blog.html'}
      {src: ['about.html'], dest: 'dist/about.html'}
      {src: ['contact.html'], dest: 'dist/contact.html'}
    ]
  }
}


您还可以使用以下代码对给定文件夹中的每个HTML文件执行任务:

critical: { dist: { options: { base: './', dimensions: [{ width: 1300, height: 900 }, { width: 500, height: 900 }], src: '*.html', dest: 'dist/' } } } 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
critical: {
  dist: {
    options: {
      base: './',
      dimensions: [{
        width: 1300,
        height: 900
      },
      {
        width: 500,
        height: 900
      }],
      src: '*.html',
      dest:  'dist/'
    }
  }
}


上面的代码示例可以让您深入了解如何在您的网站上实现。

关键CSS实践

使用关键CSS,我们需要改变我们处理CSS的方式 – 这意味着将其分成两个文件。 对于第一个文件,我们仅提取渲染上述内容所需的最小CSS集,然后将其内联在网页中。 对于第二个文件或非关键的CSS,我们异步加载它,以免阻塞网页。

一开始似乎有点奇怪,但是通过将关键的CSS集成到HTML中,我们可以消除关键路径中的额外的请求。 这使我们能够在一次请求中提供关键的CSS,以尽快向用户展示页面。

下面的代码给出了一个基本的例子。

JavaScript

<!doctype html> <head> <style> /* 内联CSS */ </style> ``<script> loadCSS('non-critical.css'); </script>`` </head> <body> ...body goes here </body> </html>

1
2
3
4
5
6
7
8
9
&lt;!doctype html&gt;
&lt;head&gt;
  &lt;style&gt; /* 内联CSS */ &lt;/style&gt;
  ``&lt;script&gt; loadCSS('non-critical.css'); &lt;/script&gt;``
&lt;/head&gt;
&lt;body&gt;
  ...body goes here
&lt;/body&gt;
&lt;/html&gt;

如上,我们将关键CSS内联在style 标签中。然后,使用 loadCSS(); 异步加载非关键的CSS。 这很重要,因为我们在展示首屏后加载繁重的(非关键) CSS。

起初,这似乎是一场噩梦。 为什么要手动在每个页面内嵌CSS片段? 但是有一个好消息,这个过程可以自动化,在这个例子中,我将运行一个名为Critical 的工具。 Addy Osmani 创造,它是一个允许您自动提取和内联关键路径CSS到HTML中的的Node.js包。 我将把这个工具和 Grunt 一起介绍, Grunt是一个JavaScript 任务执行器, 自动处理CSS。 如果你之前没听过Grunt, 这个网站有一些非常 详细文档, 以及配置项目的各种解释。我之前博客介绍过这个工具.

页面渲染

在这一点上,经过工作和汗水得出这些细节,我确信我的 Google PageSpeed Insights 的分数将是90s。

澳门新浦京娱乐场网站 11

在移动平台PSI分数为73/100,而桌面平台上好一点在88/100。它建议我“消除render-blocking的JavaScript和CSS”。

render-blocking文件增加了浏览器显示内容的时间,因为这些文件需要先下载并处理。多个render-blocking文件需要浏览器使用多个线程去获取和处理它们,等待时间进一步增加。

澳门新浦京娱乐场网站 12

优化JavaScript、CSS和web字体的传输,可以提高页面的“第一时间渲染。将这个时间降到最低,理解“关键的渲染路径”很重要,它描述了在当页面的第一个字节被收到,与页面第一次渲染成像素之间发生了什么。

WebPagetest 是用来帮助你配置网站和页面性能最好的可视化工具。

澳门新浦京娱乐场网站 13

About页面在渲染优化前的WebPagetest结果

当最小化第一次渲染时间时,我们更多的关注以尽可能快的速度渲染内容,然后允许额外的“东西”在处理过程中逐步渲染。

性能测试

下面的这些性能测试工具,使用了量化的方式测试了网站中诸如首字节加载时间(time to first byte)或者渲染时间等表现。有些工具还会检查特别检查资源是否被缓存,多个 CSS 或 JS 文件是否值得合并。

CDNperf

上述的 CDNs 并不能托管你任意的资源,它们往往只是托管最频繁用到的文件。虽然对于线上产品来说将资源和服务器托管到私有的 CDN 上并不是最好的方式,但这种方式对于分发资源来说仍然是快速和简单的。

CDNperf 可以帮你找出最快和最可信赖的 JavaScript CDNS,让你的网站更快更有朝气。

澳门新浦京娱乐场网站 14cdnperf

下面的这些性能测试工具,使用了量化的方式测试了网站中诸如首字节加载时间(time to first byte)或者渲染时间等表现。有些工具还会检查特别检查资源是否被缓存,多个 CSS 或 JS 文件是否值得合并。

测试

一如以往,测试任何新的变化是非常重要的。 如果您想要测试更改,有一些很棒的工具可以在线免费使用。进到 Google’s PageSpeed Insights 并通过该工具运行您的URL。 您应该注意到,您的网页现在不再具有任何阻塞资源,并且您的性能改进建议已经变绿 。而你可能也熟悉了另一个伟大的工具。WebPagetest

澳门新浦京娱乐场网站 15

使用WebPagetest是测试您的网页及时呈现的好方法。 (查看大图)

它是一个免费的工具,可以让您从全球各个地点进行网站速度测试。 除了对您的网页的内容进行丰富的分析性审查,如果您选择“Visual Comparison”, 该工具将比较两个网页。 这是比较更新您的关键CSS之前和之后的结果并回放差异的好方法。

使用关键CSS的想法是,我们的网页会尽快呈现,从而尽快向用户展示内容。 测量这个的最好方法是使用 speed index. WebPagetest采用的测量方法是衡量页面内容的视觉填充速度。SpeedIndex测量可视页面加载的视觉进度,并计算内容绘制速度的总体得分。 比较 SpeedIndex测量通过内联关键CSS之前和之后的改变。 您将对您的渲染时间的改变大吃一惊。

开始

我们先从Node.js控制台开始,并导航到您的网站的路径。 通过在您的控制台中输入以下命令来安装Grunt命令行界面:

npm install -g grunt-cli 

1
2
npm install -g grunt-cli


这将把grunt命令放在你的系统路径中,允许从任何目录运行它。 接下来,使用以下命令安装Grunt任务运行程序:

npm install grunt --save-dev 

1
2
npm install grunt --save-dev


然后安装 grunt-critical 插件.

npm install grunt-critical --save-dev 

1
2
npm install grunt-critical --save-dev


接下来,您需要创建项目任务配置的Gruntfile。 看起来有点像下面的代码。

module.exports = function (grunt) { grunt.initConfig({ critical: { dist: { options: { base: './' }, // The source file src: 'page.html', // The destination file dest: 'result.html' } } }); // Load the plugins grunt.loadNpmTasks('grunt-critical'); // Default tasks. grunt.registerTask('default', ['critical']); }; 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module.exports = function (grunt) {
grunt.initConfig({
  critical: {
    dist: {
      options: {
        base: './'
      },
      // The source file
      src: 'page.html',
      // The destination file
      dest: 'result.html'
      }
    }
  });
  // Load the plugins
  grunt.loadNpmTasks('grunt-critical');
  // Default tasks.
  grunt.registerTask('default', ['critical']);
};


在上面的代码中,我配置了 Critical 插件来查看我的page.html文件。 然后它会根据给定的页面处理CSS来计算关键的CSS。 接下来,它将内联关键的CSS并相应地更新HTML页面。

通过在控制台中输入grunt来运行插件。

澳门新浦京娱乐场网站 16

使用Grunt自动检测网络性能。(查看大图)

如果您导航到该文件夹,则应该会注意到一个名为result.html的文件,其中包含内联的关键CSS,而剩余的CSS异步加载。 您的网页现在就可以使用了!

在幕后, 插件自动使用 PhantomJS, 一个无头WebKit浏览器,捕获所需的关键CSS。 这意味着它能够静默地加载您的网页并测试最佳关键CSS。 这个功能还保证了插件在不同屏幕尺寸上的灵活性。 例如,您可以提供不同的屏幕尺寸,插件将相应地捕获并内联您的关键CSS

critical: { dist: { options: { base: './', dimensions: [{ width: 1300, height: 900 }, { width: 500, height: 900 }] }, files: [ {src: ['index.html'], dest: 'dist/index.html'} ] } } 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
critical: {
  dist: {
    options: {
      base: './',
      dimensions: [{
        width: 1300,
        height: 900
      },
      {
        width: 500,
        height: 900
      }]
    },
    files: [
      {src: ['index.html'], dest: 'dist/index.html'}
    ]
  }
}


上面的代码将从多个维度处理给定的文件,并内联相应的关键CSS。 这意味着您可以根据多个屏幕宽度运行您的网站,并确保您的用户仍然拥有相同的体验。 我们知道,使用3G和4G的移动连接可能是不稳定的 – 这就是为什么这种技术对于移动用户来说如此重要。

CSS

默认情况下,浏览器将CSS作为渲染阻塞;因此,当它加载时,浏览器暂停渲染,等待CSS已经被下载和处理。外部样式表意味着更多的网络线程,它增加了等待时间,同时大型样式表也会增加等待时间。

我们可以通过在<head>标签内联“关键CSS”来改善页面渲染时间,这样浏览器可以不用再等待下载整个样式表,就可以快速地渲染页面内容,然后通过non-rendering-blocking方式加载完整的样式表。

XHTML

<head> <style> /* inline critical CSS */ </style> </head>

1
2
3
4
5
<head>
  <style>
    /* inline critical CSS */
  </style>
</head>

确定哪些CSS是关键需要(1)查看移动或桌面下页面视口(viewport )大小,(2)识别视口中可见的元素(3)选择这些元素关联的CSS。

这可能有点棘手,特别是手工完成,但是有一些神奇的工具可以帮助加快甚至自动化这个过程。我使用 Filament Group编写的 grunt-criticalcss来帮助我为页面生成关键CSS,然后再手动优化一些CSS(合并重复的媒体查询和删除我认为不必要的CSS)。

澳门新浦京娱乐场网站 17

About页面只加载关键CSS(左侧)和加载整个CSS(右侧)的对比

现在关键CSS已经内联到<head>标签内,我使用loadCSS工具来异步加载样式表的其余部分。

XHTML

<head> <style> /* inline critical CSS */ </style> <script> // inline the loadCSS script function loadCSS( href, before, media, callback ){ ... } // then load your stylesheet loadCSS("/path/to/stylesheet.css"); </script> <noscript> <link href="/path/to/stylesheet.css" rel="stylesheet"> </noscript> </head>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<head>
  <style>
    /* inline critical CSS */
  </style>
  <script>
   // inline the loadCSS script
   function loadCSS( href, before, media, callback ){ ... }
   // then load your stylesheet
   loadCSS("/path/to/stylesheet.css");
  </script>
  <noscript>
    <link href="/path/to/stylesheet.css" rel="stylesheet">
  </noscript>
</head>

谷歌也给出non-render-blocking加载CSS的 另一个示例 。

WebPagetest

WebPagetest 是性能测试的黄金标准,它提供了多方面的量化指标用于性能测试,比如有一个基本的评分,用于评价当前页面优化的水平;有一个截图,显示页面加载后的视觉效果;还有一个浏览器加载资源的瀑布流…

根据用户浏览器真实的连接速度,在全球范围内进行网页速度测试,并提供详细的优化建议。

澳门新浦京娱乐场网站 18

通过使用 API wrapper,也可以将 WebPagetest 的相关服务添加到 NPM 模块和命令行工具中。

  • webpagetest-mapper:将 WebPageTest 的测试数据转换为可读的文档格式。
  • WPT Bulk Tester:使用 Google Docs 测试多个 URLs(如果你拥有 API key,也可以使用 webpagetest.org 来做这件事,或者其他公开可访问的实例)。

WebPagetest

WebPagetest 是性能测试的黄金标准,它提供了多方面的量化指标用于性能测试,比如有一个基本的评分,用于评价当前页面优化的水平;有一个截图,显示页面加载后的视觉效果;还有一个浏览器加载资源的瀑布流...

根据用户浏览器真实的连接速度,在全球范围内进行网页速度测试,并提供详细的优化建议。

澳门新浦京娱乐场网站 19webpagetest

通过使用 API wrapper,也可以将 WebPagetest 的相关服务添加到 NPM 模块和命令行工具中。

  • webpagetest-mapper:将 WebPageTest 的测试数据转换为可读的文档格式。
  • WPT Bulk Tester:使用 Google Docs 测试多个 URLs(如果你拥有 API key,也可以使用 webpagetest.org 来做这件事,或者其他公开可访问的实例)。

深入了解

正如大多数优化工具,对你的网站总有利弊。弊端之一是 丢失浏览器中的CSS缓存 。 如果动态网页更改频繁,我们不希望缓存HTML页面 这意味着内联CSS 每次重新下载。 需要说明的是只列出关键的CSS,异步加载剩下的非关键的CSS。 我们可以缓存非关键的CSS。有很多争论和反对关于在``中内联CSS, 了解更多我推荐 Hans Christian Reinl的博客 “澳门新浦京娱乐场网站:前端性能优化和测试工具总结,什么是关键。A counter statement: Putting the CSS in the head”。

如果您使用(CDN),也值得一提的是,您还应该 从CDN中提供非关键的CSS。 这样做允许您直接从边缘提供缓存的资源,提供更快的响应时间,而不是一路路由到源服务器来获取它们。

对于传统的网页,内联CSS的技术运作良好,但根据您的情况,可能并不总是适用。 如果您有客户端JavaScript生成HTML怎么办? 如果您在单页面应用程序上怎么办? 如果您尽可能多地输出关键的CSS,它将提升页面渲染效果。 了解关键CSS的工作原理及是否适用于您的网页,这一点很重要。 我喜欢Guy Podjarny对此的立场:

“尽管有这些限制,Inline在前端优化领域仍然是一个很重要的工具。 因此,你应该使用它,但要小心,不要滥用它。“

—Guy Podjarny

在 “为什么内联一切不是答案”,他提供了关于什么时候应该_什么时候不应该嵌入CSS的好建议。

在生产环境中使用Critical

使用Critical这样的工具是自动提取和内联关键CSS的好方法,而无需改变开发网站的方式,但是如何适应真实场景? 要将新更新的文件置于目标文件,您只需按照通常的方式进行部署 – 无需在生产环境中更改。 您只需记住,每次构建或更改CSS文件时,都需要运行Grunt。

我们在本文中运行的代码示例涵盖了单个文件的使用,但是当您需要处理多个文件关键CSS甚至整个文件夹时会发生什么? 您的Gruntfile可以更新以处理多个文件,类似于下面的示例。

critical: { dist: { options: { base: './', dimensions: [{ width: 1300, height: 900 }, { width: 500, height: 900 }] }, files: [ {src: ['index.html'], dest: 'dist/index.html'}, {src: ['blog.html'], dest: 'dist/blog.html'} {src: ['about.html'], dest: 'dist/about.html'} {src: ['contact.html'], dest: 'dist/contact.html'} ] } } 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
critical: {
  dist: {
    options: {
      base: './',
      dimensions: [{
        width: 1300,
        height: 900
       },
       {
        width: 500,
        height: 900
      }]
    },
    files: [
      {src: ['index.html'], dest: 'dist/index.html'},
      {src: ['blog.html'], dest: 'dist/blog.html'}
      {src: ['about.html'], dest: 'dist/about.html'}
      {src: ['contact.html'], dest: 'dist/contact.html'}
    ]
  }
}


您还可以使用以下代码对给定文件夹中的每个HTML文件执行任务:

critical: { dist: { options: { base: './', dimensions: [{ width: 1300, height: 900 }, { width: 500, height: 900 }], src: '*.html', dest: 'dist/' } } } 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
critical: {
  dist: {
    options: {
      base: './',
      dimensions: [{
        width: 1300,
        height: 900
      },
      {
        width: 500,
        height: 900
      }],
      src: '*.html',
      dest:  'dist/'
    }
  }
}


上面的代码示例可以让您深入了解如何在您的网站上实现。

JavaScript

JavaScript也会导致render-blocking因此它的加载也应该优化可以使用以下的方法:

  1. 小的内联脚本。
  2. 在文档底部加载外部脚本。
  3. 使用defer属性推迟执行脚本。
  4. 使用async属性异步加载的脚本。

XHTML

<head> <script> // small inline JS </script> </head> <body> ... <script src="/path/to/independent-script.js" async> <script src="/path/to/parent-script.js" defer> <script src="/path/to/dependent-script.js" defer> </body>

1
2
3
4
5
6
7
8
9
10
11
<head>
  <script>
    // small inline JS
  </script>
</head>
<body>
  ...
  <script src="/path/to/independent-script.js" async>
  <script src="/path/to/parent-script.js" defer>
  <script src="/path/to/dependent-script.js" defer>
</body>

在解析HTML时 defer推迟下载脚本,一旦页面渲染完成执行脚本。defer支持很不错,但据报道存在不一致和不可靠性,所以最好同时使用defer并把脚本放置在文档底部。

在HTML解析和执行时异步下载脚本文件。这允许多个脚本文件并发下载和执行;然而,他们不能保证在一个特定的顺序加载。如果相互依赖可能需要在这些场景下修改任意脚本。

async支持大不如defer,这就是为什么我选择使用loadJS,用来异步加载JS文件的脚本。它支持老式浏览器,同时有一个有用的特性,即根据条件加载脚本。

XHTML

<head> <script> // small inline JS </script> </head> <body> ... <script> // inline loadJS function loadJS( src, cb ){ .. } // then load your JS loadJS("/path/to/script.js"); </script> <script src="/path/to/parent-script.js" defer> <script src="/path/to/dependent-script.js" defer> </body>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<head>
  <script>
    // small inline JS
  </script>
</head>
<body>
  ...
  <script>
    // inline loadJS
    function loadJS( src, cb ){ .. }
    // then load your JS
    loadJS("/path/to/script.js");
  </script>
  <script src="/path/to/parent-script.js" defer>
  <script src="/path/to/dependent-script.js" defer>
</body>

Yslow

Yslow 基于 Yahoo 的高性能网页教条,分析网页的性能并给出响应缓慢的原因。

Yslow

Yslow 基于 Yahoo 的高性能网页教条,分析网页的性能并给出响应缓慢的原因。

这不完美

虽然生成和内联关键CSS所需的许多工具都在不断改进,但可能还有一些需要改进的领域。 如果您发现任何错误,您的项目,open up an issue 或提出请求,并在GitHub贡献项目。

为您的网站优化关键渲染路径可以大大改善页面加载时间。 使用这种技术使我们能够使用响应式布局,而不会影响其众所周知的优点。 这也是确保您的页面加载快速而不妨碍您的设计的好方法。

测试

一如以往,测试任何新的变化是非常重要的。 如果您想要测试更改,有一些很棒的工具可以在线免费使用。进到 Google’s PageSpeed Insights 并通过该工具运行您的URL。 您应该注意到,您的网页现在不再具有任何阻塞资源,并且您的性能改进建议已经变绿 。而你可能也熟悉了另一个伟大的工具。WebPagetest

澳门新浦京娱乐场网站 20

使用WebPagetest是测试您的网页及时呈现的好方法。 (查看大图)

它是一个免费的工具,可以让您从全球各个地点进行网站速度测试。 除了对您的网页的内容进行丰富的分析性审查,如果您选择“Visual Comparison”, 该工具将比较两个网页。 这是比较更新您的关键CSS之前和之后的结果并回放差异的好方法。

使用关键CSS的想法是,我们的网页会尽快呈现,从而尽快向用户展示内容。 测量这个的最好方法是使用 speed index. WebPagetest采用的测量方法是衡量页面内容的视觉填充速度。SpeedIndex测量可视页面加载的视觉进度,并计算内容绘制速度的总体得分。 比较 SpeedIndex测量通过内联关键CSS之前和之后的改变。 您将对您的渲染时间的改变大吃一惊。

Web字体

Web字体使内容更加清晰和漂亮,但是也对页面渲染产生了负面影响。在加载页面时,特别是移动端的连接,你可能已经注意到文本在一段时间看不见。这被称为 FOIT(不可见文本闪动)。

澳门新浦京娱乐场网站 21

我的网站出现FOIT的样子

当浏览器尝试下载一个web字体,它将隐藏文本一段时间,直到它完成字体下载,才显示文本。在最糟糕的情况下,文本无限期地不可见,使内容完全不能阅读。

我处理FOIT 的方式是逐步加载字体,首先依赖默认和系统字体(例如Helvetica和Georgia)允许快速呈现的内容。Web字体然后使用loadCSS异步加载,同时通过 Font Face Observer库来检测字体何时下载成功。一旦字体下载且可用,一个类被添加到文档中,用于设置页面正确的字体。

JavaScript

<head> <style> body { font-family: Helvetica, Arial, sans-serif; } .fonts-loaded body { font-family: Roboto, Helvetica, Arial, sans-serif; } </style> <script> // inline loadCSS function loadCSS( href, before, media, callback ){ ... } // load webfonts loadCSS("//fonts.googleapis.com/css?family=Roboto:400,500,700"); // inline FontFaceObserver (function(){ ... } // detect loading of fonts var roboto400 = new FontFaceObserver("Roboto", { weight: 400 }); var roboto700 = new FontFaceObserver("Roboto", { weight: 700 }); Promise.all([ roboto400.check(), roboto700.check() ]).then(function() { document.documentElement.className = " fonts-loaded"; }); </script> </head>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<head>
  <style>
    body { font-family: Helvetica, Arial, sans-serif; }
    .fonts-loaded body { font-family: Roboto, Helvetica, Arial, sans-serif; }
  </style>
  <script>
    // inline loadCSS
    function loadCSS( href, before, media, callback ){ ... }
    // load webfonts
    loadCSS("//fonts.googleapis.com/css?family=Roboto:400,500,700");
    // inline FontFaceObserver
    (function(){ ... }
    // detect loading of fonts
    var roboto400 = new FontFaceObserver("Roboto", {
      weight: 400
    });
    var roboto700 = new FontFaceObserver("Roboto", {
      weight: 700
    });
 
    Promise.all([
      roboto400.check(),
      roboto700.check()
    ]).then(function() {
      document.documentElement.className = " fonts-loaded";
    });
  </script>
</head>

逐步加载字体将导致FOUT(没有样式的文本闪动)和FOFT(仿文本闪动),这取决于它是如何做的。

澳门新浦京娱乐场网站 22

字体逐步加载,不产生FOIT

然而,好处是内容一直可见,而不会出现看不见的情况。关于如何击败FOIT,我写了一篇的深入文章 使用字体事件加载字体。

Google PageSpeed

PageSpeed 根据网页最佳实践分析和优化测试的网页。

澳门新浦京娱乐场网站 23

PageSpeed 也有一个 CLI(Command Line Interface)工具:PSI(PageSpeed Insights with reporting)

在构建进程中,可以使用 PSI 测试移动端和桌面端的性能,最终得到可读性良好的测试结果。

澳门新浦京娱乐场网站 24

Google PageSpeed

PageSpeed 根据网页最佳实践分析和优化测试的网页。

澳门新浦京娱乐场网站 25google pagespeed

PageSpeed 也有一个 CLI(Command Line Interface)工具:PSI(PageSpeed Insights with reporting)

在构建进程中,可以使用 PSI 测试移动端和桌面端的性能,最终得到可读性良好的测试结果。

澳门新浦京娱乐场网站 26google pagespeed

更多资源

如果您喜欢使用其他构建系统(如Gulp),则可以直接使用插件,而无需下载Grunt。 还有一个有用的教程,如何使用Gulp优化基本页面.

还有其他插件可以提取你的关键CSS,比如 Penthouse,和来自Filament 公司的criticalCSS。我强烈推荐 “我们如何使RWD网站快速加载” 了解如何使用这个技术来确保他们的网页尽可能快地加载。

Smashing Magazine的总编辑Vitaly Friedman写了一篇关于Smashing Magazine如何改进表现的文章 improved the performance 。如果您想了解关于渲染路径的更多信息,那么在Udacity网站上可以免费使用 一个有用的课程。 Google Developers website 也有关于 优化CSS传输的内容。 Patrick Hamman 写了一篇博客关于 如何识别关键的CSS创建更快的网页。

默认情况下,您是否在您的项目中嵌入关键CSS? 你使用什么工具? 你遇到什么问题? 欢迎在文章下方分享你的经验!

(il, rb, ml, og)

1 赞 2 收藏 评论

澳门新浦京娱乐场网站 27

深入了解

正如大多数优化工具,对你的网站总有利弊。弊端之一是 丢失浏览器中的CSS缓存 。 如果动态网页更改频繁,我们不希望缓存HTML页面 这意味着内联CSS 每次重新下载。 需要说明的是只列出关键的CSS,异步加载剩下的非关键的CSS。 我们可以缓存非关键的CSS。有很多争论和反对关于在``中内联CSS, 了解更多我推荐 Hans Christian Reinl的博客 “A counter statement: Putting the CSS in the head”。

如果您使用(CDN),也值得一提的是,您还应该 从CDN中提供非关键的CSS。 这样做允许您直接从边缘提供缓存的资源,提供更快的响应时间,而不是一路路由到源服务器来获取它们。

对于传统的网页,内联CSS的技术运作良好,但根据您的情况,可能并不总是适用。 如果您有客户端JavaScript生成HTML怎么办? 如果您在单页面应用程序上怎么办? 如果您尽可能多地输出关键的CSS,它将提升页面渲染效果。 了解关键CSS的工作原理及是否适用于您的网页,这一点很重要。 我喜欢Guy Podjarny对此的立场:

“尽管有这些限制,Inline在前端优化领域仍然是一个很重要的工具。 因此,你应该使用它,但要小心,不要滥用它。“

—Guy Podjarny

在 “为什么内联一切不是答案”,他提供了关于什么时候应该_什么时候不应该嵌入CSS的好建议。

其它

其他方法,如启用gzip和缓存、配置SSL和从内容分发网络(CDN)获取资源,可以提高前端性能,但需要一些服务器端支持。基于篇幅所限,我不会深入他们。然而我想强调的是,我推荐使用这些方法,他们将会对你的网站性能有一个全面和积极的影响。

我将提到,因为我的网站的访问量百分比相当一部分来自美国以外,而我的服务器是位于纽约,我于是决定把我的一些资源发布到CDN上。他们部署到一个 Amazon S3  bucket上,绑定到一个CloudFront版本。

我的网站都开销到哪里去了?

评估网站在世界各地为每个移动端用户支出的维护成本。

澳门新浦京娱乐场网站 28

我的网站都开销到哪里去了?

评估网站在世界各地为每个移动端用户支出的维护成本。

澳门新浦京娱乐场网站 29what does my site cost?

这不完美

虽然生成和内联关键CSS所需的许多工具都在不断改进,但可能还有一些需要改进的领域。 如果您发现任何错误,您的项目,open up an issue 或提出请求,并在GitHub贡献项目。

为您的网站优化关键渲染路径可以大大改善页面加载时间。 使用这种技术使我们能够使用响应式布局,而不会影响其众所周知的优点。 这也是确保您的页面加载快速而不妨碍您的设计的好方法。

综述

在过去的几个月中我一直在做性能改进,尽管这有很多工作,我确实注意到了差别。我偶尔得到关于我的网站速度的评论,这是性能调整的结果。

我还没有在指标跟踪上做得很好(特别是早期),但让我们看看基于已有数据的一些比较。

平均大小 我的站点 差别
Requests 93 19 -87.6%
Page size 1950KB 524KB -73.1%
HTML 58KB 2.8KB -95.1%
Images 1249KB 66.3 -94.7%
CSS 60KB 14.6KB -75.7%
JS 303KB 6.1KB -98.0%
Fonts 87KB 10.2KB -88.3%

总体上87.5%优于平均水平!不是很坏。现在谷歌PageSpeed也给我的网站一个不错的分数。

澳门新浦京娱乐场网站 30

优化后谷歌PageSpeed的结果

关于WebPagetest的结果**,**我注意到,尽管About页面字节增加了,但开始渲染和加载的时间大大减少。

澳门新浦京娱乐场网站 31

About页面在渲染优化后的WebPagetest结果

性能改进将永远是进行时,在 HTTP/2到来的路上其中一些将改变,之前好用的技术可能不再好用,同时有些可能完全弃用。

我觉得在过去的几个月,我取得了很大的进展,也学到了很多。我的网站在Github上是开源的,所以大家可以随时看一看。我还没有弄明白这一切,但希望我所分享的所做所学,会给你一些见解。如果你有任何问题或想聊一聊,随时骚扰我的Twitter @jonsuh或者给我发 邮件。

Pingdom 网站速度测试

输入 URL 地址,即可测试页面加载速度,分析并找出性能瓶颈。

澳门新浦京娱乐场网站 32

Pingdom 网站速度测试

输入 URL 地址,即可测试页面加载速度,分析并找出性能瓶颈。

澳门新浦京娱乐场网站 33pingdom

更多资源

如果您喜欢使用其他构建系统(如Gulp),则可以直接使用插件,而无需下载Grunt。 还有一个有用的教程,如何使用Gulp优化基本页面.

还有其他插件可以提取你的关键CSS,比如 Penthouse,和来自Filament 公司的criticalCSS。我强烈推荐 “我们如何使RWD网站快速加载” 了解如何使用这个技术来确保他们的网页尽可能快地加载。

Smashing Magazine的总编辑Vitaly Friedman写了一篇关于Smashing Magazine如何改进表现的文章 improved the performance 。如果您想了解关于渲染路径的更多信息,那么在Udacity网站上可以免费使用 一个有用的课程。 Google Developers website 也有关于 优化CSS传输的内容。 Patrick Hamman 写了一篇博客关于 如何识别关键的CSS创建更快的网页。

默认情况下,您是否在您的项目中嵌入关键CSS? 你使用什么工具? 你遇到什么问题? 欢迎在文章下方分享你的经验!

(il, rb, ml, og)

1 赞 2 收藏 评论

资源

这里是丰富的有用资源,让你深入了解网站性能。

  • 深入谷歌PageSpeed
  • SpeedCurve
  • WebPagetest
  • 我的网站耗费的流量有多少?
  • 网页设计师和前端开发人员需要关注的前端性能
  • 如何让RWD网站的速度飙起来
  • 提升Smashing Magazine的性能:案例学习
  • 网站更庞大并不意味着更多的等待时间
  • 优化性能
  • RWD 膨胀 第一部分 和 第二部分
  • 谷歌PageSpeed模块
  • 负责任的社交分享链接
  • 首次访问的内联关键CSS
  • async 和 defer属性的比较
  • 使用字体事件加载字体
  • 使用字体事件再次加载字体
  • 关于字体加载后续——仿文本闪动
  • 播客——通往高性能网站

    1 赞 9 收藏 1 评论

SpeedCurve

SpeedCurve 既可以让你追踪竞争对手的性能表现,也可以追踪自己的性能表现。使用 SpeedCurve 时,你可以查看某个因素在不同站点的速度表现。对于移动用户来说,他们希望网站在手机上加载起来要快于电脑,如果感到加载迟缓,往往会迅速关上网页,所以,网站的响应速度对他们很重要。

澳门新浦京娱乐场网站 34

SpeedCurve

SpeedCurve 既可以让你追踪竞争对手的性能表现,也可以追踪自己的性能表现。使用 SpeedCurve 时,你可以查看某个因素在不同站点的速度表现。对于移动用户来说,他们希望网站在手机上加载起来要快于电脑,如果感到加载迟缓,往往会迅速关上网页,所以,网站的响应速度对他们很重要。

澳门新浦京娱乐场网站 35speedcurve

关于作者:cucr

澳门新浦京娱乐场网站 36

新浪微博:@hop_ping 个人主页 · 我的文章 · 17

澳门新浦京娱乐场网站 37

Calibre

Calibre 可以帮你追踪页面的加载时间,以及页面大小。问题页面(Janky page)?是的,Calibre 会直接告诉你哪些页面有问题。

澳门新浦京娱乐场网站 38

Calibre

Calibre 可以帮你追踪页面的加载时间,以及页面大小。问题页面(Janky page)?是的,Calibre 会直接告诉你哪些页面有问题。

澳门新浦京娱乐场网站 39image

GT Metrix

GT Metrix 结合了 Google PageSpeed 和 YSlow,帮助开发者创建快速、高效和全面优化的网页浏览体验。

澳门新浦京娱乐场网站 40

GT Metrix

GT Metrix 结合了 Google PageSpeed 和 YSlow,帮助开发者创建快速、高效和全面优化的网页浏览体验。

澳门新浦京娱乐场网站 41image

perf.js

在开发过程中,将性能的时序情况显示在页面上。

perf.js

在开发过程中,将性能的时序情况显示在页面上。

perf bar

一种简单的方式,用于快速收集和查看网页性能,提供预置的量化标准,也支持自定义的量化标准。

perf bar

一种简单的方式,用于快速收集和查看网页性能,提供预置的量化标准,也支持自定义的量化标准。

grunt-perfbudget

用于评估性能的 Grunt task。 grunt-perfbudget 使用 WebPagetest 的公有或私有实例在特定的 URL 进行测试。它会将测试结果和你预期的性能期望做比较,如果小于预期,那么这个 task 就顺利完成了,如果超过了你预期的性能期望,那么就会报告失败,并且会帮助你分析超出预期的原因。

grunt-perfbudget

用于评估性能的 Grunt task。 grunt-perfbudget 使用 WebPagetest 的公有或私有实例在特定的 URL 进行测试。它会将测试结果和你预期的性能期望做比较,如果小于预期,那么这个 task 就顺利完成了,如果超过了你预期的性能期望,那么就会报告失败,并且会帮助你分析超出预期的原因。

Sitespeed

Sitespeed.io 是一个基于最佳实践以及一些加载时序等量化标准的开源工具,有助于开发者分析网页的加载速度和渲染性能。它会从开发者的站点收集多个页面的数据,根据最佳实践等规则来分析这些网页,并将结果以 HTML 的形式输出,或者以数值的形式发送到 Graphite。

Sitespeed

Sitespeed.io 是一个基于最佳实践以及一些加载时序等量化标准的开源工具,有助于开发者分析网页的加载速度和渲染性能。它会从开发者的站点收集多个页面的数据,根据最佳实践等规则来分析这些网页,并将结果以 HTML 的形式输出,或者以数值的形式发送到 Graphite。

speedgun

该网站允许你使用 Speedgun.js 收集任意公开站点的性能数据。它会运行五次,并显示一个友好的示图,帮助开发者了解当前页面的加载过程。

speedgun

该网站允许你使用 Speedgun.js 收集任意公开站点的性能数据。它会运行五次,并显示一个友好的示图,帮助开发者了解当前页面的加载过程。

gulp size

显示项目大小。

澳门新浦京娱乐场网站 42

gulp size

显示项目大小。

澳门新浦京娱乐场网站 43image

浏览器工具盒插件

Chrome 开发者工具

在 Chrome 的开发者工具中,对于评估性能有两个非常有用的标签:Audits 和 Network。

Audit 面板用于分析加载的页面。它可以提供优化建议,减少页面加载时间,加快页面的响应速度。

澳门新浦京娱乐场网站 44image

Network 面板以动态的方式实时地展示了资源的请求和下载。虽然辨析和定位这些请求会比纯粹的加载页面多花一些时间,但这些消耗对于指导页面的性能优化是非常重要的。

澳门新浦京娱乐场网站 45image

Chrome 开发者工具

在 Chrome 的开发者工具中,对于评估性能有两个非常有用的标签:Audits 和 Network。

Audit 面板用于分析加载的页面。它可以提供优化建议,减少页面加载时间,加快页面的响应速度。

澳门新浦京娱乐场网站 46

Network 面板以动态的方式实时地展示了资源的请求和下载。虽然辨析和定位这些请求会比纯粹的加载页面多花一些时间,但这些消耗对于指导页面的性能优化是非常重要的。

澳门新浦京娱乐场网站 47

火狐开发者浏览器

该浏览器是为开发者而创造的,专注于服务开发者的工作流。这是有史以来第一次,将构建、测试和扩展等服务集中于一体。

更多信息请查看 MDN 上的 Network Monitor。

火狐开发者浏览器

该浏览器是为开发者而创造的,专注于服务开发者的工作流。这是有史以来第一次,将构建、测试和扩展等服务集中于一体。

更多信息请查看 MDN 上的 Network Monitor。

Page performance

这个扩展插件应用于 Chrome 浏览器,可以开速分析当前页面的性能。如果浏览器打开了多个标签,那么该插件会自动分析当前页面的性能表现。

澳门新浦京娱乐场网站 48image

Page performance

这个扩展插件应用于 Chrome 浏览器,可以开速分析当前页面的性能。如果浏览器打开了多个标签,那么该插件会自动分析当前页面的性能表现。

澳门新浦京娱乐场网站 49

PerfAudit

我们审查页面的加载和渲染性能。对于令人反感的响应缓慢和问题页面,我们有义不容辞的使命提供快速、稳定和准确的页面。

审查

Perfmonkey

PerfMonkey 让追踪页面的渲染性能变得无比简单。

PerfAudit

我们审查页面的加载和渲染性能。对于令人反感的响应缓慢和问题页面,我们有义不容辞的使命提供快速、稳定和准确的页面。

ImageOptim

ImageOptim 是一个免费的应用,它在减少图片体积、提高加载速度的同时,还不会牺牲图片质量。它优化了压缩参数、移除了无用的头信息和非必要的颜色配置信息。

澳门新浦京娱乐场网站 50image

它也可以被集成到 Grunt 和 Gulp 中。

Perfmonkey

PerfMonkey 让追踪页面的渲染性能变得无比简单。

SVGO

SVG Optimizer 是一个基于 Nodejs 的 SVG 矢量图形优化工具。

如果你需要的是交互界面的操作,而不是 CLI,那么可以下载这个 APP。

SVG 和图片

SVGOMG

SVGOMG 是 SVGO's Missing GUI 的缩写,旨在揭露 SVG 文件的主要问题,而不具有 SVGO 的完整可配置项。

澳门新浦京娱乐场网站 51image

ImageOptim

ImageOptim 是一个免费的应用,它在减少图片体积、提高加载速度的同时,还不会牺牲图片质量。它优化了压缩参数、移除了无用的头信息和非必要的颜色配置信息。

澳门新浦京娱乐场网站 52

它也可以被集成到 Grunt 和 Gulp 中。

手动优化 SVGs

类似于其他的图形文件,SVG 也应该在上线前被优化。虽然有许多类似 Raymond 的工具可以帮你做这种优化,但最好的方式还是深入理解其细节并做一些手动的优化。

SVGO

SVG Optimizer 是一个基于 Nodejs 的 SVG 矢量图形优化工具。

如果你需要的是交互界面的操作,而不是 CLI,那么可以下载这个 APP。

Triamge

Triamge 是一个扩平台的 GUI 和 CLI 工具,用于优化网站的图片文件。它组合使用 optipng、pngcrush、advpng 和 jpegoptim,并根据文件类型做优化(最新版本中,已经支持 PNG 和 JPG)。

澳门新浦京娱乐场网站 53image

SVGOMG

SVGOMG 是 SVGO’s Missing GUI 的缩写,旨在揭露 SVG 文件的主要问题,而不具有 SVGO 的完整可配置项。

澳门新浦京娱乐场网站 54

CSS Triggers

该网站用于展示哪些 CSS 属性可以影响浏览器的布局、渲染和其他组合操作。

澳门新浦京娱乐场网站 55image

更多有关 CSS-triggers 的消息,可以点击这里查看。

手动优化 SVGs

类似于其他的图形文件,SVG 也应该在上线前被优化。虽然有许多类似 Raymond 的工具可以帮你做这种优化,但最好的方式还是深入理解其细节并做一些手动的优化。

CSS Stats

该网页应用以可视化的形式展示了开发者项目中有关 CSS 的统计信息。

澳门新浦京娱乐场网站 56image

Triamge

Triamge 是一个扩平台的 GUI 和 CLI 工具,用于优化网站的图片文件。它组合使用 optipng、pngcrush、advpng 和 jpegoptim,并根据文件类型做优化(最新版本中,已经支持 PNG 和 JPG)。

澳门新浦京娱乐场网站 57

CSS Shrink

CSS 压缩工具。由于 CSS 是页面渲染的核心文件,所以必须保持轻巧,便于快速响应和渲染。

CSS

uncss

UnCSS 是一个用于移除脚本中无用 CSS 的工具。它可以审查多个文件,也可以审查由 JavaScript 注入的 CSS。

它也可以被集成到 Grunt 和 Gulp 中。

CSS Triggers

该网站用于展示哪些 CSS 属性可以影响浏览器的布局、渲染和其他组合操作。

澳门新浦京娱乐场网站 58

更多有关 CSS-triggers 的消息,可以点击这里查看。

Critical path

提取和整合 HTML 中关键的 CSS。

CSS Stats

该网页应用以可视化的形式展示了开发者项目中有关 CSS 的统计信息。

澳门新浦京娱乐场网站 59

HTMLMinifier

HTMLMinifier 是一个高度可配置、经过完善的测试、基于 JavaScript 的 HTML 压缩工具,并且内置了代码审查类的工具。

CSS Shrink

CSS 压缩工具。由于 CSS 是页面渲染的核心文件,所以必须保持轻巧,便于快速响应和渲染。

gulp-htmlmin

用于压缩 HTML 的 gulp 插件。

uncss

UnCSS 是一个用于移除脚本中无用 CSS 的工具。它可以审查多个文件,也可以审查由 JavaScript 注入的 CSS。

它也可以被集成到 Grunt 和 Gulp 中。

grunt-contrib-htmlmin

用于压缩 HTML 的 grunt 插件。

Critical path

提取和整合 HTML 中关键的 CSS。

uglifyjs

JavaScript 解析器、混淆、压缩和美化工具集。

它也可以被集成到 Grunt 和 Gulp 中。

HTML

你也许并不需要某些 jQuery 插件

jQuery 及其附属工具都是非常优秀的项目,使用它们往往使开发工作轻松而又快捷。

另一方面,如果你正在开发一个库,那么你需要思考一下是否真的需要依赖于 jQuery。也许你只需要引入几行代码,就可以放弃引入一个库实现某些功能。如果你的库只是针对于高级浏览器,那么可能直接调用浏览器的内置函数就可以实现相关功能了。

澳门新浦京娱乐场网站 60image

  • Usertiming API
  • Jank Free
  • Scrolling performance
  • Mobile web performance auditing
  • Gone in 60 frames per second
  • Udacity course on rendering performance

HTMLMinifier

HTMLMinifier 是一个高度可配置、经过完善的测试、基于 JavaScript 的 HTML 压缩工具,并且内置了代码审查类的工具。

gulp-htmlmin

用于压缩 HTML 的 gulp 插件。

grunt-contrib-htmlmin

用于压缩 HTML 的 grunt 插件。

JavaScript

uglifyjs

JavaScript 解析器、混淆、压缩和美化工具集。

它也可以被集成到 Grunt 和 Gulp 中。

你也许并不需要某些 jQuery 插件

jQuery 及其附属工具都是非常优秀的项目,使用它们往往使开发工作轻松而又快捷。

另一方面,如果你正在开发一个库,那么你需要思考一下是否真的需要依赖于 jQuery。也许你只需要引入几行代码,就可以放弃引入一个库实现某些功能。如果你的库只是针对于高级浏览器,那么可能直接调用浏览器的内置函数就可以实现相关功能了。

澳门新浦京娱乐场网站 61

扩展阅读

  • Usertiming API
  • Jank Free
  • Scrolling performance
  • Mobile web performance auditing
  • Gone in 60 frames per second
  • Udacity course on rendering performance

    1 赞 6 收藏 评论

澳门新浦京娱乐场网站 62

本文由澳门新浦京娱乐场网站发布于新浦京娱乐场官网,转载请注明出处:澳门新浦京娱乐场网站:前端性能优化和测试工