当我们从数据库读取数据返回到页面时,如果返回数据量很少,请求数也很少。是很快速的。但当请求量增大,数据量变多时。还是频繁的从数据库中读取数据就很慢了。所以当返回的数据大多是不变的数据或者是很少更新的数据时。我们第一次读取数据库时就将数据存在文件中,之后当需要返回时就直接从文件中返回,省去了连接和读取数据库的步骤。效率自然就会提上去。下面做一个实验。
假设数据库中有100条数据。如图
我们用两种方法来将其返回到页面上。第一种用直接从数据库读取的方式,第二种用存文件的方式,对比一下效率。
数据库读取的useDb.php代码:
<?php
$con = mysqli_connect('localhost','root','','test');
// for ($i=0; $i < 10; $i++) {
$sql = 'select * from test';
$query = mysqli_query($con,$sql);
while($res = mysqli_fetch_assoc($query)){
$arr[] = $res;
}
echo json_encode($arr);
// }
文件读取的useFile.php代码:
<?php
$con = mysqli_connect('localhost','root','','test');
// for ($i=0; $i < 10; $i++) {
if(!file_exists('./temp.txt')){
$sql = 'select * from test';
$query = mysqli_query($con,$sql);
while ($res = mysqli_fetch_assoc($query)) {
$arr[] = $res;
}
file_put_contents('./temp.txt',serialize($arr));
}
echo json_encode(unserialize(file_get_contents('./temp.txt')));
// }
这时没有for循环来模拟大压力的情况下,看看效率。
直接读取数据库的:
存文件的:
没有for循环时两个效率都差不多,我们现在把for循环的注释打开。看看有压力的情况下二者的效率比较
直接读取数据库的:
存入文件的:
可以看到,直接读取数据库用了1.3秒,这样就太慢了。而读取文件的才38毫秒,只是比没有for循环的慢了一点。所以在项目中适当存一下文件还是对效率有很大的提升的。还可以给userFile给个定时任务让他每隔多长时间就自己从数据库中拿取刷新一次。从数据库中取数据是效率比较慢的事,应该尽量缓存起来提升效率。