,想要充分了解本文内容,你必须了解以下概念:,优化包含了改善 API 的响应时间。响应时间越短,API 的速度越快。,我将在本文分享一些技巧,帮助你缩短响应时间、降低延迟、管理错误和吞吐量,并且最大限度地减少 CPU 和内存的使用。,异步函数就像 JavaScript 的心脏。因此,优化 CPU 使用率的最佳方法就是编写异步函数来执行非阻塞 I/O 操作。,I/O 操作包括对数据的读和写。它可以在数据库、云存储或者任何本地磁盘上进行。,在大量使用 I/O 操作的应用使用异步函数可以提高效率。因为由于没有阻塞 I/O,当一个请求在做输入/输出操作的时候,CPU 可以同时处理多个请求。,举例如下:,当我们使用 cookie 或者 session 来存储临时状态的时候,会占用非常多的服务器内存。,现在通用无状态 API,并且也有 JWT、OAuth 等验证机制。验证令牌保存在客户端以便服务器管理状态。,JWT 是基于 JSON 的用于 API 验证的安全令牌。JWT 可以被看到,但一旦发送就无法修改。JWT 只是一个序列并没有加密。OAuth 不是 API 或服务——相反,它是授权的开放标准。OAuth 是一组用于获取令牌的标准步骤。,同时,也不要把时间浪费在使用 Node.js 来服务静态文件。这方面 NGINX 和 Apache 做得更好。,使用 Node 搭建 API 的时候,不要在响应中发送完整的 HTML 页面。当仅有数据通过 API 发送的时候,Node 服务得会更好。大部分 Node 应用都使用 JSON 数据。,优化 Node API 的重要一环是优化查询。特别是对于大型应用来说,我们需要多次查询数据库,所以一个糟糕的查询会降低应用的整体性能。,索引是一种优化数据库性能的方法,通过最小化处理查询时所需的磁盘访问次数来实现。它是一种数据结构技术,用于快速定位和访问数据库中的数据。索引是使用几个数据库列创建的。,假设我们有一个没有索引的数据库模式,并且数据库包含 100 万条记录。与带有索引的模式相比,使用没有索引的模式做一个简单的 find(查找)查询将扫描更多的记录来找到匹配的记录。,两者之间扫描文件的数量相差巨大 ~ 1038:,PM2 是为 Node.js 应用程序设计的生产流程管理器。它内置了负载平衡器,允许应用程序在不修改代码的情况下,作为多个进程运行。,使用 PM2 时的应用停机时间几乎为零。总体来说,PM2 确实可以提升 API 性能和并发性。,在生产环境中部署代码并运行以下命令以查看 PM2 集群如何在所有可用 CPU 上进行扩展:,第一字节时间是一种测量方式,用作表示 Web 服务器或者其他网络资源的响应时间。TTFB 测量从用户或客户发出 HTTP 请求到客户的浏览器收到页面的第一个字节的时间。,所有用户访问浏览器的同一页面加载速度不可能在 100 毫秒之内,这仅仅是因为服务器和用户之间的物理距离。,我们可以通过使用 CDN 和全球本地数据中心缓存内容来减少第一个字节的时间。这有助于用户以最小的延迟访问内容。你可以从 Cloudflare 提供的 CDN 解决方案开始着手。,监视 API 是否正常工作最好的办法是记录行为,于是记录日志就派上用场。,一个常见的办法是将记录打印在控制台上(使用console.log())。,比console.log()更高效的方法是使用 Morgan、Buyan 和 Winston。我将在这里以 Winston 为例。,可以使用以下命令行设置 Winston:,这里是使用 Winston 记录的基本配置:,除了上述使用的这些技巧,我们还可以使用 HTTP/2 而不是 HTTP,因为它具备以下优势:,它专注提高性能,并解决 HTTP 的问题。它使网页浏览更快、更容易,并且消耗更少的带宽。,使用 async.js 来运行任务。并行任务对 API 的性能有很大改善,它减少了延迟并最大限度地减少了阻塞操作。,并行意味着同时运行多个任务。当你并行任务的时候,不需要控制程序的执行顺序。,以下是一个数组异步并行的简单例子:,在以上例子中,我们使用了 async.js 以异步的形式执行了两个任务。task 1 需要 200 毫秒完成,但是 task 2 不需要等待 task 1 完成后再执行 – 它在设定的 100 毫秒后执行。,并行任务对 API 的性能有很大的影响。它减少了延迟并最大限度地减少了阻塞操作。,Redis 是 Memcached 的高级版本。它通过在服务器的主内存中存储和检索数据来优化 API 响应时间。它提高了数据库查询的性能,也减少了访问延迟。,在下面的代码片段中,我们分别调用了不使用 Redis 和使用 Redis 的 API,并比较了响应时间。,响应时间差异巨大~ 899.37 毫秒:,以下是不使用 Redis 的 Node:,以下是使用 Redis 的 Node:,在本指南中,我们了解了如何优化 Node.js API 的响应时间。,JavaScript 重度依赖函数,因此,使用异步函数可以使脚本运行得更快并且不阻塞。,除此之外,我们还可以使用缓存记忆(Redis)、数据库索引、TTFB 和 PM2 集群来提高响应速度。,最后请记住,注意路由的安全性并尽可能优化路由也很重要。我们不能为了提高 API 响应速度而妥协掉安全性。因此,在 Node.js 中构建优化的 API 时,应该保留所有标准安全检查。
© 版权声明
文章版权归作者所有,未经允许请勿转载。