Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

给生产环境代码留 debug 开关

  我喜欢打 log 来 debug,不喜欢断点单步执行。因为单步执行经常会进入一些奇奇怪怪的框架级代码中,很难快速定位到问题所在。打 log 调试只要知道自己放置的 log 位置,看看哪些被执行,哪些没被执行就能从一个结果很直观地推理出 bug 出在什么地方。
  但是这篇文章并不是来推荐通过 log 来 debug 的,而是介绍一种生产环境快速查错的方法。
  在开发过程中我们经常都会打大量的 log,然后在上线前将这些 log 代码全部注释或移除掉。然而这么做真的好么?其实开发过程中的很多 log 代码都是非常有价值的,直接丢掉实在太可惜了。我的建议是留着这些 log 代码,只不过把 console.log 这个方法重写为一个空函数。这样既不会在控制台打出一坨奇怪的 log 被用户看到,又可以保留开发过程中留下的 log 代码。一旦生产环境出了 bug,我们就可以通过一个开关来开启这个 log,对于熟悉业务的开发者而言,看到 log 瞬间就能定位到 bug,节省了大量直接在生产环境 debug 的时间(因为生产环境的代码通常是压缩的,很难从中找到问题。虽然通过 source Map 之类的方式可以反压缩,但我还是觉得看 log 更容易找到错在哪儿)。
  说到开关吧,其实也是个问题。所谓的开关就是可以直接给浏览器注入的东西,如 localStorage、Cookie 以及 URL QuryString。我比较喜欢用的是 Cookie 的方式,因为 localStorage 有兼容问题,QueryString 操作的是 URL,对业务的影响比较大。只有 Cookie 是没什么副作用的,而且还可以设置超时。一个具体点的例子就是我们在 Cookie 中写入一个 mode=debug 之类的东西,然后代码中判断只有存在这个 Cookie 时才把 log 打出来。
  其实这也不算什么新科技了,很早一起大家就这么玩了。只是感觉大家把 log 代码删除掉太浪费了,所以来推广一下这个方案。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^