菜单开关

周梦康 发表于 2019-01-06 572 次浏览

由于现在项目业务越来越复杂,pc 上的路由因为支持多种请求方式,导致路由配置在1000多次,路由性能损耗20~25ms,基本不能忍。这种看似简单的写法背后是严重的性能损耗。

重构想法

  • 对路由进行一定范围的约束,通过约定来减少配置,减少运算。
  • 不规则路由优先使用 nginx rewrite
  • 访问量低的路由可以继续在 php 里配置,不推荐,但功能支持。

也就是说系统加载过程中不一定有路由的全量初始化,这一步是可以跳过的。

对路由进行一定范围的约束,通过约定来减少配置,减少运算

路由参考 http://guides.rubyonrails.org/routing.html#crud-verbs-and-actions 的定义做一些修改,因为他是严格的restful 风格,为了更简单的适应web 开发,修改为如下规范

# get 
/{moduleName}
/{moduleName}/new
/{moduleName}/{:id}
/{moduleName}/{:id}/edit

# get api
/api/{moduleName}
/api/{moduleName}/{:id}

# post api
/api/{moduleName}/create
/api/{moduleName}/{:id}/update
/api/{moduleName}/{:id}/destroy

博客模块,存在的路由可能是这样的

# get 
https://www.baidu.com/blog
https://www.baidu.com/blog/new
https://www.baidu.com/blog/1234
https://www.baidu.com/blog/1234/edit

# get api
https://www.baidu.com/api/blog
https://www.baidu.com/api/blog/1234

# post api
https://www.baidu.com/api/blog/create
https://www.baidu.com/api/create/1234/update
https://www.baidu.com/api/create/1234/destroy

这样我们就可以优先推断,然后根据框架的约定找到对应的方法

namespace App\Pc\Controller;
use Yq\Controller\WebController;

class BlogController extends WebController
{

    public function indexAction(){

    }

    public function newAction(){

    }

    public function showAction(){

    }

    public function editAction(){

    }
}
namespace App\Mobile\Controller;

class BlogController extends \App\Pc\Controller\BlogController
{

    public function indexAction(){

    }
    
    public function newAction(){

    }

    public function showAction(){

    }

    public function editAction(){

    }
}
namespace App\Api\Controller;
use Yq\Controller\ApiController;

class BlogController extends ApiController
{

    public function indexAction(){

    }
    
    public function createAction(){

    }
    
    public function modifyAction(){

    }

    public function showAction(){

    }

    public function destroyAction(){

    }
}

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表