扯扯tangram开源

2010-12-23

百度前端js代码库tangram昨天开源了,http://tangram.baidu.com,目前我在百度FE通用组, 也就是负责tangram开发和维护的组里实习,所以写写我个人的看法。

先不管这个代码库怎样,这是百度第一个在内部走流程正式开源的项目,挺有意义的,以后只要是跟tangram有擦边关系的东西都可以直接开源不通过层层审批,有了第一个开源接下来百度要开源什么东西也会容易一点。这个开源的推动挺不容易的,需要很多人很给力的推动才能成~

扯点别的,百度的技术氛围很好,内部前端的技术文章/调研文章相当多,为什么不扔一点到http://www.baiduux.com呢,以内部文章数量一天一篇都不成问题,如果讲究高质量的话一星期一篇也没问题,这是毫不费劲的事,可以带来很好的口碑,但就是不这么做。之前我在腾讯广研也有相同的疑问。开源和技术分享带来的好处以前说了,提升公司形象,吸引人才加盟,是成本很低的公关,对各方都有好处。想想腾讯的ISD和CDC博客赢得了多少尊重。

扯回来,再介绍一下tangram,tangram中文意思是七巧板,这名字很形象,tangram本身粒度细分到函数级别,每一个函数对应一个文件,所有代码都拆得很散,有支离破碎的感觉,有相应的后端工具处理这些函数的依赖关系,进行按需拼装,组合成自己需要的代码。可以在这里看到其中一个拼装工具:http://tangram.baidu.com/tangram/codesearch.html

这个库的组织形式非常简单,没有YUI KISSY那样的沙盒/核心等东西,一个个方法都单纯地放在各自命名空间里。所以它不叫框架,叫库,提供各种方法,使用它们时不用像框架一样按照它们指定的方式去写代码,其实就是一个工具箱,里面有各种工具可以单独挑出来带回家想怎么用就怎么用。

为什么会诞生这么一个库,因为百度内部产品线非常多,每个产品有各自的特征,每个产品的需求都不同,没法去要求每一个产品的前端都按照一个框架一个结构来开发,所以需要高度可拆装可定制的js库。

tangram追求高性能小体积,高性能除了ext大家都追求,例如baidu.dom.addClass里不会判断这个add的class名在节点上是否已经存在,即使存在也照样加上,因为这个判断会消耗一个正则的性能,所以选择不加。

体积上会尽量避免写不是必要的代码,例如每个方法里都不会有参数类型判断。每个方法尽量减少对其他方法的依赖。事实上这点在UI上还做得不好,现在如果单独拿其中一个UI出来用,把它依赖的方法都取出来体积还是挺大的,特别是那个UI有动画的情况下。事实上我对代码的体积有点偏执,特别喜欢一个可用的东西非常小,呵~

还有一点值得一提的是,tangram大部分代码都通过QA的专业测试和各产品线的使用,质量是很有保证的,我觉得QA的测试老高级了,全自动化,看着他跑测试挺爽的,听这个高级QA讲一讲测试你会觉得测试是相当有趣的。unit test的代码也将会放在github上,上面说了,只要是跟tangram擦边的东西都会开源,只要公司乐意,大家对开源都很积极的。

tangram首先还是针对百度产品线的,主要用户也是百度产品线,不是说开源了希望有多少人用这个库,开源更多的是种开放和互相学习的姿态。事实上我觉得如果是个人开发,没有非常特殊的要求,jQuery是唯一的最佳的选择,而团队开发,或有特殊要求才需要考虑用其他库/框架。

分类:互联网 Tags:
评论

2010年12月24日 0:04

1.很高兴七巧板开源了
2.fe和ue不像腾讯那样在一起 很多东西没想过用uxx 这个出口吧

2010年12月24日 0:17

每个方法尽量减少对其他方法的以来。
———————-=====
是“依赖”吧?百度也有产品开源了,这是种很好的趋势

2010年12月24日 0:19

@yoyicue 那baiduux的定位真有问题~

2010年12月24日 0:19

@vayn 对 改过来了 谢谢~

2010年12月24日 8:26

饭否刚刚看你说完加班,为了开源程序,然后cb的百度开源新闻就出来了~~~~很给力啊~~~~

2010年12月24日 8:34

cb那里很多谷歌的爪牙。唉有时候真不想去那里看新闻。

[…] 原文:http://blog.webang.net/internet/1520/ […]

[…] 原文:http://blog.webang.net/internet/1520/ 此条目发表在 转载 分类目录,贴了 tangram, 开源, 百度 标签。将固定链接加入收藏夹。 ← XJP:关于百度的五大真相 […]

2010年12月24日 9:56

赞,开源!
tangram的最大作用是迈出了开源的第一步。。
“事实上我觉得如果是个人开发,没有非常特殊的要求,jQuery是唯一的最佳的选择,而团队开发,或有特殊要求才需要考虑用其他库/框架”。
开来作者是更推崇jQuery.

2010年12月24日 10:01

例如baidu.dom.addClass里不会判断这个add的class名在节点上是否已经存在,即使存在也照样加上,因为这个判断会消耗一个正则的性能,所以选择不加。

这个正则我倒觉得不会消耗多少。另外,实测过,用indexOf效率更高些。

2010年12月24日 10:11

@Heero.Luo indexOf貌似不严密,有可能名字是另外一个className的一段,还要处理前后有没有空格

2010年12月24日 10:34

这样子 (” ” + elt.className + ” “).indexOf(” ” + className + ” “)

2010年12月24日 11:31

@Heero.Luo soga~

2010年12月24日 12:11

indexOf(” “+className+” “)不对。加上括号又不能解决问题。只会返回-1而已。

2010年12月24日 12:12

说错了,我指的是引号。

2010年12月24日 17:38

转到这个博客我才发现原来是webang写的文章,哈哈,感谢你的twitese程序。

2010年12月25日 17:46

百度的tangram和淘宝的Kissy各有各自适用的场景,可谓相映成趣哈。

2010年12月27日 10:25

好文章
迈出了第一步

2011年4月12日 20:47

哥老想你了! 啥时候回来转转!

2011年4月12日 21:30

哎,估计近几年没戏了,部门啥时候组个队来广东游吧~