开发者社区> 问答> 正文

网站功能多了,php框架的route配置会影响性能吗?:报错

举个例子

# 路由配置项 $router_config = array( # 首页 '/(@page:[0-9])' => array('home', 'index'),

# 帖子详情页
'/read/@tid:[0-9]+' => array('home', 'read'),

# 标签
'/tag/@name(/@page:[0-9]+)' => array('home', 'tag'),

# 搜索
'/search/@s(/@page:[0-9]+)' => array('home', 'search'),

# 用户设置
'/setting(/@type)' => array('setting', 'index'),

# 设定阅读排序(最新发表)
'/do/posttime' => array('doController', 'posttime'),

# 设定阅读排序(最后回复)
'/do/lasttime' => array('doController', 'lasttime'),

# 登录
'/login' => array('user', 'login'),

# 退出
'/logout' => array('user', 'logout'),

# 注册
'/register' => array('user', 'register'),

# QQ登录
'/qqlogin' => array('user', 'qqlogin'),

# 提醒
'/notification(/@status:0|1(/@page:[0-9]+))' => array('user', 'notification'),

# 私信
'/whisper(/@status:0|1|2(/@page:[0-9]+))' => array('user', 'whisper'),

# 用户中心
'/@@username' => array('user', 'transUser'),

# 用户中心
'/user(/@uid:[0-9]+)' => array('user', 'index'),

# 标记提醒为已读
'/do/readNotification/@nid:[0-9]+' => array('doController', 'readNotification'),

# 用户帖子
'/user(-@uid:[0-9]+)-topic(-@page:[0-9]+)' => array('user', 'topic'),

# 用户回复
'/user(-@uid:[0-9]+)-reply(-@page:[0-9]+)' => array('user', 'reply'),

# 用户关注
'/user(-@uid:[0-9]+)-follow(-@page:[0-9]+)' => array('user', 'follow'),

# 用户粉丝
'/user(-@uid:[0-9]+)-fans(-@page:[0-9]+)' => array('user', 'fans'),

# 我的收藏
'/my/favorite(/@page:[0-9]+)' => array('user', 'favorite'),

# 我的积分
'/my/score(/@page:[0-9]+)' => array('user', 'score'),

# QQ登录返回
'/user/QQCallback/*' => array('user', 'QQCallback'),

# 重置密码 step 1
'/resetPassword' => array('user', 'resetPassword'),

# 重置密码 step 2
'/doReset' => array('user', 'doReset'),

# 获取验证码
'/identifyImage(/*)' => array('user', 'identifyImage'),

# 后台管理
'/admin(/@type:system|common|topic|reply|tag|user|link(/@page:[0-9]+))' => array('admin', 'index'),

# 清理缓存
'/admin/ClearCache/@type:template|attachment|score' => array('manage', 'ClearCache'),

# 删除标签
'/manage/del_tag/@tagid:[0-9]+' => array('manage', 'del_tag'),

# 删除链接
'/manage/del_link/@position:[0-9]+' => array('manage', 'del_link'),

# AJAX 发表帖子
'POST /do/postTopic' => array('doController', 'postTopic'),

# AJAX 删除帖子
'POST /do/deleteTopic' => array('doController', 'deleteTopic'),

# AJAX 发布回复
'POST /do/postReply' => array('doController', 'postReply'),

# AJAX 删除回复
'POST /do/deleteReply' => array('doController', 'deleteReply'),

# AJAX 楼中楼回复
'POST /do/postFloor' => array('doController', 'postFloor'),

# AJAX 删除楼中楼回复
'POST /do/deleteFloor' => array('doController', 'deleteFloor'),

# AJAX 删除提醒
'POST /do/deleteNotification' => array('doController', 'deleteNotification'),

# AJAX 删除私信
'POST /do/deleteWhisper' => array('doController', 'deleteWhisper'),

# AJAX 上传图片
'POST /do/uploadPicture' => array('doController', 'uploadPicture'),

# AJAX 上传头像
'POST /do/uploadAvatar' => array('doController', 'uploadAvatar'),

# AJAX 删除图片
'POST /do/delPic' => array('doController', 'delPic'),

# AJAX 标记私信已读
'POST /do/readWhisper' => array('doController', 'readWhisper'),

# AJAX 传送私信
'POST /do/deliverWhisper' => array('doController', 'deliverWhisper'),

# AJAX 收藏帖子
'POST /do/favorTopic' => array('doController', 'favorTopic'),

