【发布时间】:2014-04-16 15:55:34
【问题描述】:
我有一个包含超过 27,000 条记录的表。我想获取下拉列表中的所有数据。为此,我已经实现了缓存,但它似乎无法正常工作,因为它变得非常缓慢并显示空白页面(有时浏览器被挂起)。
以下是我的代码(我使用的是 yiiboilerplate):
组件数组中backend/config/main.php的配置:
'cache' => array(
//'class' => 'system.caching.CMemCache',
'class' => 'system.caching.CDbCache',
'connectionID' => 'db',
),
在查看页面中:
$dependency = new CDbCacheDependency('SELECT MAX(bank_id) FROM bank');
$bank = CHtml::listData(Bank::model()->cache(1000, $dependency)->findAll('is_active=1', array('order' => 'name')), 'bank_id', 'concatened');
echo $form->dropDownListRow($model, 'bank_id', $bank, array(
'empty' => 'Select'
));
我认为 27000 条记录不是大数据,但它仍然变得非常慢,我想在我的整个应用程序中实现缓存。
我的配置正确吗?我哪里出错了?
谢谢
【问题讨论】:
-
对于浏览器来说这是相当多的数据(想想移动端)。即使您最终在可接受的时间内填充,您认为谁会滚动并选择那个长列表中的某些记录?我认为
<select>完全不在这里。您需要自动完成。 -
一次查询 27,000 条记录非常费力。想象一下,您正在初始化一个数组并用 27,000 个条目填充它。有时会导致服务器超时。做一个分页机制你的下拉条目会减轻你的负载。
-
@Pentium10 是对的。 This html page 仅包含具有 27000 个相同选项的选择
Pick Me为 64KB。我曾经有一个类似的选择,其中包含 10,000 条记录,这让我的浏览器不断崩溃。 -
这与下拉条目无关。它关于 findall 不能使用缓存。因为如果我正常尝试
Bank::model()->findall(),那么它也会变得非常慢并显示空白页。而不是 findall 我尝试了 createCommand ,它有点慢,但在下拉列表中显示所有记录。