У меня есть таблица маршрута с правилами маршрута ((1000+)) для загрузки в UrlManager во время init. Но узким местом является цикл foreach, который слишком медленный.Yii-framework UrlManager perfomance
Возможные ответы: база данных 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;
Спасибо всем :)
Благодарим за ваше мнение. В db есть 1000+ объектов недвижимости (REO), и для каждого REO хранится уникальный uri в таблице «route». –
Например: http://www.site.com/any_user_given_uri.html сопоставляется с квартирой/видом/id/1 http://www.site.com/any_user_given_uri1.html сопоставляется с квартирой/видом/id/2 http://www.site.com/any_user_given_uri2.html сопоставлен с квартирой/списком Я хочу, чтобы пользователь мог установить uri для любого REO самостоятельно. –
У меня около 10 тыс. REOs в моем db. но правила URL равны 7. Это не главное. вы можете написать одно правило для первых двух URL-адресов, перечисленных. as ''/ .html '=>' apartment/view/''теперь в действии admin view вы получите' $ term' из '$ _GET [' term ']' и получите свой идентификатор от '$ term'. Во-вторых, это хорошая идея, но вы всегда должны пытаться добавить некоторые ограничения, как в случае третьего uri, вы не позволяете пользователю использовать слова 'any_user_given_uri' в uri, поскольку он используется для указания на REO или REO id. Я бы посоветовал ознакомиться с специальными темами управления URL-адресами в Yii окончательном руководстве. –