帝国cms全站高效率随机调用(毫秒级调用)
时间:2023年09月17日
/来源:网络
/编辑:佚名
帝国cms全站高效率随机调用特点:
调用效率极高,79万数据随机调用测试,只需要500毫秒
调用可指定栏目调用,也可整个表调用.

安装简单,只需一个函数
PHP代码:
function ecms_rand($classid,$num){
global $empire,$dbtbpre;
$file_cache = ECMS_PATH."d/news.json"; //缓存文件
//缓存整个news表的数据
if(!file_exists($file_cache)){
//查询分类
$hm_class=$empire->query("select classid from {$dbtbpre}enewsclass");
while($hm_r=$empire->fetch($hm_class))
{
//查询分类下面的所有id
$hm_news=$empire->query("SELECT id FROM `{$dbtbpre}ecms_news` WHERE `classid` = {$hm_r[classid]}");
while($hm_nr=$empire->fetch($hm_news))
{
$news_data[$hm_r['classid']][] = $hm_nr[id];
}
}
file_put_contents($file_cache,json_encode($news_data));
}
//获取缓存数据文件
$file_arrs = json_decode(file_get_contents($file_cache),true);
if($classid=="0"){
$num = ceil($num/count($file_arrs));
foreach($file_arrs as $k=>$v)
{
if(count($v) <= $num){ continue;}
//根据数据表获取id,每个栏目随机分配文章id
$key_array = array_rand($file_arrs[$k],$num);
foreach($key_array as $v)
{
$rand_id.= $file_arrs[$k][$v].",";
}
}
$rand_id = rtrim($rand_id,",");
}else{
if(count($file_arrs[$classid]) <= $num){
$key_array = array_rand($file_arrs[$classid],count($file_arrs[$classid]));
}else{
$key_array = array_rand($file_arrs[$classid],$num);
}
//根据数据表获取id,每个栏目随机分配文章id
$key_array = array_rand($file_arrs[$classid],$num);
foreach($key_array as $v)
{
$rand_id.= $file_arrs[$classid][$v].",";
}
$rand_id = rtrim($rand_id,",");
}
return $rand_id;
}
安装方式:
将代码放到e/class/userfun.php文件中
调用方式:
<?php
$id = ecms_rand(1,50);
?>
调用的文章id:
[e:loop={0,50,3,0,"id in ($id)"}]
<?=$bqr['id']?>
[/e:loop]
效率方面总结:
1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间。
2、一次读取的内容越大,直接读文件的优势会越明显(读文件时间都是小幅增长,这跟文件存储的连续性和簇大小等有关系),这个结果恰恰跟预料的相反,说明MYSQL对更大文件读取可能又附加了某些操作(两次时间增长了近30%),如果只是单纯的赋值转换应该是差异偏小才对。
3、写文件和INSERT几乎不用测试就可以推测出,数据库效率只会更差。
4、很小的配置文件如果不需要使用到数据库特性,更加适合放到独立文件里存取,无需单独创建数据表或记录,很大的文件比如图片、音乐等采用文件存储更为方便,只把路径或缩略图等索引信息放到数据库里更合理一些。
5、PHP上如果只是读文件,file_get_contents比fopen、fclose更有效率,不包括判断存在这个函数时间会少3秒左右。
调用效率极高,79万数据随机调用测试,只需要500毫秒
调用可指定栏目调用,也可整个表调用.

