溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP7函數(shù)類型限定對性能有沒有影響

發(fā)布時間:2022-02-15 11:12:37 來源:億速云 閱讀:155 作者:小新 欄目:編程語言

這篇文章主要介紹PHP7函數(shù)類型限定對性能有沒有影響,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

PHP7函數(shù)類型限定

(1) 介紹
  • 函數(shù)參數(shù)類型限定(包括返回值、成員屬性)從PHP5開始支持的,但是支持的類型不多,PHP7做了擴展:int/string/bool/object 等

  • 作用

    function testInt(int $intNum){
      var_dump($intNum);
    }
    testInt("123"); // int(123)
    • 避免錯誤調(diào)用,標(biāo)明類型,只能傳遞同類型的參數(shù),尤其多人協(xié)同開發(fā)時。

      推薦學(xué)習(xí):《PHP視頻教程》

    • 如果不是可以自動轉(zhuǎn)換數(shù)據(jù)類型,如下,當(dāng)然前提是待轉(zhuǎn)化類型可以正常轉(zhuǎn)化

    • 而本文正是測試類型限定對性能的影響程度

  • 注意  參數(shù)、返回值如果跟設(shè)定的類型不一致時會報錯,不是百分百確認的需要手動轉(zhuǎn)化下

(2) 壓測
  • 運行環(huán)境

    • PHP  7.2.34

    • Laravel  5.8

    • AB  2.3

  • 單機配置

    • 型號名稱  MacBook Pro

    • 處理器名稱  Quad-Core Intel Core i7

    • 內(nèi)存  8 GB

    • 核總數(shù)  4

  • AB

    • -n  壓測請求數(shù)

    • -c  并發(fā)數(shù)

    • -p  POST請求時指定所需攜帶參數(shù)的文件

    • -r  遇到錯誤響應(yīng)不退出,操作系統(tǒng)有防高并發(fā)攻擊保護措施 (apr_socket_recv: Connection reset by peer)

    • 使用AB (Apache Benchmark)  進行壓測,由于不是正式的壓測,所以此處只關(guān)心綜合指標(biāo):Requests per second (平均每秒請求數(shù))

    • 主要參數(shù)

  • 設(shè)置項目  設(shè)置兩個 POST 接口,沒有業(yè)務(wù)邏輯、中間件操作等,如下

/***** 1 普通接口 *****/
// CommonUserController
public function createUser(Request $request)
{
    $this->validate($request, [
        'name' => 'required|string',
        'age'  => 'required|integer',
        'sex'  => ['required', Rule::in([1, 2])],
    ]);
    (new CommonUserModel())->createUser($request['age'], $request['name'], $request['sex'], $request['address'] ?? '');
    return response()->json(['status' => 200, 'msg' => 'ok']);
}
// CommonUserModel
public function createUser($sex, $age, $name, $address)
{
    if(empty($sex) || empty($age) || empty($name))  return false;
    // 省略DB操作
    return true;
}

/***** 2 類型限定接口 *****/
// TypeUserController
public function createUser(Request $request): JsonResponse
{
    $this->validate($request, [
        'name' => 'required|string',
        'age'  => 'required|integer',
        'sex'  => ['required', Rule::in([1, 2])],
    ]);
    (new TypeUserModel())->createUser($request['age'], $request['name'], $request['sex'], $request['address'] ?? '');
    return response()->json(['status' => 200, 'msg' => 'ok']);
}
// TypeUserModel
public function createUser(int $age, string $name, int $sex, string $address): bool
{
    if(empty($sex) || empty($age) || empty($name)){
        return false;
    }
    // 省略DB操作
    return true;
}
(3) 實施
  • 共進行五次壓測,配置及結(jié)果展示如下 (統(tǒng)一刪除:| grep 'Requests per second')

/*****第一次*****/
// 類型限定接口 rps=456.16
ab -n 100  -c 10 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=450.12
ab -n 100  -c 10 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/common/create_user

/*****第二次*****/
// 類型限定接口 rps=506.74
ab -n 1000  -c 100 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=491.24
ab -n 1000  -c 100 -p '/tmp/ab_post_data.json' -T 'application:json'  http://www.laravel_type_test.com/api/common/create_user

/*****第三次*****/
// 類型限定接口 rps=238.43 
ab -n 5000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=237.16
ab -n 5000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user

/*****第四次*****/
// 類型限定接口 rps=209.21
ab -n 10000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=198.01
ab -n 10000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user

/*****第五次*****/
// 類型限定接口 rps=191.17
ab -n 100000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/type/create_user
// 普通接口 rps=190.55
ab -n 100000  -c 150 -p '/tmp/ab_post_data.json' -T 'application:json' -r http://www.laravel_type_test.com/api/common/create_user
(4) 結(jié)果
  • 壓測不算太嚴謹,結(jié)果僅供參考

  • 類型限定對性能的提升沒有預(yù)期的大,很微小,不過還是推薦這種寫法

以上是“PHP7函數(shù)類型限定對性能有沒有影響”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI