Nodejs 性能贴士。
在许多情况下,例如在处理 JSON 格式的 API 响应、处理网站上嵌入的 JavaScript 资源等时,我们经常会看到 13 位长数字,我们可能知道它是源自 new Date().getTime()
等代码的纪元时间戳,但是,作为人类,我们无法快速判断它代表什么日期和时间。有一个名为 Epoch Converter 的便捷网站可以帮助轻松将其转换为人类可读的格式,但大多数时候对于开发人员来说,甚至还有比打开网站更快捷的方法,即使用许多编程语言自带的 interactive shell
。
在处理大型文本文件(例如解析日志文件)时,出于效率和性能原因,推荐逐行加载/迭代内容,而不是将所有内容读入内存。在 Nodejs 中,这一直很麻烦,因为从日常用户的角度来看,逐行读取的方式看起来很繁琐,而且太底层了。不过,受益于最近合并到版本 v18.11.0
的 PR,情况不再如此,现在有内置的 FileHandle.prototype.readLines
,使用起来非常方便。
在其他编程语言(例如 Java、Ruby 和 Python)中,有 Thread.sleep()
、sleep
和 time.sleep()
方法来暂停当前线程的执行,并在指定时间后等待继续执行,当与循环一起使用时,它可以帮助解决竞争条件问题等。在 node.js 和一般的 JavaScript 中,由于单线程、事件驱动和异步架构的性质,暂停和等待的方式可能看起来不是很明显,也不常见。但是,由于在某些情况下仍然需要并且有助于使用 wait
和 retry
,因此可以在 nodejs 或 JavaScript 中模拟类似的功能和效果。
在 Nodejs 中,当处理非文本文件(例如图像)的 IO 操作(例如通过网络传输或从磁盘读取)时,有很大的机会以 stream.Readable
的形式接收内容,并且在我们能够处理内存中的完整数据(例如计算字节大小或图像尺寸)之前,我们需要将 stream
保存到 buffer
中,这里有几种方法。
继 将 socket.io 从 v2 升级到 v3 之后,本文是关于将 socket.io
及其相关软件包升级到撰写本文时的最新版本,唯一的设置更改似乎是来自 redis-adapater
和这次导入客户端 io
的方式(针对我们的特定用例)。
socket.io 及其相关库(例如 socket.io-redis-adapter 和 socket.io-redis-emitter)自 v3 以来在功能或行为方面发生了一些重大变化,这可能会在从 v2 迁移到 v3 时引发问题。本文列出了遇到的问题以及如何根据实际经验针对特定用例解决问题。
由于我发现自己现在越来越多地用 JavaScript 编写代码,无论是后端还是前端开发,所以我认为我应该至少认真考虑一下它,这是十多年来的第一次,以下是我在深入研究这种长期被忽视的编程语言时发现的有用的资源。
如何使用nodejs快速生成随机安全令牌。
nodenv 是一个管理多个 NodeJS 版本的好工具,这里总结了一些常用的命令,以供快速参考。