在前段时间结束的 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 => associations: [comment]
Bullet 最近正受到越来越多的关注,最新一期的 Scaling Rails – On The Edge – Part 1 中第一个就介绍了 Bullet, Ruby5 和 RailsInSide 也有相关报道,俨然是一枚提升性能的子弹。期待有更多国内开发者能积极贡献自己的力量,为开源社区添砖加瓦。
评论