这周二,火花开源了一个小项目 HHRouter,不到一周,已经得到很多关注。而且在 GitHub 的本日热门 Objective-C 项目榜中占据榜首连续两天,目前也在本周热门排列第四。尤为值得一提的是,关注者不只有国内一线开发者,还包括 Twitter, Groupon, Airbnb 这类硅谷热门公司的工程师。html
很有成就感,撰文一篇记念,也顺便聊聊 HHRouter 开源先后的一些事儿。git
HHRouter 背后的理念是 URL Router,这并非新鲜的理念,早在数年前 Facebook 的 Three20 中就有相似的实现。但在 HHRouter 的传播过程当中,我注意到仍是有许多人对此并不了解。github
一言以蔽之,URL Router 即将 UIViewController 映射成 URL,从而支持经过 URL 进行界面跳转。是的,就和 Web 同样。固然,这并非 Web Developer 转职为 iOS Developer 后所作的无聊玩具。URL Router 有着许多切实的好处。算法
首先,这可以减小 UIViewController 之间的耦合。在没有 URL Router 的世界,若是 aViewController 须要跳转到 bViewController,就必须依赖于后者,这很容易就形成错综复杂的依赖链。引入 URL Router 后,这些链条天然就被斩断。架构
其次,当每一个界面都拥有惟一且不重复的 URL ,将带来额外的好处。譬如,你将更容易实现这些需求:Push 打开指定的界面、追踪用户浏览记录、开放 URL Scheme。app
再次,当你尝试引入 Hybrid 架构时,你会发现用统一语言描述 Web View 和 Native View 多么幸福。less
刚才也有提到,URL Router 并非新鲜的理念,那咱们为何重造一个轮子呢?ide
答案天然是对于如今的轮子不够满意。Three20 太臃肿天然没必要再提,而其余 Router 也在设计或实现上有着不天然之处。优化
HHRouter 的设计哲学是 Clean, Fast & Flexible。url
HHRouter 不依赖于其余库,本身实现了一套简单的 Mapping 算法,核心代码只有 60 行。算法虽简单,但也作过专门优化,不像某些 Router,每次寻址就是作一次完整的遍历...
HHRouter 避免作太多事情,譬如对于界面跳转的控制,每一个 App 均可能存在差别,HHRouter 就干脆放手无论。正由于心无旁骛,只作 URL Mapping,才能专心把这件事作好,作到极致。譬如对 URL Query Params 的支持,以及对 App 自定义 URL Scheme 的支持。
一些同窗关心的问题是,HHRouter 是如何得到这么多关注的?
我在 Reddit, V2EX, Weibo, Twitter 上公布了 HHRouter 开源的消息,这带来了第一批的流量,让 HHRouter 进入了 GitHub Trending 页面,这又带来了后续的流量。
仅此而已,并不是特意作过什么推广。问题的答案其实在前文就已提到。比起关心推广,不如将更多精力花在产品的定位与打磨。
事实上,HHRouter 的主要代码都是在一年多前写的。此番只不过是作些整理。这不是单一的事件,而会是火花拥抱开源的一个开始。
为何要拥抱开源?推荐阅读这篇《Open Source (Almost) Everything》,做者 Tom Preston-Werner 是 GitHub Co-Founder。
引用文中我特别青睐的一段:
When I start a new project, I assume it will eventually be open sourced (even if it's unlikely). This mindset leads to effortless modularization. If you think about how other people outside your company might use your code, you become much less likely to bake in proprietary configuration details or tightly coupled interfaces. This, in turn, leads to cleaner, more maintainable code. Even internal code should pretend to be open source code.
不管如何,请期待火花的更多开源做品 :)