• web项目优化


    1 循环时没有使用break 

    案例:查找一个值是否在数组中存在(为举例舍弃自带函数)

    $aa=123;
    $arr=array(234,123,5,6,45646,346,23);
    foreach($arr as $v){
        if($aa==$v){
            dosth();
    break; } }

    这个是常犯的错误如果数量少或复杂度低性能没什么影响,如果遇到超大数组 那么就浪费了大量的资源

    2 有时一次性将数据读取出来放入内存后处理更佳

    遇到一个优化 开发者是想根据id递归查出所有的父子关系结构,每次递归都去用父id去数据库查。当时可能是数据量少 没有发现性能问题 ,但数据越来越多 每条记录都去访问一次数据库,没两下就拖垮数据库 一次业务请求却要访问成千上万次数据库

    优化:如果量少 比如几万条 直接一次性获取到内存中 用完立马收回 释放内存

             如果量大 可以异步多取几次大数据

    3 有时候用where 取代 orderby性能更佳

     案例:多个表联合查询,a,b,c  排序 order by a.status desc,b.id desc

    在跨表排序时 虽然2个字段都建有索引 但没法使用到索引 会导致using temporary,using filesort   全表扫描 观察了一下数据 a.status最大的条数有几百条  即使排序出来也是几百条在前面,后面的几乎都不会去看

    优化 where a.status=maxnumber order by b.id desc  可在搜索中加入按status的条件搜索 性能立马上升

    4 有时候列表页就那么几个显示的字段 但速度特别慢,可根据情况分表处理

        将查询率高且重要的字段分表出来 可降低查询复杂度 ,尤其是字段多 数据量大的表再合适不过;

    5 多线程抓取写入数据库时  数据库吞吐量过低阻塞抓取速度

      抓取速度快于数据库写入速度 导致数据库同步延迟并且阻塞抓取,这样的情况可以建立队列,将抓取的数据先插入队列 在慢慢写入数据库

    6 不需要的数据提前过滤掉,不要在接下来一系列的操作后 才剔除  增加后面无用的查询或处理操作

    7一条语句查询可完成却要循环几次去调用数据库,一般一条语句关联如果有索引且效率很高就不要分开处理了。

  • 相关阅读:
    stm32芯片上两个点 那个是一脚
    MLX90640 热红外成像仪 热源检测 电子检修 热水管探测
    USB继电器 开关 2路 5V 单片机STM32 Arduino 电器单独DC供电
    ARM仿真下载调试器 SWD编程器 Jlink OB下载器 超STLINK 代替V8
    Kotlin+Jetpack Compose+Volley+ViewModel Android开发
    TortoiseGit MergeTool 文件比对工具替换为 DiffMerge
    mysql 行转列 多行转一行
    MySQL using index condition
    PHP获取参数时, 解耦其默认值的处理逻辑
    centos7安装rabbitmq3.9.5单机部署
  • 原文地址:https://www.cnblogs.com/wangxusummer/p/5328416.html
Copyright © 2020-2023  润新知