Roda源码分析

前言

大家好,我是MARK24 。可以叫我 MARK。这是我研究Roda的笔记。

阅读过程大约 1~2 小时(也许更多)。 内容涉及到英文教程,和Roda源码阅读。 本文假设你已经对 Ruby 语法、面向对象模型、块、内部原理 有了比较深入的理解,对 Rack 以及 Web应用的原理也有理解。

阅读本系列文章,你可能获得:

  • Rack 应用概念的了解
  • Roda 树形路由的原理
  • Roda 插件系统原理
  • Ruby Class中 extend、include 的技巧
  • Ruby 中 catch、throw 的使用
  • 我个人不成熟研究土方法的分享 以及欣赏 Roda 的设计等。

我个人水平和精力有限,研究Ruby时间不长,自认还是个小学生。如有错误欢迎指正,欢迎交流~

一、Roda 的基本认识

Roda 是 Sequel 的作者 Jeremy Evans 开发的 Web 框架, 是作者在去Rails的路上的一个实践结果。简单地说 Rails 非常优秀,但是他会默认带来很多我们不需要的东西,同样的我们可能会转向简洁风格的Sinatra 但是又会觉得 Sinatra 给的不够多。 Roda 是一个平衡的产物,他的内核非常小,把很多功能写成插件的形式,你可以根据需要自己控制。

我个人也是很喜欢和认同 Micro Framework 的思想的。所以花了一些时间研究了 Sinatra 和 Roda。 Sinatra 给我带来的困扰可能在一直没有漂亮的模块化,以及CURD之间代码的重复性(虽然有filter功能)。 Roda 的路由系统,可以说解决了这个问题,简单的说,在根节点声明的代码只要一次,可以被叶子的代码共享。从请求的进入,使用 树数据结构的优势,跳过路由的遍历浪费的性能,直达handler。除了树状路由书写起来比较丑(可以用 hash_routes 插件分解)感觉还可以。

当然 Roda 依然是一个 Rack 应用。它可以无缝的和 Sinatra、Rails 混合提供服务。在你想试试 非Rails的框架的时候,可以考虑玩下Roda。

MasteringRoda对 Roda 介绍的摘要:

Roda 是一个路由树网络工具包。 Roda 哲学更喜欢简单性、可靠性、可扩展性和性能,默认情况下只启用最基本的功能。虽然默认情况下仅启用最基本的功能,但 Roda 附带了一组广泛的功能。所有其他功能都使用非常强大的插件库单独启用。

Roda 附带的每个功能(插件)都可以被视为一种工具,并且根据我们正在构建的 Web 应用程序的类型,我们可能需要不同的工具。 Roda 允许我们选择用于构建 Web 应用程序的工具。一般来说,Roda 更像是一个库而不是 Web 框架,尽管它经常与其他 Web 框架进行比较。

Roda 通过实现其开发人员所谓的路由树来执行路由。正如我们将在后面的页面中看到的那样,这种路由树方法赋予了 Roda 很大的灵活性和功能。路由树的主要优点是请求处理和路由是集成在一起的,这样我们就可以在路由请求的同时处理它。这可以消除将路由与请求处理分开的 Web 框架中固有的大量重复。

Roda 是一个轻量级的库。默认启用的基本功能只需不到 800 行代码即可实现。但是,Roda 附带了大约 100 个插件,可以满足大多数 Web 应用程序的需求。

Roda 在设计时考虑了性能,它被广泛认为是最快的 Ruby Web 框架。虽然 Roda 使用的一些优化使代码更难理解,但 Roda 的大部分代码都很容易理解。使用 Roda 构建的应用程序也很容易理解,因为可以跟踪逻辑并准确查看请求将如何路由/处理。

二、深入 Roda


Roda 官网iframe

Mark24

Everything can Mix.