我有一个页面从我的数据库加载了大量数据。我想加快加载时间。我已经缓存了查询,但加载时间仍然比我希望的要长。
是否可以渲染包含数据的表并将其存储在会话中以在每次新页面刷新时加载?我什至考虑使用 ob_start() 将其放入外部文本文件中;
最好的处理方法是什么?
将其存储在会话中可能不是最好的主意,当您将数据添加到会话(默认情况下)时,数据会写入操作系统上的文件中,通常位于 /tmp/ 中,这意味着您将相当频繁地访问磁盘大量并存储同样多的数据。
如果数据不是特定于用户的,那么您可以将其存储在磁盘或内存中 - (请参阅:php.net/apc)
如果数据是用户特定的,我建议将其存储在分布式缓存中,例如 Memcached (memcached.org) PHP 有一个可以启用的库 (php.net/memcached)
(特定于用户的数据是指用户交易、商品、购物车等数据)
对于您选择的任何方法,其逻辑基本相同:
Memcached,用户特定数据示例:
<?php
$memcached = new Memcached();
$data = $memcached->get('shopping-cart_' . $user_id);
if (!$data) {
$sql = $db->query("..");
$data = array();
while($row = $query->fetch_assoc()) {
$data[] = $row;
}
$memcached->set('shopping-cart_' . $user_id, $data);
}
?>
<table>
<?php
foreach ($data as $item) {
echo '<tr><td>' . $item['name'] .' </td></tr>';
}
?>
</table>
全局数据(非用户特定)
<?php
$cache_file = '/cached/pricing-structure.something';
if (file_exists($cache_file)) {
echo $cache_file;
} else {
// heavy query here
$h = fopen('/cached/pricing-structure.something', 'w+');
fwrite($h, $data_from_query);
fclose($h);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)