由于现在项目业务越来越复杂,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(){
}
}