网站建设|Brotli的下一代服务器压缩技术比gzip好得多

你曾经使用或至少理解服务器压缩的概念,这很可能很有用。通过在将服务器上的网站资产转移到浏览器之前对其进行压缩,我们已经能够实现显着的性能提升。
请求标头中的br令牌accept-encoding,如google chrome中所示
如果您通过http访问非安全网站并查看任何资产的相同请求标头的值,您将看到该br标记不存在。
我相信你现在已经受够了炒作,并准备好让你的手弄脏brotli。因此,让我们开始使用express框架在node.js中编写一个小型web服务器,并使用该shrink-ray软件包实现brotli?。
在node.js中构建一个支持brotli的web服务器将brotli添加到现有的web服务器(如nginx或apache)可能会很不方便,具体取决于您对它们的熟悉程度。对于nginx,确实存在?brotli模块,apache也是如此,但构建和运行apache模块需要一些技术诀窍。如果你对这种东西很酷,那很好,但是我们大多数人只是想安装一些东西并且正确地进行修补!
因此,为了让自己更容易一些,我将向您展示如何使用node.js和express设置一个用javascript编写的小型brotli服务器。即使您从未使用过这些技术,也不必担心。在开始之前您需要的只是安装node.js的副本;?你将被引导整个过程。在您了解它之前,您将在本地计算机上启动并运行brotli支持的web服务器,以备您仔细检查。
安装先决条件因为我们的测试服务器是https,所以我们需要有一个证书和密钥。生成这些可能是一件苦差事。为了简化操作,您可以使用以下方法克隆我们需要的证书和目录结构git:
git clone https://github.com/malchata/brotli-server.git
这将下载一个github存储库,其中包含crt目录中的证书和密钥文件,以及一个空的web根目录htdocs。您可以通过键入进入存储库目录cd brotli-server。
(想要跳过去?如果您对从头开始编写web服务器代码并且想要正确使用brotli非常感兴趣,可以通过键入切换到包含已完成代码的分支来跳过git checkout -f brotli-server。)
为了使服务器正常工作,我们需要使用npm安装一些软件包:
npm install express https shrink-ray
这将安装三个包:
express是express框架包。这用于启动一个简单的静态web服务器,该服务器将提供htdocs目录中的内容。https?是使我们能够通过https提供文件的软件包。shrink-ray是压缩中间件,包含我们要测试的brotli功能。它还包括gzip功能。注意:如果您在windows上执行所有这些操作,则此程序包依赖于node-gyp,这对windows用户来说可能会有问题。如果您有一个linux子系统,例如windows 10上可用的linux子系统,那么您将获得更好的运气。如果您在windows上开发node,您可能会发现这些特性。如果没有,请阅读关于该主题的github要点中的此评论。安装这些依赖项可能需要一分钟。一旦完成,您就可以编写web服务器代码了!
编写web服务器代码在您选择的文本编辑器中,创建一个名为的新javascript文件https.js,并从以下代码开始:
var express = require(“express”), // imports the express package
https = require(“https”), // imports the https package
shrinkray = require(“shrink-ray”), // imports the compression middleware
fs = require(“fs”), // the file system module for reading files (part of node.js core)
path = require(“path”), // the path module for working with files and directory paths (also part of node.js core)
app = express(), // an express instance
pubdir = “./htdocs”; // the web root directory
如果您对node.js不熟悉,该require方法会导入我们需要在当前脚本中使用的模块。pubdir变量是我们用来引用htdocs目录的变量,我们将从中提供文件。
继续,我们需要shrink-ray通过告诉app对象中的express实例来使用它来从包中设置压缩中间件。我们还将指示我们的express实例静态地提供htdocs目录中的文件:
app.use(shrinkray()); // tell express to use the shrink-ray compression middleware
app.use(express.static(path.join(__dirname, pubdir))); // tell express to serve static files from the htdocs directory
我们将通过设置我们的https服务器并在端口8443上运行它来做到最好:
https.createserver({ // creates an instance of an https sever
key: fs.readfilesync(“crt/localhost.key”), // reads in the key file
cert: fs.readfilesync(“crt/localhost.crt”) // reads in the ssl certificate
}, app).listen(8443); // passes in our express instance and instructs the server to run on port 8443
现在,当我们运行我们的brotli驱动的web服务器时:
node https.js
如果一切顺利,则不会发生任何错误,服务器将启动。要测试它,请将浏览器指向https:// localhost:8443 / readme.txt,您应该会看到一条短消息。如果你已经达到这一点,那么你已经准备好验证brotli是否正常工作。
你怎么知道brotli在工作?默认情况下,shrink-ray如果请求的浏览器支持brodli,并且服务器在https上运行,则会使用brotli压缩内容。检查支持的最简单方法是获取javascript库的副本(例如react)并将其保存在htdocs目录中。
从这里,打开chrome或firefox并启动开发人员工具。您可以通过按f12windows计算机或command alt imac?来执行此操作。工具打开后,单击“网络”选项卡。“网络”标签是chrome和firefox开发人员工具中提供的常用工具,可显示给定网页的所有网络请求。打开此选项卡,导航到您在htdocs本地web服务器上的文件夹中保存的资产。您将看到网络实用程序填充了所请求的资源。
在chrome中,我们可以content-encoding在网络实用程序的“内容编码”列中看到资产标题的值。如果此列不可见,只需右键单击列标题,然后从显示的菜单中选择它。如果brotli正在运行,您应该br在“content-encoding”列中看到一个类似于下图所示的标记:
响应标头中的br令牌accept-encoding,如chrome的网络实用程序中所示(查看大图)现在我们已经验证了brotli在我们的本地测试web服务器上运行,让我们看看brotli与gzip相比的表现如何!
评估brotli的表现现在问题了:与gzip相比,brotli的表现如何?如果您不想进行大量测试,那么可以通过性能测试对brotli的性能进行全面了解。该测试设置为从文本文件中指定的热门网站下载资产,一旦收集资产,测试过程就会开始,如github存储库readme文档中所指定:
将文件内容读入内存。记下时间戳以标记测试的开始。使用brotli级别1压缩文件100次。用时间戳标记测试结束。记录压缩文件大小和压缩速度(以mb /秒为单位)。对brotli级别2到11重复步骤2到5。对gzip级别6重复步骤2到5。以json格式输出结果。基准测试文本文件中指定的网站数量巨大,因此测试需要很长时间才能完成。为了节省时间,我指定了我经常访问的20个网站(包括这个网站),并在其上运行基准测试。我觉得,与默认的gzip设置相比,这仍然可以提供brotli在所有压缩级别上的性能的高级视图6。所有brotli设置与默认gzip设置的平均压缩速度如下表所示:
算法压缩级别速度(每秒mb)
gzip的 6 11.8
brotli 1 41.5
brotli 2 16
brotli 3 13.6
brotl
上一个:深圳网站建设开发网站取得成功的重要因素有什么?
下一个:建设手机网站的两个关键点
梓潼网站建设,梓潼做网站,梓潼网站设计