Performance Yii框架UrlManager性能

Performance Yii框架UrlManager性能,performance,yii,url-routing,Performance,Yii,Url Routing,我有一个带有路由规则((1000+)的路由表,可以在初始化时加载到UrlManager中。 但瓶颈是foreach循环,它太慢了 可能的答案:NoSQL数据库、memcache?你能给点建议吗 $oldRules = $this->rules; $this->rules = array(); $dependency = new CDbCacheDependency('SELECT MAX(created_at) FROM route'); $route

我有一个带有路由规则((1000+)的路由表,可以在初始化时加载到UrlManager中。 但瓶颈是foreach循环,它太慢了

可能的答案:NoSQL数据库、memcache?你能给点建议吗

    $oldRules = $this->rules;
    $this->rules = array();
    $dependency = new CDbCacheDependency('SELECT MAX(created_at) FROM route');
    $routes = Route::model()->cache(Yii::app()->params['cache_expire_time'], $dependency)->findAll();

    Yii::app()->cache->set('routes', $routes, Yii::app()->params['cache_expire_time'], $dependency);

    // @todo Bottle neck on 1000+ rows (~1.3s on 1000 rows)
    foreach ($routes as $route) {
        $rule = array($route->routeable_controller . '/' . $route->routeable_action);
        if ($route->routeable_id) {
            $rule['defaultParams'] = array('id' => $route->routeable_id);
        }
        $this->rules[$route->pattern] = $rule;
    }

    $this->rules += $oldRules;

你们是运动员吗?你读过Yii权威指南吗。他们清楚地提到,在解析请求时,urlManager规则中的每个规则都应用于请求URL,直到找到匹配的规则为止。在memcache中加载所有规则不起作用。
同样,这些规则在正则表达式的帮助下匹配,而正则表达式本身就是一个昂贵的代码。
我想说的是,尝试重写规则,使单个规则与多个URL匹配。尝试将其中一些移动到.htaccess中(用于缺少操作或重定向)

谢谢您的意见。在db中有1000多个不动产对象(REO),每个REO在
route
表中存储唯一的uri。例如:映射到公寓/view/id/1映射到公寓/view/id/2映射到公寓/list我希望用户可以自己为任何REO设置uri。我的db中大约有10k个REO。但URL规则只有7条。这不是重点。您可以为列出的前两个URL编写一条规则。作为
'/.html'=>“公寓/视图/”
现在在管理视图操作中从
$获取
$term
\u获取['term']
并从
$term
获取您的id。其次,允许用户创建URI是个好主意,但是,您应该始终尝试添加一些约束,例如在第三个uri的情况下,您将不允许用户在uri中使用单词
任何用户\u给定的\u uri
,因为它用于指向REO或REO id。我建议在Yii权威指南中进行专题URL管理。可能我应该为中的每个对象添加
seo\u URL
字段公寓表?在UrlManager规则中,类似于:公寓/=>公寓/视图