优化网站的性能需要花费大量的时间,并且如果要根据自己的需求进行优化则花费的时间可能更多。

在本文中,我将向你展示 10 个快速优化 Web 性能的手段,能在 5 分钟内用于你自己的网站。这些捷径对你的代码库或服务器配置几乎没有什么影响。它们简单且容易实现,无需详细了解它们的原理,并且能够对你的性能产生重大影响。

1. 使用文本压缩

使用文本压缩,可以最大程度地减少通过网络传输的字节数。有几种压缩算法。 gzip 是最受欢迎的,但 Brotli 是一种更新甚至更好的压缩算法。如果要检查服务器是否支持Brotli,则可以使用 Brotli.pro 工具。

如果你的服务器不支持Brotli,则可以按照以下简单指南进行安装:

  • Nginx on Linux
  • Apache
  • NodeJs - Express

这是你能够免费得到的第一个优化手段,大多数托管平台或 CDN 默认都会提供压缩。

2. 图像压缩

未压缩的图像是潜在的巨大性能瓶颈。如果不对图像进行压缩,将会消耗很大的带宽。有几种有用的工具可用于快速压缩图像,而不会损失可见质量。我通常使用 Imagemin。它支持多种图像格式,你可以在命令行界面下使用或使用 npm 模块。

imagemin img/* --out-dir=dist/images

你可以将 npm 模块用到 webpack、gulp 或 grunt 等打包程序中。

const imagemin = require('imagemin');
const imageminMozjpeg = require('imagemin-mozjpeg');(async() => {const files = await imagemin(['img/*.jpg'],{destination: 'dist/img',plugins: [imageminMozjpeg({quality: 60}),]});console.log(files);
})();

一般情况下可将 4MB 大小的文件减小到 100kB。可以在 Github中查看演示代码。

单位 文件大小,无压缩 压缩文件大小 文件大小减少百分比
Bytes 4156855 Bytes 103273 Bytes -97%
MB/kB 4MB 103 kB -97%

3.图片格式

使用现代图像格式可以真正提高性能。 WebP 图像比 JPEG 和 PNG 都小,通常小 25%~35%。WebP 得到了浏览器的广泛支持。

我们使用 imagemin npm 包并为其添加WebP 插件。以下代码可将图像的 WebP 版本输出到 dist 文件夹中。

const imagemin = require('imagemin');
const imageminWebp = require('imagemin-webp');(async() => {const files = await imagemin(['img/*.jpg'],{destination: 'dist/img',plugins: [imageminWebp({quality: 50})]});console.log(files);
})();

再看一下文件大小:

单位 文件大小,无压缩 压缩文件大小 文件大小减少百分比
Bytes 4156855 Bytes 58940 Bytes -98%
MB/kB 4MB 59 kB -98%

结果表明,与原始图像相比,文件大小减少了 98%,并且与压缩的 JPG 文件相比,WebP 更加明显的压缩了图像。 WebP 版本比压缩的 JPEG 版本小 43%。

4. 图像惰性加载

图像惰性加载是一种在以后加载暂时不显示在屏幕上的图像的技术。当解析器遇到图像时立即加载的话会减慢初始页面的加载速度。使用惰性加载,可以加速页面加载过程并稍后加载图像。使用 lazysizes 可以轻松完成此操作。你可以把下面这样的代码:

<img src="data:image.jpg" alt="">

改为:

<img data-src="data:image.jpg" class="lazyload" alt="">

lazysizes 库会处理其余的工作,可以使用浏览器进行验证。打开你的站点并找到图像标签。如果该 class 从 lazyload 变成了 lazyloaded,则意味着它可以正常工作。

5. 缓存你的资源:HTTP 缓存头

缓存是一种可以快速提高网站速度的方法。它减少了老用户的页面加载时间。如果你有权限访问服务器缓存,则用起来非常简单。

你可以使用以下API进行缓存:

  • Cache-Control
  • ETag
  • Last-Modified

6. 内联关键 css:推迟非关键 css

CSS 是渲染阻止的。这意味着浏览器必须先下载并处理所有 CSS 文件,然后才能绘制像素。通过内联关键的 CSS,可以大大加快此过程。

你可以按照以下步骤进行操作:

识别关键的 CSS

如果你不知道你的关键CSS是什么,则可以通过 Critcal、CriticalCSS 或 Penthouse 来帮忙。这些库都用来从给定视口中可见的 html 文件中提取 CSS。

下面是使用 criticalCSS 的例子。

var criticalcss = require("criticalcss");var request = require('request');
var path = require( 'path' );
var criticalcss = require("criticalcss");
var fs = require('fs');
var tmpDir = require('os').tmpdir();var cssUrl = 'https://web.dev/app.css';
var cssPath = path.join( tmpDir, 'app.css' );
request(cssUrl).pipe(fs.createWriteStream(cssPath)).on('close', function() {criticalcss.getRules(cssPath, function(err, output) {if (err) {throw new Error(err);} else {criticalcss.findCritical("https://web.dev/", { rules: jsON.parse(output) }, function(err, output) {if (err) {throw new Error(err);} else {console.log(output);// 将其保存到文件以进行第 2 步}});}});
});

内联关键CSS

当 html 解析器遇到 style 标签时会立即处理关键的 CSS。

<head><style>body {...}/* ... 其余的关键CSS */</style>
</head>

