提高开发效率小技巧

提高开发效率小技巧

整理一下自己开发过程中使用到,且认为能提高开发效率的小技巧,工具、编码、数据库等都列举了一些,希望能对你们有帮助。

postman

关于Postman的Runner(更新时间 2021-03-24 15:53:35)

场景:需求开发过程中可能依赖于一部分业务数据的生成,通过runner可以一键执行多个接口。例:生成订单数据提供后续使用(下单、支付 两个接口)
常规操作:先调用下单接口 然后获取订单号 再手动调用支付接口
解决方式:使用到postman 的runner 、环境变量、tests

步骤

  1. 导入下单接口和支付接口
  2. 修改下单接口tests,这样可以下单之后动态修改订单号的环境变量
  3. 使用runner功能设置需要跑的接口和循环次数、延时
  4. 调整好接口顺序并执行

自动更新环境变量

场景:接口调试过程中,token过期导致
常规方法:单个接口修改token参数。
解决方法:接口参数使用环境变量{{token}}。token过期后,调用一次获取token接口,自动更新环境变量即可。

变量定义:

变量使用:

自动更新环境变量:

        var data = JSON.parse(responseBody);
        pm.environment.set("token", data.data.token);

导入请求

场景:联调或调试接口bug时,参数很复杂或者特定参数才能复现。
常规方法:手动修改接口参数调试
解决方法:导入接口请求,参数、headr头等全部保持一致。

        导入:
            1.浏览器->F12->选择对应请求,右键->copy->copy as curl (bash)
            2.postman->import->Raw Text

获取请求curl:

导入postman:

请求抓包

场景:接口抓包之后筛选需要的接口请求记录数据和复现。

  • chrome安装Postman Interceptor扩展

  • postman 打开 Capture requests and cookies、选择 Request ->Interceptor。(INTERCEPTOR CONNECTED 后面的点点绿色即连接成功)

  • 建立连接之后选择抓包的域名

    postman form-data参数转换为json

    老接口使用的forn-data形式传参,写单元测试或者需要模拟数据的时候希望使用json,然后转换成数组的场景。
    挂一个我自己写的转换脚本页面:json.whereku.club/
    纯前端代码。需要的自己copy到本地跑也行

    phpstorm

    暂存/恢复 代码(开发中切换分支)

    场景:开发过程中修改了部分代码,临时需要切换其他分支,但是本地代码还不能提交。

      VCS -> git -> stash changes(暂存) 、unstash changes(恢复)

xdebug调试,快速定位断点

     ctrl +shift + F8(xdebug)

拼写错误提示

使用有些字符串但是不是英文单词,例如:wechat、alipay 等
编辑器 ->Proofreading ->spelling ->accepted Words ->add

查看当前行代码提交记录

场景:排查部分行代码 (bug甩锅 hhh)

镜像

阿里巴巴开源镜像

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

docker 阿里云镜像加速器地址

    阿里云->容器镜像服务-> 镜像加速器

PHP编码

isset — 检测变量是否已设置并且非 NULL、

        ## 如果 json 无法被解码, 或者编码数据深度超过了递归限制的话,将会返回NULL 。 
        ## json_decode 字符串 返回null,int正常返回

        $redis_data = RedisService::getInstance()->hMGet('test', [1, 2, 3]);
        foreach ($redis_data as $value) {
            $check['result'] = json_decode($value);
            if (isset($check['test'])) {
                print_r(1);
            } else {
                print_r(2);
            }
            die;
        }

PHP循环引用,保持unset习惯

        $arr = [
            'a', 'b',
            'c', 'd',
        ];

        foreach ($arr as &$each){
            echo $each;
        }
        echo PHP_EOL;
        foreach ($arr as $each){
            echo $each;
        }

        ## 输出结果
        abcd
        abcc

