在前段时间结束的Kungfu Rails大会上,黄志敏先生(Richard Huang)带来了一个关于如何通过插件、Gem的方式为Rails项目做贡献的主题。Richard开发了很多实用性很强的插件和Gem,Bullet就是其中之一。
\设计Bullet插件/Gem的目的是通过减少查询的数量帮助开发者提升应用程序的性能。它会在你开发时监视应用程序的查询,并在应该添加Eager Loading(N+1查询)时给出提示;在无需使用Eager Loading或应该使用计数器缓存时,它同样会给出提示。\
Bullet并不直接提升性能,它只是给出一些提示,指出哪些地方可以得到改善,随后由开发者自行添加:include
或者:counter_cache
。
Bullet的使用非常方便,以插件或Gem方式安装后,经过简单配置即可直接使用(新版本增加了Growl支持,对于非MacOS用户,可以关闭该功能)。
\\config.after_initialize do\ Bullet.enable = true\ Bullet.alert = true\ Bullet.bullet_logger = true \ Bullet.console = true\ Bullet.growl = true\ Bullet.rails_logger = true\ Bullet.disable_browser_cache = true\end\\
在开发环境下启动服务器,访问页面时,Bullet会弹出提示,告知可以改进的地方,同时在Bullet的日志中也会有相应记录。例如,项目提供的范例中就指出存在Post对Comment关系的N+1查询,开发者可以很快做出修改:
\\The request has unused preload associations as follows:\None\The request has N+1 queries as follows:\model: Post =\u0026gt; associations: [comment]\\
Bullet最近正受到越来越多的关注,最新一期的Scaling Rails – On The Edge – Part 1中第一个就介绍了Bullet,Ruby5和RailsInSide也有相关报道,俨然是一枚提升性能的子弹。期待有更多国内开发者能积极贡献自己的力量,为开源社区添砖加瓦。