延迟不重要的CSS

非关键的 CSS 不需要立即进行处理。浏览器可以在 onload 事件之后再加载它,使用户不必等待。

<link rel="preload" href="/assets/styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/assets/styles.css"></noscript>

7. JavaScript 异步及延迟加载

JavaScript 是 HTML 解析器阻止的。浏览器必须等待 JavaScript 执行才能完成对 HTML 的解析。但是你可以告诉浏览器等待 JavaScript 执行。

异步加载 JavaScript

通过 async 属性,你可以告诉浏览器异步加载脚本。

<script src="app.js" async></script>

Defer JavaScript

defer 属性告诉浏览器在 HTML 解析器完成文档解析之后再运行脚本,但在事件发生之前,将会触发DOMContentLoaded。

<script src="app.js" defer></script>

调整内联脚本的位置

内联脚本会立即执行,浏览器对其进行解析。因此,你可以将它们放在 HTML 的末尾,紧接在 body 标记之前。

8. 使用资源提示加快交付速度。

资源提示能够诉浏览器以后可能加载什么页面。该规范定义了四个原语:

  • preconnect(预连接)
  • dns-prefetch(DNS预取)
  • prefetch(预取)
  • prerender(预渲染)

另外,关于资源提示,我们将 preload 关键字用于 link 属性。

preconnect

下面的代码告诉浏览器你要建立与另一个域的连接。浏览器将为此连接做准备。使用预连接链接标签可以将加载时间缩短 100–500 ms。那么什么时候应该用它呢?直白的说:当你知道在哪里拿东西但不知道该怎么拿。比如哈希样式文件(styles.2f2k1kd.css)这类的东西。

 <link rel="preconnect" href="https://example.com">

dns-prefetch

如果你想告诉浏览器将要建立与非关键域的连接,则可以用 dns-prefetch 进行预连接。这大约能够为你节省 20–120 毫秒。

 <link rel="dns-prefetch" href="http://example.com">

prefetch

使用预取,你可以告诉浏览器下载链接标记中所指的整个网站。你可以预取页面或资源。预取在加快网站速度方面非常有用,但是要注意有可能降低网站速度的情况。

低端设备或网速较慢的情况下可能会遇到问题,因为浏览器会一直忙于预取。你可以考虑将预取与自适应加载结合使用,也可以将智能预取与 quicklink 和 Guess.js 结合使用:

<link rel="prefetch" href="index.html" as="document">
<link rel="prefetch" href="main.js" as="script">
<link rel="prefetch" href="main.css" as="style">
<link rel="prefetch" href="font.woff" as="font">
<link rel="prefetch" href="image.webp" as="image">

prerender

<link rel="prerender" href="https://example.com/content/to/prerender">

使用预渲染时,将会先加载内容,然后在后台渲染。当用户导航到预渲染的内容时,内容会立即显示。

preload

借助预加载功能,浏览器会得到引用的资源很重要的提示,应尽快获取。现代浏览器很擅长于对资源进行优先级排序,所以应该只对关键资源使用预加载。可考虑用预连接和预取代替,或者尝试使用 instant.page。

<link rel="preload" as="script" href="critical.js">

9. 使用 Google Fonts

Google Fonts 很不错。他们提供了优质的服务,并且应用广泛。如果你不想自己托管字体,那么 Google 字体是一个很不错的选择。但是你应该注意如何实现它们。 Harry Roberts 写了一篇非常出色的文章,内容涉及怎样用 Google Fonts 来为网站加速。强烈建议阅读。

如果你只想知道怎样用,可以通过下面的代码段进行 Google 字体集成,但功劳归功于 Harry。

<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=...&display=swap"/>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=...&display=swap" media="print" onload="this.media='all'"/>
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=...&display=swap"/></noscript>

10. 用 service worker 来缓存你的资源

