V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hanzichi
V2EX  ›  程序员

源码解读这半年

  •  8
     
  •   hanzichi · 2016-11-02 17:12:15 +08:00 · 4764 次点击
    这是一个创建于 2725 天前的主题,其中的信息可能已经有所发展或是发生改变。

    作者:韩子迟

    What?

    不知不觉间,「 Underscore 源码解读系列」进入了真正的尾声,也请允许我最后一次 po 下项目的原始地址 https://github.com/hanzichi/underscore-analysis

    这半年以来,花费了大量的业余时间,共计写了 25 篇随笔(包括此文),也给 underscore-1.8.3 的源码加了差不多 1500 行 注释,对于当初说的要做「史上最详细的 underscore 源码剖析」,至此我也觉得问心无愧。

    本文不想说我在这个过程中学到了什么,学到的东西,能写的都在前面 24 篇随笔中了,只能意会的我也说不出来(感触最深的是闭包的强大)。本文是一篇「水文」,不谈技术,抛开代码,听楼主扯扯淡。

    Why Underscore?

    早期的几篇随笔都有「 Why Underscore 」这一节:

    阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多。为什么是 Underscore ?最主要的原因是 Underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript 初学者。从中,你不仅可以学到用 void 0 代替 undefined 避免 undefined 被重写等一些小技巧 ,也可以学到变量类型判断、函数节流&函数去抖等常用的方法,还可以学到很多浏览器兼容的 hack ,更可以学到作者的整体设计思路以及 API 设计的原理。

    其实这并不是直接原因,「导火索」是当时(三月末)学习函数节流和函数去抖的时候,发现很多文章混淆了这两个概念,了解到 Underscore 封装了这两个函数,但是一用却发现了它的 BUG !(详见 一次发现 underscore 源码 bug 的经历以及对学术界『拿来主义』的思考 一文)

    Underscore 早些年就接触过,对其的了解也仅限于「一个轻巧的工具库」,会不会还有其他的 BUG ?同时源码这么短(之前想过看 jQuery ,被接近 1w 行吓回来了),耦合度低(可以一个个方法分开看),也进一步激发了通篇解读的兴趣,想着这一路下来肯定能学到不少东西。好东西要与大家分享,同时确定了写系列文章的 idea 。

    Where to write?

    哪里写?想都没想就确定了主战场 GitHub 。之前我是不玩 GitHub 的,现在已经离不开了,每天不刷个几十次都手痒。为什么确定在 GitHub ?理由很简单, GitHub 有逼格啊(毕竟是全球最大的同性交友社区)。

    当然,酒香也怕巷子深,写完了没人看无疑是对自信心的极大打击,同时也需要大家来提出宝贵的意见。为此,几乎每一篇完成后,都会在以下渠道分享:

    其实主要就是前三个,后面两个用了一段时间感觉不大好就不用了。极客头条个人感觉分类有点乱,同时因为是 CSDN 旗下的,个人对 CSDN 没太多好感;干货集中营的话,维护者是「 daimajia 」大大,感觉移动开发者关注的会比较多。

    分享的话,如果脸皮厚的话,也可以在微博艾特一些圈内大大们(楼主脸皮比较薄 ...)。

    当然,我不仅在 GitHub 的 issue 里写,还在以下一些渠道写:

    简书的话,后面断断续续不更了,个人喜欢专门的 IT 类博客,而且觉得简书的 Markdown 渲染有问题,为什么都说它的 Markdown 体验好 ... sf 和 伯乐在线 的话,阅读量还是可以的,只是它们不是专门做博客系统的,基础的分类归档功能都没有(或许是我没找到?),以后应该还是会以博客园为主要战场。

    Then?

    underscore.js 的源码解读画上了句号,接下去干嘛?其实楼主对以下几个库也挺感兴趣的。

    End

    那就这样吧,749 Star / 140 Watch / 153 Fork 算是对我的肯定和鼓励吧 ^_^

    也许我韩子迟还会回来的!

    27 条回复    2016-11-08 19:36:41 +08:00
    hanzichi
        1
    hanzichi  
    OP
       2016-11-02 17:23:06 +08:00
    V 站的 markdown 不支持删除线啊 ..
    lil460982475
        2
    lil460982475  
       2016-11-02 17:24:29 +08:00
    为你的坚持和努力点个赞
    zenliver
        3
    zenliver  
       2016-11-02 17:25:51 +08:00
    大学毕业, 工作的第一家公司培训内容之一就是一周把 underscore 源码读完, 读完后, 然并卵, 再也没用过 js
    hanzichi
        4
    hanzichi  
    OP
       2016-11-02 17:28:46 +08:00
    @zenliver 一周 .. 厉害,我花了整整半年 ..
    zenliver
        5
    zenliver  
       2016-11-02 17:34:53 +08:00
    @hanzichi 当然不如你理解的深刻哈
    sokis
        6
    sokis  
       2016-11-02 17:47:31 +08:00
    当年最喜欢的头像。。。楼主加油
    hanzichi
        7
    hanzichi  
    OP
       2016-11-02 17:49:03 +08:00
    @sokis 谢谢~
    moyang
        8
    moyang  
       2016-11-02 18:13:32 +08:00
    感谢,给了我灵感。也去找个源码来写一写好了
    Douglee
        9
    Douglee  
       2016-11-02 18:18:08 +08:00
    表示正在看 guava, 真的只是看而已...
    iyaozhen
        10
    iyaozhen  
       2016-11-02 18:26:49 +08:00 via Android
    赞!向楼主学习
    qwer1234asdf
        11
    qwer1234asdf  
       2016-11-02 19:07:15 +08:00 via iPhone
    读书时,坚持看了一年多 linux 内核,翻译了好多文档.....工作后却没那个激情了
    irenicus
        12
    irenicus  
       2016-11-02 19:15:00 +08:00 via Android
    赞,正好最近有了解 js 的冲动
    xcatliu
        13
    xcatliu  
       2016-11-02 19:22:23 +08:00 via iPhone
    感谢楼主分享,能坚持这么久真是太不易了。相楼主学习
    hanzichi
        14
    hanzichi  
    OP
       2016-11-02 19:47:22 +08:00
    @qwer1234asdf 有激情也很少有时间了,琐事一堆 ..
    hanzichi
        15
    hanzichi  
    OP
       2016-11-02 19:48:17 +08:00
    @xcatliu 向大神学习!离大神还很远
    peneazy
        16
    peneazy  
       2016-11-02 21:44:47 +08:00 via Android
    同解读 underscore 源码半个月,学到不少东西
    bengol
        17
    bengol  
       2016-11-02 22:17:46 +08:00
    为 lz 的细致和坚持点赞
    btjoker
        18
    btjoker  
       2016-11-02 22:37:43 +08:00
    (=゚ω゚)=b
    wensonsmith
        19
    wensonsmith  
       2016-11-02 22:37:59 +08:00
    已 star , 楼主干了件了不起的事情
    Powered
        20
    Powered  
       2016-11-02 23:40:16 +08:00
    给我了一些启发

    我也要读读源码,写个系列文章了
    hanzichi
        21
    hanzichi  
    OP
       2016-11-03 08:51:54 +08:00
    @peneazy 加油!
    hanzichi
        22
    hanzichi  
    OP
       2016-11-03 08:52:22 +08:00
    @wensonsmith 过奖了~
    Canrz
        23
    Canrz  
       2016-11-03 15:08:38 +08:00
    以前 star 了,赞个
    hanzichi
        24
    hanzichi  
    OP
       2016-11-03 20:26:17 +08:00
    @Canrz 感谢支持~
    BruceYuan
        25
    BruceYuan  
       2016-11-08 08:55:16 +08:00
    膝盖献给大神。
    hanzichi
        26
    hanzichi  
    OP
       2016-11-08 09:10:37 +08:00
    @BruceYuan 过奖了,惭愧 ..
    BruceYuan
        27
    BruceYuan  
       2016-11-08 19:36:41 +08:00
    @hanzichi 我 follow 了您,感觉对我很有帮助。做 leetcode 的时候有看您的解法。菜鸟入门中。 QAQ
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1056 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 462ms · UTC 18:46 · PVG 02:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.