提高開發效率小技巧

snakelis發表於2021-01-28

整理一下自己開發過程中使用到,且認為能提高開發效率的小技巧,工具、編碼、資料庫等都列舉了一些,希望能對你們有幫助。

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 協議》,轉載必須註明作者和本文連結

相關文章