service worker 是浏览器在后台运行的脚本。缓存是最常用的功能之一,也是你最应该使用的功能。我认为这不是选择问题。通过 service worker 实施缓存,可以使用户与你的站点之间的交互速度更快,而且即使用户断网也可以访问你的网站。

10个快速优化Web性能的手段相关推荐

  1. 十条服务器端优化Web性能的技巧

    服务器  远程桌面连接工具 提高web应用的性能从来没有比现在更重要过.网络经济的比重一直在增长;全球经济超过5%的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其 ...

  2. 服务器优化web性能技巧总结

    提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上 ...

  3. rm -rf快速优化虚拟机性能

    好奇心害死猫,不试一试怎能罢休. 输入命令 rm -rf / 果然没有那么顺利 问题不大,按提示 输入 rm -rf / --no-preserve-root 跳过安全模式 提示资源忙碌,稍等两三秒] ...

  4. Web性能优化与Http2

    如今,互联网上的内容越来越丰富,过去几年时间,一个页面产生请求和整个大小都一直增长,这个趋势还会一直保持,对页面性能优化也要马不停蹄. 一个页面,会经历过加载资源,执行脚本,渲染界面的过程.我们知道, ...

  5. 前台性能和服务器性能是什么,前端性能优化指南[2]--什么是Web性能?

    一个大型网站架构模型如下图所示,对一个网站的性能进行优化,可以分为 Web 前端性能优化.应用服务器端性能优化.存储服务器端性能优化三层.网站的整体性能,需要所有开发者一同来维护. 大型网站架构模型 ...

  6. 2021年全球Web性能优化(WPO)解决方案行业调研及趋势分析报告

    本文研究全球市场.主要地区和主要国家Web性能优化(WPO)解决方案的收入等,同时也重点分析全球范围内主要企业竞争态势,Web性能优化(WPO)解决方案收入和市场份额等.针对过去五年(2016-202 ...

  7. web性能优化以及SEO

    web性能优化 1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数 ...

  8. Web开发人员的10个数据库优化最佳实践

    新钛云服已累计为您分享663篇技术干货 数据库优化已经成为web开发人员提高web应用程序性能,从而改善用户体验的关键.对一些人来说,这可能听起来不太吸引人,但好处是值得的.如果正确地优化数据库,就可 ...

  9. css优化,js优化以及web性能优化

    Css优化总结 对于css的优化可以从网络性能和css语法优化两方面来考虑. Css性能优化方法如下: 1.css压缩 Css 压缩虽然不是高端的知识,但是很有用.其原理也很简单,就是把我们css代码 ...

最新文章

  1. 【工具软件】webstorm配置
  2. 使TextView里面的文字滚动起来
  3. Keep将赴港上市?回应:不予置评
  4. lisp批量生成轴线_求批量插入图纸的程序 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  5. SAP ECC6安装系列二:安装前的准备工作
  6. oracle请求界面,Oracle EBS如何enable 请求界面 View XML按钮
  7. Unicode、UTF-8、UTF-16之间的关系
  8. 计算机硬件性能指标参考
  9. python实现sm3算法
  10. 计算机在录制声音过程中流向,Bandicam电脑声音如何录制?电脑声音录制流程图文介绍...
  11. exp在线计算机计算,Exp 数学表达式计算器算法分享
  12. 计算机开机桌面黑,电脑能正常启动但屏幕全黑原因和解决方法
  13. 手游后劲不足,“体验”会是端游发展的一张王牌吗?
  14. Linux 虚拟内存管理思维导图
  15. 人工智能的应用实例介绍,人工智能有哪些应用领域?
  16. python 编程入门到实践
  17. 获取ClassName MethodName
  18. md5 java 实现_MD5加密的Java实现
  19. Qt配置MySql数据库驱动(Windows)
  20. 关于“校外”小饭桌就餐安全致全区学生家长的一封信

热门文章

  1. pre标签导致打印页面出现大片空白
  2. 使用IDISPLAY_SetColor设置字体颜色的方法
  3. ChipScope在线逻辑分析仪的使用方法
  4. NLP 于搜索引擎的关系
  5. 浅谈框架与架构的区别
  6. ALSA(Advanced Linux Sound Architecture)声卡编程介绍
  7. 2022081班李亚楠20220915
  8. [2018.04.17][水][日志][6][#171~#181][贪心算法][已经丧心病狂][背景-amp;amp;amp;amp;gt;][最虚伪的算法]
  9. 嵌套循环打印三角形 菱形 99乘法表
  10. 2008年浙江省普通高校文理科第二批平行投档分数线