# AJAX 赞帖子
'POST /do/praiseTopic' => array('doController', 'praiseTopic'),

# AJAX 关注用户
'POST /do/follow' => array('doController', 'follow'),

# AJAX 获取帖子的详细信息
'POST /manage/getTopicInfo' => array('manage', 'getTopicInfo'),

# AJAX 编辑帖子
'POST /manage/editTopic' => array('manage', 'editTopic'),

# AJAX 获取回复详情
'POST /manage/getReplyInfo' => array('manage', 'getReplyInfo'),

# AJAX 编辑回复
'POST /manage/editReply' => array('manage', 'editReply'),

# AJAX 锁帖
'POST /manage/lockTopic' => array('manage', 'lockTopic'),

# AJAX 帖子置顶
'POST /manage/topTopic' => array('manage', 'topTopic'),

# AJAX 禁言
'POST /manage/ban' => array('manage', 'ban'),

# 编辑链接
'POST /manage/edit_link' => array('manage', 'edit_link'),

# AJAX 获取更多楼中楼回复
'POST /getReplyFloorList' => array('home', 'getReplyFloorList'),

# AJAX 获取更多回复列表
'POST /getReplyList' => array('home', 'getReplyList'),

# AJAX 用QQ注册用户
'POST /qqjoin' => array('user', 'qqjoin'),

# AJAX 签到
'POST /do/doSign' => array('doController', 'doSign'),

# AJAX 设置个性签名
'POST /do/setSignature' => array('doController', 'setSignature'),

# AJAX 设置邮箱
'POST /do/setEmail' => array('doController', 'setEmail'),

# AJAX 设置密码
'POST /do/setPassword' => array('doController', 'setPassword'),

# 未匹配转404,默认不可删除规则,且必须置于最后
'*' => 'notFound'

);


路径配置里面也有很多正则判断,

  $regex = str_replace(array(
            ')',
            '/*'
        ), array(
            ')?',
            '(/?|/.*?)'
        ), $this->pattern);
        
        $regex = preg_replace_callback('#@([\w]+)(:([^/\(\)]*))?#', function($matches) use (&$ids)
        {
            $ids[$matches[1]] = null;
            
            if (isset($matches[3]))
            {
                return '(?P<' . $matches[1] . '>' . $matches[3] . ')';
            }
            
            return '(?P<' . $matches[1] . '>[^/\?]+)';
        }, $regex);
        
        if ($last_char === '/')
        {
            $regex .= '?';
        }
        else
        {
            $regex .= '/?';
        }
        
        if (preg_match('#^' . $regex . '(?:\?.*)?$#i', $url, $matches))
        {
            foreach ($ids as $k => $v)
            {
                $this->params[$k] = (array_key_exists($k, $matches)) ? urldecode($matches[$k]) : null;
            }
            
            if ($this->pass)
            {
                $this->params[] = $this;
            }
            
            $this->regex = $regex;
            
            return true;
        }



如果网站做的功能多了,一直这样累加下去,是不是比 直接读取$_SERVER["PATH_INFO"] 要影响性能?

展开
收起
kun坤 2020-06-06 15:49:44 1149 0
1 条回答
写回答
取消 提交回答
  • 是的。。你想得没有错,确实会影响你的性能的,,不过我觉得你这么一点都没有啥吧。。你又不是那种非常高并发的情况,无所谓的,单秒的并发可能就几十的,就不要去考虑这么一点性能上面的损失了。。嗯。有种办法你可以把这一些规则 都写到NGINX的配置里面,由他来做会好一些。 ######如果你有计算下时间,和其他处理时间相比,你会发现这个时间你是可以忽略的。如果正在意效率,可以对正则进行一个优先级排序,可以一定程度上优化下。######

    $start=microtime(true);

    路由分发(注册规则)

    foreach ($router_config as $path => $rule)  balaba...

    $delay= 1000*(microtime(true)-$start);

    file_put_contents("list.txt",$delay."\n",8);

    route patten

    3.6530494689941
    8.85009765625
    8.8458061218262
    10.030031204224
    8.8880062103271
    4.0349960327148
    10.149002075195
    3.9291381835938
    6.0160160064697
    5.2578449249268

    PATH_INFO

    0.017881393432617
    0.032901763916016
    0.033140182495117
    0.030994415283203
    0.015974044799805
    0.030994415283203
    0.019073486328125
    0.030994415283203
    0.030994415283203
    0.033855438232422

    数字不明显,直接做个图示


    2020-06-06 15:50:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载