有哪些值得一读的优秀开源 JS 代码
首先,没有“必须”读的源代码(我发现我特喜欢说首先……),因为读源代码不是做功课,只有用到或是非常好奇才会去读,当成“日常”去做是没有意义的。
当然有些人会说 xxx 是经典,任何人读过都可以收获很多知识和技巧。我不否认那些经典,但是我很怀疑“任何人”的数量到底占“感兴趣”的人多少?我的意思是,兴致勃勃开始读的人绝对很多,但能从里面学到点什么的人就很少了。
不知道别人怎么看待读源码这件事情,我个人读源码的时间并不多,基本上只有三种原因会促使我去读源码:
- 读到描述不清的文档的时候,或者对文档的描述有疑问的时候;
- 因工作需要不得不去弄清代码的细节的时候,有时候是因为调试,有时候是因为二次开发等等;
- 为开源项目做贡献或打算编写扩展的时候;
可以看出我读源码的目的性都很强,泛泛而读的时候也有过,但通常都没什么收获就困了……只有抱着明确的目的去读源码的时候才会有收获,而且必须得有收获否则目的无法达成。另外,目的达成就收工,若有兴趣继续读也会把它先搁下,因为吃多了消化不好。
还有,我很少很少去读框架的源代码,唯一认真读多且比较多比较深入的只有 Rails 和 Ember,并且都是基于上述原因才去读的。我在回答的问题的时候经常引用源代码,但基本上都不是预先读过,而是碰到了问题才去读的。读懂了就回答,不懂就罢。不读框架源代码的主要原因是框架中的多数代码都是“匠气有余而匠心不足”(这是可以理解的,并非批判),真正精彩的部分在框架型项目里往往只占很小的部分,而为了找到并钻研这些部分却要花费大量的时间,个人觉得性价比偏低。
我喜欢那些匠心独运但又不炫技,可读性非常好却又能让人经常“啊哈!”的代码。在 JavaScript 的领域里,首推 TJ Holowaychuk 的各种项目,它们都具有我说的那些优点:
- 高可读性
- 结构优秀,小巧而丰富,代码平实精炼,不炫技
- 注重文档
- 测试完备
在 https://github.com/tj 这里可以找到它们,另外注意他所属的各种组织,如 koa、express 等等,都有他贡献的许多代码。不过现在他已经把兴趣移到 Go 上去了,唯一还在维护的 JavaScript 项目只剩下 koa.js(外加其周边,如 co 等项目)。
国人在 Github 上的活跃度不算太高,主要大多数人都忙于内部项目,少数提炼的比较精致值得开源的项目也往往受制于条件限制而只能在小范围内传播。前两天刚读过一个项目,写得不错:https://github.com/army8735/jsdc
顺藤摸瓜,你可以通过这个项目找到一些活跃者,然后去翻他们的 repos 吧。
我觉得underscore可以读一读
至于jquery什么的奇淫技巧太多了
Backbone或者它的轻量版Exoskeleton 它教你怎么写框架,怎么组织业务逻辑
jQ读不动的话可以考虑读读Zepto 它教你怎么搞定DOM,附赠Ajax
楼上有人提过的Underscore不错,但未来似乎是属于lodash的 它教你怎么摆平复杂数据结构
最后,虽然不是一个具体的项目,但Github Trending值得你关注,它告诉你最新最酷的项目是什么
Slide
作者在 readme 寫到:
應該把 Slide 當作一個示例,它演示了如何編寫自己的工作流控制工具。如果沒有親手寫過工作流控制庫,就永遠不會真正地瞭解它。
我先說:http://stackoverflow.com/questions/6638518/good-opensource-js-project-for-learning
不過是三年前的了。另如果誰知道國人寫的優秀開源 js 項目,也歡迎推薦。
不过值得一读的东西倒是挺多的。楼上给的那个列表貌似都是很大的 library/framework,那我就来两个身材很小、功能很具体的专用 library 好了。
https://github.com/gorhill/Javascript-Voronoi
http://sandbox.scriptiny.com/tinybox2/
https://github.com/Modernizr/Modernizr
另外,在 general library 里面,我推荐先读 Underscore,同样是因为比较轻,并且结构清晰,功能很有用。
有哪些值得一读的优秀开源 JS 代码的更多相关文章
- 嵌入式 十个最值得阅读学习的C开源项目代码
开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...
- 十个最值得阅读学习的C开源项目代码
1. Webbench Webbench 是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以 模拟3万个并 ...
- 值得阅读的C语言开源项目代码
本文地址:http://www.cnblogs.com/archimedes/p/c-opensource-project.html,转载请注明源地址. 本篇文章主要总结一些C开源项目,有些是很著名的 ...
- 开源JS代码前面加!,+的意义
我们都知道,函数的声明方式有这两种 function fnA(){alert('msg');}//声明式定义函数 var fnB = function(){alert('msg');}//函数赋值表达 ...
- 【转】十个经典的C开源项目代码
原文: http://blog.51cto.com/chinalx1/2143904 --------------------------------------------------------- ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- GitHub上那些值得一试的JAVA开源库--转
原文地址:http://www.jianshu.com/p/ad40e6dd3789 作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,S ...
- 值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...
- GitHub上那些值得一试的JAVA开源库
作为一名程序员,你几乎每天都会使用到GitHub上的那些著名Java第三方库,比如Apache Commons,Spring,Hibernate等等.除了这些,你可能还会fork或Star一些其他的开 ...
随机推荐
- 如何获得C4C里某个code字段对应的描述信息
通过我这篇文章介绍的方法使用C4C OData服务去取服务订单数据(Sales Order): 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据 https://www.jiansh ...
- C++学习之拷贝构造函数
嘛是拷贝构造函数? 如果一个构造函数的第一个参数是’自身类‘ ‘类型’的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.如: [代码1] 1 2 3 4 5 6 class A{ publ ...
- 2017.9.29 web网上答题及其自动评测系统
1. 设计计一个网上答题及其自动评测系统,首先是试题页面的设计及其解答的提交, 其次是当提交解答之后,系统自动评阅并给出结果. 分析:需要两个jsp页面:一个是提交信息的页面,另一个是获取提交信息的页 ...
- 遍历ResultSet,行列要从1开始
为什么遍历ResultSet,行列要从1开始. 因为Resultset的第一行的第一列都是空的,要用rs.next()到第一行才能进行读取. Statement stmt=null; ResultS ...
- .svn文件被删除的解决办法
不小心把文件夹下的.svn给删除了,svn提交时会报如下错误: 包含工作副本管理数据的目录“/home/usa/svn/aispeech/air201102/branches/tools/res/di ...
- 字符串缓冲区StringBuffer类,正则表达式
StringBuffer类 StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容.它是一个容器,容器中可以装很多字符串. ...
- 旧文备份: CANopen的LSS子协议中文翻译
有关节点地址和网络波特率的在线设置等:下载
- SpringBoot非官方教程 | 第二十五篇:2小时学会springboot
转载请标明出处: http://blog.csdn.net/forezp/article/details/61472783 本文出自方志朋的博客 一.什么是spring boot Takes an o ...
- Angular项目下载启动
Angular cmdb-front 新建项目流程 打开idea New>Project 2,打开项目仓库,拷贝项目地址 拷贝项目路径,填写项目名 点击clone,然后一路Next 项目代码已 ...
- 短信状态监听 - iOS
当使用 App 时若短信介入需要对当前状态进行监听操作,根据不同的状态实行相关的需求操作,废话不多说步骤如下. 首先,常规操作先引用对应的头文件,来为后续功能铺路. #import <Messa ...