安装简单,只需一个函数
PHP代码:
function ecms_rand($classid,$num){
global $empire,$dbtbpre;
$file_cache = ECMS_PATH."d/news.json"; //缓存文件
//缓存整个news表的数据
if(!file_exists($file_cache)){
//查询分类
$hm_class=$empire->query("select classid from {$dbtbpre}enewsclass");
while($hm_r=$empire->fetch($hm_class))
{
//查询分类下面的所有id
$hm_news=$empire->query("SELECT id FROM `{$dbtbpre}ecms_news` WHERE `classid` = {$hm_r[classid]}");
while($hm_nr=$empire->fetch($hm_news))
{
$news_data[$hm_r['classid']][] = $hm_nr[id];
}
}
file_put_contents($file_cache,json_encode($news_data));
}
//获取缓存数据文件
$file_arrs = json_decode(file_get_contents($file_cache),true);
if($classid=="0"){
$num = ceil($num/count($file_arrs));
foreach($file_arrs as $k=>$v)
{
if(count($v) <= $num){ continue;}
//根据数据表获取id,每个栏目随机分配文章id
$key_array = array_rand($file_arrs[$k],$num);
foreach($key_array as $v)
{
$rand_id.= $file_arrs[$k][$v].",";
}
}
$rand_id = rtrim($rand_id,",");
}else{
if(count($file_arrs[$classid]) <= $num){
$key_array = array_rand($file_arrs[$classid],count($file_arrs[$classid]));
}else{
$key_array = array_rand($file_arrs[$classid],$num);
}
//根据数据表获取id,每个栏目随机分配文章id
$key_array = array_rand($file_arrs[$classid],$num);
foreach($key_array as $v)
{
$rand_id.= $file_arrs[$classid][$v].",";
}
$rand_id = rtrim($rand_id,",");
}
return $rand_id;
}
安装方式:
将代码放到e/class/userfun.php文件中
调用方式:
<?php
$id = ecms_rand(1,50);
?>
调用的文章id:
[e:loop={0,50,3,0,"id in ($id)"}]
<?=$bqr['id']?>
[/e:loop]
效率方面总结:
1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间。
2、一次读取的内容越大,直接读文件的优势会越明显(读文件时间都是小幅增长,这跟文件存储的连续性和簇大小等有关系),这个结果恰恰跟预料的相反,说明MYSQL对更大文件读取可能又附加了某些操作(两次时间增长了近30%),如果只是单纯的赋值转换应该是差异偏小才对。
3、写文件和INSERT几乎不用测试就可以推测出,数据库效率只会更差。
4、很小的配置文件如果不需要使用到数据库特性,更加适合放到独立文件里存取,无需单独创建数据表或记录,很大的文件比如图片、音乐等采用文件存储更为方便,只把路径或缩略图等索引信息放到数据库里更合理一些。
5、PHP上如果只是读文件,file_get_contents比fopen、fclose更有效率,不包括判断存在这个函数时间会少3秒左右。
新闻资讯 更多
- 【帝国cms教程】帝国CMS模板变量$GLOBALS[navclassid]用法分析04-03
- 【帝国cms教程】鲜为人知帝国CMS内容页调用上一篇和下一篇的精华方法汇总04-03
- 【帝国cms教程】怎么快速找出帝国CMS数据库配置文件路径及迁移网站后修改技巧!04-03
- 【帝国cms教程】帝国CMS模板$GLOBALS[navclassid]用法详解04-03
- 【帝国cms教程】帝国cms 7.5版列表页分页样式修改笔记04-02
- 【帝国cms教程】解决帝国CMS搜索页面模板不支持灵动标签和万能标签的方法04-02
- 【帝国cms教程】帝国CMS只备份栏目和模板的方法04-02
- 【帝国cms教程】帝国CMS怎样删除清空数据库记录?04-02
热门文章
- 178Moban源码谈谈免费源码与收费源码的区别
- 2帝国CMS忘记后台登陆用户名、密码、认证码的解决方法
- 3帝国CMS(EmpireCMS) v7.5后台任意代码执行漏洞及具体修复方法
- 4帝国CMS和WordPress 哪个好?哪个适合建站?
- 5如何解决Discuz的密码错误次数过多请15分钟后登陆的问题
- 6帝国cms灵动标签取得内容和栏目链接地址
- 7emlog pro 注册码“开心”教程(如果有一天,emlog官方版 或者 emlog免费版 跑路了,那用户怎么办?)
- 8织梦CMS在nginx下设置伪静态方法(附nginx伪静态规则)
- 9帝国cms后台登录出现”您还未登录”怎么解决?
- 10帝国cms7.5忘记登录密码 和忘记登录认证码以及多次登录 失败被锁定解决办法