一次发明underscore源码bug的阅历以及对学术界拿来主义的思索

事变是怎样发作的

近来干了件事变,发明了 underscore 源码的一个 bug。这件事自身并没有什么可说的,然则历程值得我们沉思,纪录以下,列位看官仁者见仁智者见智。

日常平凡有阅读他人文章的习气,看到一篇关于 “函数撙节” 的文章(细致是哪篇就不说了),不过很遗憾作者好像并没有搞清楚 throttle 和 debounce 的区分(也许基础不晓得 debounce)。因而顺手 Google 了一下,发明大多半谈 “函数撙节” 的文章都邑援用《高程三》中的典范代码:

《一次发明underscore源码bug的阅历以及对学术界拿来主义的思索》

代码自身并没有题目,然则很可惜,函数名有题目,应当叫 debounce 而非 throttle,这就引发了我的思索,这个毛病的观点,这段毛病的代码,为何能够 “千载扬名”?

throttle vs debounce

因为篇幅以及主题的关联,本文并不会讲 throttle 和 debounce 的细致用法以及区分等。(对此有兴致的朋侪能够跟帖,人数多的话楼主会另开一文)

有些人能够会说,凭什么你认为的 throttle 就是 throttle,debounce 就是 debounce?这就要聊聊我关于 “明白某一个观点” 的要领。

就以 throttle 为例,某日,先生给你安排了一个功课,让你深切明白一下 throttle,第二天上课来聊聊。张三内心异常愉快,这个观点在典范书本《JavaScript高等程序设计》中见过,翻开一看,就两页,而且诠释地异常清楚,看完就愉快地干别的事变去了。而李四,以为高程三讲的有点少,而去谷歌了下其他关于 throttle 的知识点,兴奋地看到 throttle 函数的好几种写法,发明高程三只是用了最简朴的体式格局,另有更文雅应用场景更多的写法,也许此时他已发明和 throttle 同时涌现的另有个 debounce,这是什么鬼?横竖先生没说,今后再看吧,因而得偿所愿地玩游戏去了。而王五,和李四一样发明了 debounce,这是什么?一同相识了吧,继而发明 debounce 的用法竟然和高程三中的 throttle 一样!继承挖下去,发明高程三中的 throttle 函数实在应当叫 debounce,看到末了,王五已把 throttle 和 debounce 完全明白了。

我们要做王五。

起首,我们并不能只听一家之言。这里的一家是指 “个人”,关于一些官方的文档我们照样应当充足信托的。泽卡斯也是人,犯点小错在所难免。

其次,我们对信息要做充足删选。网上的信息大多鱼龙混杂,出错了也并不会对你负任何义务。那末怎样能够辨别出准确有效的信息呢?起首当然是看官方文档,比方说要相识 HTTP 那末就去看官方的 RFC,要进修 jQuery 的话能够去官网 https://jquery.org/ 查查材料,这些平常都不会有什么题目。假如以为官网材料艰涩难明,能够试着去看看 Wikipedia 或许XX百科,维基的精确度被许多人喷过,楼主以为照样值得一看的,假如看英文比较费劲的,就看看国内的一些百科。第三,就是阅读一些前人的文章了,这也是最广泛然则也最轻易殽杂观点的处所,所以我们要只管挑一些威望的专家级作者(比方楼主,开顽笑啦^_^)。第四,假如照样以为没法明白,能够试着去一些问答社区,首推 stackoverflow,国内的话能够看看 segmentfault,知乎,看赞许多的回复,平常来讲题目不大。

楼主找到的关于 throttle 和 debounce 区分的材料以下:

关于拿来主义

为何这么多文章里会涌现泽卡斯的毛病代码?楼主想到了一个词,叫做 “拿来主义”。

许多人写博客,只是为了写博客而写博客,随意谷歌百度下,找到搜刮页前几个链接,东拼西凑下,一篇新颖的博文就诞生了,以至都没有本身写 demo 测试下,就把代码粘贴上去了,楼主对如许的行动是嗤之以鼻的。之前写过一篇文章,叫做 get与post须要注重的几点,写这篇文章的时刻,看到过一篇叫做 GET和POST有什么区分?及为何网上的多半答案都是错的。 的文章,就深入反攻了 “拿来主义” 这一征象。许多着名的博主写过文章来遍历写博客的优点,因而人人都纷纭效仿,为了写博客而写博客。关于楼主来讲,写博客是一种享用,一般写一篇相似本文的博文须要消费 2~4 个小时,却也乐此不疲,专心写过博文的人都晓得,写一篇好的文章,须要消费大批的时候,而楼主身为一个圆满主义者,每次写完一篇文章,最少本身已读过十几遍了,写完以后还要读个两三遍才敢宣布,所以很少有错别字以及不通畅的句子,然则 “拿来主义” 者则不然,简朴地拼接一些材料,就可以临盆一篇博文,在此,楼主号令人人,假如写,请专心。

the bug of underscore

许多议论 throttle 和 debounce 的文章,末了都邑谈到 underscore 已将这两个要领圆满封装,有的给个 underscore 的链接,有的直接上段代码,很少有去深切看看它的完成的。楼主简朴地用了下 underscore 封装的 debounce 要领,发明了 bug,建了个 issue https://github.com/jashkenas/underscore/issues/2478

好几个外国人示意并没有重现我的 bug,末了我直接指出了代码的毛病的地方,并给出了本身的 fix 计划(详见 https://github.com/jashkenas/underscore/pull/2479),老外才熟悉到了代码中的 bug,并进行了修复(虽然末了没有采用我的代码)。细致的历程能够看上面的两个链接里的内容,主如果和 underscorejs 两个维护者之间的交换,末了从他们的更新来看应当是 test cases 写错了。

总结

末了,楼主总结两点:

  • 关于知识点,请只管查阅种种靠谱的材料,将其弄懂,不要一孔之见

  • 关于写博客,请弄懂了再写,不能误人子弟;假如写,请专心

末了的末了,愿望人人能在 Github 上关注我,或许关注我的项目,我以为 followers 多的话,也不会在发明 bug 的时刻被维护者云云无视了 ╮(╯▽╰)╭

Github:https://github.com/hanzichi 或许直接点击页面右上角,感谢关注!

    原文作者:fish
    原文地址: https://segmentfault.com/a/1190000004707196
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