近日,有一位工程师经历了一场奇特的调试之旅,成果是发现了一则奇怪的 bug。这位工程师在 Neon 的博客中分享了自己调试的过程。
故事从一个假期项目开始,这个项目是一个类似聊天室的在线聊天工具。整个项目是由 React、Node.js 和 Socket.io 构建的。工程师在开发初期就一直使用着项目中的一个默认值——限制显示的聊天消息数量为 10 条。然而,当他进一步拓展这个项目时,发现有时候会出现页面卡死的情况。
经过具体的调试,他发现原因是在当限制显示数量为 10 时,每次新增消息的时候,浏览器会卡死而无法继续更新消息。于是,他去掉了限制,调整为只显示最新的 5 条消息,这样项目可以正常运转。
但是这还没有结束,工程师并不知道问题的根源。于是他沉下心来仔细研究了 Socket.io 的文档,最终发现了祸源:每次新增一条消息,就会发送一条 Socket 消息给客户端。而在限制显示数量为 10 的情况下,就会存在过多的 Socket 消息堆积,导致浏览器崩溃。
于是,他通过调整 Socket 消息的功率,将消息频率限制在每秒发送一条,最终解决了问题。
这则故事告诉我们一个重要的经验,那就是调试的过程充满了必然的波折,有时候我们需要用一些奇特的方法去解决和修复问题。而最重要的是,要保持开放的心态,勇于承认自己的错误,并且在不断完善的过程中积累经验并且成为更好的工程师。
当 LIMIT 为 9 时正常,但 LIMIT 为 10 时卡住:这是一则短小的调试故事,但是其中包含了很多深刻的教训。在未来,我们应该注意不同的限制条件会对程序造成什么样的影响,同时要时刻保持开放的心态,努力寻找问题的根源和最佳解决方法。
了解更多有趣的事情:https://blog.ds3783.com/