网站优化,敢各位大佬这个网站给多少钱能优化?

今天看到一个cms的网站很卡,老板叫我优化有以下,下面是具体的方法

/**
     * 文章列表获取
     */
    public function arcList()
    {

        // 定义全局查询条件
        $map = []; // 将所有的查询条件封装到这个数组中

        $site_id = 0;
        if(Request::param('site_id')){
            $site_id=Request::param('site_id');
        }
        $map[] = ['site_id', '=', $site_id];

        // 搜索功能
        $keywords = Request::param('keywords');
        if ( !empty($keywords) ) {
            $map[] = ['title', 'like', '%'.$keywords.'%'];
        }
        $cid = Request::param('cid');

        $integral = Request::param('integral');
        $attr = Request::param('attr');


        if(Request::param('datebt')){
            $datebt = Request::param('datebt');
            $datearr=explode(" - ",$datebt);
            $datebegin=strtotime($datearr['0']);
            $dateend=strtotime($datearr['1']);
            $map[] = ['updatetime','between',[$datebegin,$dateend]];
        }

        $cateorg=ArcCate::order('sort')->select()->toArray();

        if(isset($cid)){
            $cids=getChildsId($cateorg,$cid);
            array_push($cids,$cid);//所有子类cID+自身cID
            if($cids){
                $map[] = ['cid','in',$cids];
            }
        }



        if(isset($integral)) {
            if ($integral != 'all') {
                $map[] = ['integral', '=', $integral];
            }
        }

        if(isset($attr)) {
            if ($attr != 'all') {
                $map[] = [$attr, '=', 1];
            }
        }

        $map[]=['del','=',0];
        // 定义分页参数
        $limit = isset($_GET['limit']) ? $_GET['limit'] : 10;
        $page = isset($_GET['page']) ? $_GET['page'] : 1;

        /**
        $arcList = ArcModel::where($map)
        -> alias('a')
        -> join(['wy_cate' => 'c'], 'a.cid = c.id')
        -> order('a.id', 'desc')
        //-> field('a.id,a.cid,a.title,a.createtime,a.updatetime,a.click,c.name')
        -> field(['a.id','a.cid','a.title','a.createtime','a.updatetime','a.click','c.name'])
        -> page($page,$limit)
        -> select();
         * **/


        $arcList=ArcModel::where($map)
            ->withoutField('content')
            ->withSum(['scoreTotal' => 'total'], 'score_in')
            ->withSum(['scoreForward' => 'forward'], 'score_in')
            ->withCount(['timesTotal' => 'times'])
            ->with(['arcCate'])
            ->order('id','desc')
            ->page($page,$limit)
            ->select();

        //dd($arcList->toArray());

        //$total = count($arcList);
        $total=count(ArcModel::where($map)->select());
        $result = array("code" => 0, "msg" => "查询成功", "count" => $total, "data" => $arcList);
        return json($result);

        // 设置模板变量
        View::assign('arcList', $arcList);

        // 渲染模板
        View::fetch();
    }

很难理解这是10多年开发的人写出来的代码,统计居然将所有的文章查询出来进行计数

$total=count(ArcModel::where($map)->select());

而且这分页跟没分页有啥区别?

// 定义分页参数
$limit = isset($_GET['limit']) ? $_GET['limit'] : 10;
$page = isset($_GET['page']) ? $_GET['page'] : 1;

如果是我page=1,limit=1 那还好

网站优化,敢各位大佬这个网站给多少钱能优化?

那如果我 page=9999999999999999999999999999999999999999&limit=9999999999999999999999999999999999999999 敢问阁下又将如何应对?

网站优化,敢各位大佬这个网站给多少钱能优化?

不知道大家遇到这种情况应该报价多少?

下面说说我的看法:
1、请求的参数尽量用类型限制,防止用户恶意传参

$page = (int)request("page");

2、对于返回数据的条数,应该设置一个最大值,你永远不知道用户会给你传多大

public function getLimit(int $defaultLimit = 10,int $maxLimit=100)
    {
        $limit = (integer)request("limit", $defaultLimit);
        if ($limit >= $maxLimit) {
            $limit = $maxLimit;
        }
        return $limit;
    }

当我们使用框架查询的时候,一般 paginate 已经携带查询的总条数了

$data = ModelName::latest("id")->paginate($this->getLimit());
return $this->resData($data->items(), $data->total())

3、关于关联查询或者统计,可通过模型关联的方式进行查询,这样看上去简单直了

$data = ModelName::with("user")->withCount("log")->paginate($this->getLimit());

看到100+的列表查询,我知道今晚又该加班了。。。

本作品采用《CC 协议》,转载必须注明作者和本文链接
保持勇敢,坚持有趣,生命不息,折腾不止。
OrangBus
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13

加缓存呗 还能咋优化 这是列表显示数据 又没法做到异步化

12小时前 评论

代码优化归优化,但是你一个正常访问的用户 无聊到什么 9999999 99999999999 ,那就不要访问呗。

11小时前 评论

分页不就是这么写的吗。非正常用户爱访问不访问。设置接口请求速率上限,活该这种人卡。

11小时前 评论
Imuyu 10小时前
ononl (作者) 9小时前
Jyunwaa

Rust重构

9小时前 评论
OrangBus (楼主) 7小时前

给钱就给优化

9小时前 评论

这种代码感觉没啥性能问题,大概率是服务器带宽或者图片加载慢。你让AI给你优化重写一下,还是慢直接列表加个缓存。

8小时前 评论
OrangBus (楼主) 7小时前
MArtian 6小时前
OrangBus (楼主) 4小时前

把列表數據緩存起來,半天或是或是一天是更新一次,

2小时前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!