Tangram base的设计

上周,Tangram开源了,有不少人阅读代码后提出了自己的意见、对Tangram的期望,很感谢这些热心的朋友的支持。与此同时,也看到了一些对Tangram设计的疑问,因此想在周末写一篇小文来介绍一下,但由于恰逢年底,小组内一堆杂务要处理,加上咳嗽很严重,一直延到今天。

这篇文章主要是介绍在设计Tangram base时的一些考虑,以及它适合做什么事情。

细粒度拆分

只要看过Tangram文档或源码的人,一定会发现它拆分粒度够细。将每一个方法独立写成一个文件,用户可以通过codeSearch功能,获得定制好的Tangram,然后基于其开发业务组件和逻辑。

在百度来说,前端工程师一直都很关注流量和加载性能,按需定制可以最大程度的节省带宽、加快页面的加载和渲染速度。

同时,Tangram面向的产品跨度广,从搜索产品社区产品商业产品,而工程师动手能力都很强,他们能很轻松的基于Tangram提供的方法集,封装一套适合自身的产品底层库。不同的产品间,封装差异会比较大,但是由于底层库相同,交流沟通并不会产生多少障碍。

静态方法,无污染

除了拆分粒度细之外,Tangram库名字空间整洁,所有的方法都是静态的,对环境的污染很小。

一些老产品中总会有一些匪夷所思的代码,而且很多产品中会有第三方代码,为了最大程度的避免冲突,Tangram仅仅暴露一个变量到window中,而且用户完全可以把Tangram放在闭包中使用,这样即使页面上出现两套Tangram,他们之间也不会有任何冲突。

复杂的RIA产品需要一个开发框架时,采用Tangram做为底层库也很有优势,因为Tangram是静态的,封装和覆写都特别方便,如果发现在自身环境下对某些函数有特别的要求(如性能要求极高),可以自己编写新函数覆盖。函数是独立而且简单的,开发人员也可以很方便的对其进行研究,了解原理进而更好的使用。

上面的内容大多是Tangram针对产品团队的设计考虑。而对于一些通用组件开发者,基于Tangram开发时,他可以把Tangram当成一个函数库,仅仅选取他需要的部分,保证组件的体积精简。同时不必遵从Tangram的封装方式,可以按照需求,封装出自己想要的风格然后release。事实上,百度内已经有数个以这种形式存在的通用组件。

改进

Tangram一直都在不断升级,简单说说我们接下来要做的几件事情:

  • 修改库中方法调用的baidu前缀,这件事情会在下一个版本发布前完成,做为一个开源项目,它应该保持自己的独立性。
  • Codesearch整理后,也会被随项目放出,这样大家就能很方便的在本地选取任何一个版本的Tangram代码了。
  • 我们会不断整理Tangram的设计细节,开发规范,工具,并且在社区和blog中发布,即使你不使用Tangram,也完全可以参考和借鉴我们的思路。
  • 不断完善文档,良好的中文文档也是Tangram相对其他库的一个优势。

开发团队

在百度FE,我所在的小组叫通用组,负责包括Tangram的所有前端通用技术的研发与维护,同时所有工程师都可以贡献代码到Tangram。开源后,Tangram将接受更多来自百度外部的意见,保持Tangram的不断成长和进步。欢迎前往github的network(basecomponent)围观我们每天的代码提交,更欢迎各位fork,为Tangram提供想法和代码。

小结

这篇文章介绍了Tangram base的设计特点、面向场景等,做为一个基础函数库,Tangram base很容易被封装和扩展,你也可以很放心的使用它来进行二次开发。

Tangram的文档地址是:http://tangram.baidu.com,你也可以前往github查看最新的源码(dev分支

我们基于Tangram base,开发了Tangram component,这是一个组件库,它的设计考虑和实现方式就更复杂了,这部分留到下次再谈,如果你关注Tangram,欢迎订阅我的blog

4 条评论

  1. rain man 于 2011-03-01 @ 22:48:00

    Hi berg,想问下Tangram的编辑器什么时候开源,最近想研究下编辑器相关的开发,看了你写的三篇文章(在线编辑器)非常好,循序渐进。不知道还会不会继续写下去,或者好的开发资料推荐下。

  2. berg 于 2011-03-07 @ 22:06:07

    [Comment ID #13309 Will Be Quoted Here]

    应该会在今年六月份左右完成这个事情。

    编辑器系列应该近期不会继续了吧,已经没有实际开发编辑器好长一段时间了。

  3. 嘉谟之行 于 2011-03-26 @ 23:43:00

    今天去听了交流会 。
    很遗憾 ,以前一直没有学过javascript 。但是学习过python 。

    有机会学习一些web 技术 。

  4. tokki 于 2011-06-03 @ 09:51:03

    没想到这个是你写的。。。
    刚来北京面试的时候把库看了下 复习了下基础的问题。

    好吧 其实我感觉这个是个轮子。。但还是希望能把它做成个好轮子

    从TWITTER过来的

发表评论

火花来自思想的碰撞,请留下你宝贵的评论吧: