如何在 JavaScript 中使用 Ethers.js 启用 RPC 调用的 Gzip 压缩

  • QuickNode
  • 发布于 2024-12-17 23:15
  • 阅读 11

本文介绍了如何在使用 ethers.js 库的 JavaScript 中启用 gzip 压缩,以提高区块链 RPC 调用的响应速度。文章详细解释了 gzip 的工作原理,并通过代码实例演示了如何设置和使用 gzip 进行性能优化。最后,作者鼓励读者订阅其新闻稿以获取更多相关信息和指导。

概述

区块链方法的 HTTP 响应可能包含大量数据,并且在客户端接收这些数据可能需要很长时间;在提供数据之前压缩这些数据并在客户端解压缩可以节省很多时间。gzip 压缩就是一种这样的压缩技术。 在本指南中,我们将深入了解 gzip 压缩以及如何使用 ethers.js 库在 JavaScript 中为 RPC 调用启用 gzip。

前提条件

  • Ethereum 节点。
  • Node.js 和 Ethers.js(版本 5.7)已安装。
  • 文本编辑器/集成开发环境(IDE)。

什么是 gzip?

Gzip 是一种数据压缩技术,这意味着将大量数据压缩成更小的体积。Gzip 是最流行的压缩技术之一,用于通过互联网以压缩格式发送大量数据。Gzip 可以很好地处理文本文件。然而,压缩和解压缩数据需要时间和计算能力。即使有这种开销,处理压缩后的数据花费的时间也显著少于处理未压缩的原始数据。

gzip 是如何工作的?

  • 当服务器收到来自客户端的 HTTP 请求时,它会检查请求头,看请求客户端软件/API/库是否支持 gzip。

  • 服务器然后在应用 gzip 之前创建数据的标记。

  • gzip 被应用于这个标记,然后将压缩后的数据提供给客户端。

  • 客户端将这些数据解压缩并进行读取。

使用 gzip 可以减少 HTTP 请求的整体响应时间。区块链上进行通信的节点使用 HTTP 请求从区块链提供数据。区块链数据庞大,接收数据可能需要几秒钟的时间,通过使用 gzip,可以压缩这些数据,从而节省大量时间和资源。

我们将使用 Ethers.js 库来演示 Ethereum 方法的 gzip 压缩。

设置你的 QuickNode Ethereum 端点

启动节点和管理节点需要大量时间和其他资源。由于本指南的目标是通过使用 gzip 来节省开发人员和用户的时间。QuickNode 支持 gzip,因此让我们在 这里 注册一个免费的 QuickNode 账户并在几秒钟内设置我们的 Ethereum 端点。

Quicknode Ethereum 端点的截图,展示在获取入门页面上的 HTTP 链接和 WSS

保存 HTTP 提供者网址,稍后将使用它。

接下来的步骤是安装 Ethers.js 库。如果你尚未安装 Ethers.js,可以按照 如何使用 Ethers.js 连接到 Ethereum 的指南进行安装。确保在本教程中使用 Ethers v5。

启用 gzip 并查看效果

创建一个 JavaScript 文件 index.js,并粘贴以下内容:

const ethers = require("ethers");

(async () => {

  const Option = {
    allowGzip: "true",
    url: "ADD_HTTP_URL_HERE",
  };

  const provider = new ethers.providers.JsonRpcProvider(Option);
  const timeStamp = "花费的时间是: "

  console.time(timeStamp);

  const block = await provider.send('debug_traceBlockByNumber', ['0xccde12', {'tracer': 'callTracer'}]);
  console.log(block);

  console.timeEnd(timeStamp);
})();

注意: debug_traceBlockByNumber 调用需要我们的 trace 附加功能。你可以将此调用替换为任何你选择的 Ethereum RPC 方法。这个方法由于发送大量数据而作为示例运行得很好。

ADD_HTTP_URL_HERE 替换之前步骤中得到的 QuickNode URL。

以上代码解释:

第 1 到 3 行:导入 ethers 库并初始化一个没有名称的异步函数。

第 5 到 8 行:声明一个 Options 数组,包含节点参数,如 allowGzip 参数和节点 URL。

第 10 行:通过将 Options 作为参数传递来实例化我们的 ethers 提供者,并将其存储在 provider 变量中。

第 11 行:创建一个名为 timeStamp 的新变量,并将字符串存储在其中。

第 13 行:控制台开始记录时间,直到请求停止。

第 15 行:将 debug_traceBlockByNumber HTTP 请求发送到节点,并将响应存储在 block 变量中。

第 16 行:打印 block 的内容。

第 17 行:停止控制台保留的时间日志。

第 18 行:调用异步函数。

保存文件并运行。

npm index

这个请求通常需要 ~20 秒才能执行完毕,即使对于一个适度填充的区块,但由于我们使用了 gzip 压缩,你应该会看到显著的差异,参见以下图片:

未启用 gzip:

启用 gzip:

结论

如果你正在阅读这篇文章,你在处理区块链方面已经更加高效。今天我们学习了什么是 gzip 以及如何在 JavaScript 中使用 Ethers.js 启用 RPC 调用的 gzip。

订阅我们的 通讯,了解更多关于 Ethereum 的文章和指南。如果你有任何反馈,请随时通过 Twitter 与我们联系。你也可以随时在我们的 Discord 社区服务器上与我们聊天,认识一些你见过的最酷的开发者 :)

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。