有哪些值得一读的优秀开源 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一些其他的开 ...
随机推荐
- 概念:静态static相关知识
在面向对象中,有‘静态’概念,通过关键字static进行说明, 例如: 静态属性:public static $name = '小仓鼠' 静态方法:public static function Nam ...
- sublime text2卸载和重新安装(转载)
很多同学使用 sublime text2 的时候,出现一些奇怪的bug,且重启无法修复. 于是,就会想到卸载 sublime text2 再重新安装. 然而,你会发现,重新安装后,这个bug任然存在, ...
- python IDE--pycharm安装及使用
官网 :http://www.jetbrains.com/pycharm/ 下载community版本,免费.下载之后傻瓜式安装即可. 1 启动pycharm,选择新建项目: 设置项目路径和项目名: ...
- 小程序wx.request的POST方法的参数传输服务器接收不到
这是API里面的例子: 而实际这样,服务端拿到的是空值. 将header更改一下,application/x-www-form-urlencoded,则可以让服务器收到数据
- C. Tanya and Toys_模拟
C. Tanya and Toys time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 数黑格有多少个,模拟题,POJ(1656)
题目链接:http://poj.org/problem?id=1656 #include <stdio.h> #include <iostream> #include < ...
- spring教程(一):简单实现(转)
转:https://www.cnblogs.com/Lemon-i/p/8398263.html 一.概念介绍 1. 一站式框架:管理项目中的对象.spring框架性质是容器(对象容器) 2. 核心 ...
- nbu8.1配置群集SQL Server实例的备份
1.About SQL Server high availability (HA) environments SQL Server Intelligent policies support the f ...
- JAVA HTTP连接(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
public static void main(String[] args) { // TODO Auto-generated method stub try { URL url = new URL( ...
- 谷歌浏览器兼容IE插件
谷歌浏览器兼容IE插件 http://pan.baidu.com/s/1i31hspf