最新公告
  • 欢迎您光临站长模版网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 帝国cms全站高效率随机调用(毫秒级调用)

    正文概述 管理员   2024-04-10   20

    特点:

    调用效率极高,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全站高效率随机调用(毫秒级调用)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    支付宝支付
    余额支付
    ×
    微信扫码支付 0 元