二维数组根据某个字段进行排序

        一个字段排序
        array_multisort(array_column($data, 'sort'), SORT_DESC, $data);
        多个字段排序
        array_multisort(array_column($data, 'sort1'), SORT_DESC, array_column($data, 'sort2'), SORT_DESC, $data);

二维数据根据某个key当键名

        array_column($arr,$column_name,$key_name)

mysql

Mysql order by 不唯一字段】与【limit】混用的坑

但当使用不唯一的字段排序时,分两页查询的数据可能出现同一条数据,并丢失数据!(当排序和分页结合时,一定要非常警觉,order by 后应采用唯一的字段或字段组合)

            -- 表结构
            CREATE TABLE `test_sort` (
              `id` int(11) NOT NULL,
              `sort` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

            -- 模拟数据
            INSERT INTO `test`.`test_sort` (`id`, `sort`) VALUES ('1', '1');
            INSERT INTO `test`.`test_sort` (`id`, `sort`) VALUES ('2', '2');
            INSERT INTO `test`.`test_sort` (`id`, `sort`) VALUES ('3', '1');
            INSERT INTO `test`.`test_sort` (`id`, `sort`) VALUES ('4', '1');
            INSERT INTO `test`.`test_sort` (`id`, `sort`) VALUES ('5', '1');
            INSERT INTO `test`.`test_sort` (`id`, `sort`) VALUES ('6', '1');

            -- 测试sql

            SELECT * FROM `test_sort` ORDER BY sort asc limit 1,1;
            SELECT * FROM `test_sort` ORDER BY sort asc limit 4,1;

延时关联(覆盖索引) limit 分页查询

测试数据为我本地数据库,就不贴出来了,需要用到的自己测试一下。

    覆盖索引:  
            # 演示数据 - 性能测试数据库:**** 订单数量 300W
            SELECT SQL_NO_CACHE  count(*) FROM tb_user_order;
            #优化前
            SELECT SQL_NO_CACHE  *  FROM tb_user_order ORDER BY gmt_created DESC,id desc LIMIT 100000,10;
            #优化后
            SELECT SQL_NO_CACHE  * FROM tb_user_order AS a INNER JOIN (SELECT id FROM tb_user_order ORDER BY gmt_created DESC,id desc LIMIT 100000,10
            ) AS b USING (id);

执行时间分析

工具/软件

  • everything

    Everything 基于名称快速定位文件和文件夹

  • vimum

    Vimium 为 Chrome 浏览器增加了使用类似 Linux 系统的 vim 编辑器快捷键功能。你可以通过快捷键直接访问网页中的某个链接。

  • RedisDesktopManager(windows redis客户端)
  • oneinstack(linux 自动安装服务器环境)
  • API返回json格式出参格式化:jsonView

其他

  • 阿里云日志 查询字符串中需要转义

          * | select * where contents like '%{"status":0%' limit 100
          * | select * where contents like '%CDbCommand%' limit 100
  • chrome页面截全屏

           F12 -> ctrl+shift+p -> capture full size screenshot
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 3年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

Another Redis DeskTop Manger 免费开源 :smile:

3年前 评论
未定义 3年前
snakelis (楼主) 3年前

查看当前行代码提交记录,可以安装一个插件叫 GitBox 很方便的就可以查看提交记录

3年前 评论
snakelis (楼主) 3年前

原来postman还能这么用!!!

3年前 评论
snakelis (楼主) 3年前
寞小陌 (作者) 3年前

isset 和 ?? 谁香

3年前 评论
幽弥狂 3年前

@看上隔壁小花了啦
$a ?? 0 等同于 isset($a) ? $a : 0。 如果要实现 isset 存在但是取值不去$a 就不行了 如下

    if(isset($a['key'])){
        $result  = 1;
    }else{
        $result = 2;
    }
3年前 评论

不错, 好记性不如烂笔头啊, 善于总结, 非常优秀!

3年前 评论
snakelis (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
1
粉丝
39
喜欢
54
收藏
122
排名:1362
访问:2767
私信
所有博文
社区赞助商