优化了一波 Index.py 的 Radix Tree 实现
https://github.com/abersheeran/index.py/blob/master/indexpy/routing/tree.py
修了一个特定路由结构下会产生的 BUG (我写文档的时候靠脑子推算出来的,夸一波自己,我真牛逼),优化了一波代码结构,比之前那个我花了一夜糊出来的狗屎代码好多了。每次我有一个更屌的想法就感觉之前的东西都是狗屎哈哈哈。
search 这一部分我从递归优化到了循环,但是 append 这一部分好像没什么从递归改循环的必要,毕竟 Index.py 的路由构建是在启动时,慢不到 0.01 秒应该没啥感觉。
现在已经把路由构造、中间件展开和异步包装都全放到代码加载的时候去做了,运行的时候基本只有 search route 然后 parse params 最后 call handler 这样一个操作。
这个地方还有没有优化的空间?这个版本的代码比之前那坨狗屎代码每 10000 次请求要慢 0.5 秒左右的样子,但是因为项目的路由多寡而导致的波动比之前要小,我也不知道啥情况,难道是因为之前没有匹配完全路由?还是因为这里用了栈的原因。希望 V2EX 有大佬愿意看看。
性能测试在这 https://github.com/abersheeran/asgi-benchmark