有哪些值得一读的优秀开源 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一些其他的开 ...
随机推荐
- 03、IDEA下Spark API编程
03.IDEA下Spark API编程 3.1 编程实现Word Count 3.1.1 创建Scala模块 3.1.2 添加maven支持,并引入spark依赖 <?xml version=& ...
- 笨办法学Python(五)
习题 5: 更多的变量和打印 我们现在要键入更多的变量并且把它们打印出来.这次我们将使用一个叫“格式化字符串(format string)”的东西. 每一次你使用 " 把一些文本引用起来,你 ...
- iis 7 操作 .net
下面说一下.NET对IIS7操作.IIS7的操作和IIS5/6(using system.DirectoryServices;使用类DirectoryEntry )有很大的不同,在IIS7里增加了 M ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) I】石头剪刀布(按秩合并并查集)
点此看题面 大致题意: 有\(n\)个人,第\(i\)个人坐在编号为\(i\)的座位上,每个人等概率有石头.剪刀.布中的一张卡片.有两种操作:第一种是第\(y\)个人挑战第\(x\)个人,如果胜利则\ ...
- nginx里面的rewrite配置
哎,我需要静静,刚刚在去怎么优化dom层级,发现更新完代码,层级又蹭蹭蹭的往上涨,顿时没脾气了,还是把昨天的nginx配置总结下,增加点动力,昨天前天两天都在搞这个问题,也是搞的没脾气,网上查了很多资 ...
- java设计模式——享元模式
一. 定义与类型 定义:提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效地支持大量细粒度的对象 类型:结构性 二. 使用场景 (1) 常常应用于系统底层的开发,以便解决系统的性能 ...
- 使用Mac的过程中的一些小操作
前言:使用Mac的过程中的一些小操作 查看Mac系统是32位还是64位: 方法1: 点击左上角的苹果按钮->关于本机->概览->系统报告->软件->偏好设置面板:右侧有提 ...
- JQuery 解决按钮上的倒计时问题
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- iOS 远程通知(Remote Notification)和本地通知(Local Notification)
ios通知分为远程通知和本地通知,远程通知需要连接网络,本地通知是不需要的,不管用户是打开应用还是关闭应用,我们的通知都会发出,并被客户端收到 我们使用远程通知主要是随时更新最新的数据给用户,使用本地 ...
- React dangerouslySetInnerHTML - 将HTML字符串解析为html样式显示
<div dangerouslySetInnerHTML={{ __html: curriculumDesc }}></div>