cari
Rumahpembangunan bahagian belakangPHP7Mari kita bincangkan sama ada sekatan jenis fungsi PHP7 mempunyai kesan ke atas prestasi? (Perbincangan ujian)

PHP7Adakah pengehadan jenis fungsi mempunyai kesan ke atas prestasi? Artikel berikut akan bercakap tentang kesan menetapkan atau tidak mengehadkan jenis data fungsi PHP7 pada prestasi saya harap ia akan membantu semua orang!

Mari kita bincangkan sama ada sekatan jenis fungsi PHP7 mempunyai kesan ke atas prestasi? (Perbincangan ujian)

Artikel ini menggunakan ujian tekanan mudah untuk meneroka kesan penetapan atau tidak mengehadkan jenis data fungsi PHP7 di samping itu, saya ingin berkongsi pengalaman dalam dua masalah kecil dan penyelesaiannya Jika terdapat sebarang kesilapan, sila betulkan.

Penghadan jenis fungsi PHP7

(1) Pengenalan

  • Penghadan jenis parameter fungsi (termasuk nilai pulangan, atribut ahli) bermula daripada PHP5 Disokong, tetapi tidak banyak jenis yang disokong PHP7 telah melanjutkannya: int/string/bool/object dll. Parameter jenis yang sama boleh diluluskan, terutamanya apabila berbilang orang sedang membangun secara kolaboratif.
  • Pembelajaran yang disyorkan: "
  • Tutorial Video PHP

    "

    • Jika tidak mungkin untuk menukar jenis data secara automatik, seperti berikut, sudah tentu, premisnya ialah jenis yang hendak ditukar boleh ditukar seperti biasa

      Artikel ini adalah mengenai kesan sekatan jenis ujian terhadap prestasi

    • Nota: Jika parameter dan nilai pulangan tidak konsisten dengan jenis yang ditetapkan, ralat akan dilaporkan, yang tidak disahkan 100% Perlu menukar secara manual
    function testInt(int $intNum){
      var_dump($intNum);
    }
    testInt("123"); // int(123)
    (2) Ujian tekanan
  • .

Persekitaran berjalan

PHP 7.2.34
  • Laravel 5.8

    AB 2.3
    • Konfigurasi mesin tunggal
    • Nama model MacBook Pro
    Nama pemproses Quad-Core Intel Core i7
  • Memori 8 GB

    Jumlah nombor daripada teras 4
    • AB
    • Gunakan AB (Apache Benchmark) untuk ujian tekanan Memandangkan ia bukan ujian tekanan formal, kami hanya mengambil berat tentang penunjuk komprehensif: Permintaan sesaat (purata bilangan permintaan sesaat)
  • Terutamanya Parameter
  • -n Bilangan permintaan ujian tekanan
    • - c Bilangan konkurensi
    • -p Nyatakan fail yang perlu membawa parameter semasa membuat permintaan POST

      -r tidak keluar apabila menghadapi tindak balas ralat Sistem pengendalian mempunyai langkah perlindungan terhadap tinggi serangan concurrency (apr_socket_recv: Tetapan semula sambungan oleh rakan sebaya)
      • Menetapkan item Set dua POST Antara muka tidak mempunyai logik perniagaan, operasi perisian tengah, dsb., seperti berikut
      (3) Laksanakan
  • dan jalankan sebanyak lima ujian tekanan Konfigurasi dan keputusan dipaparkan seperti berikut ( Pemadaman bersatu: | grep 'Permintaan sesaat ')
/***** 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;
}
(4) Keputusan

    Ujian tekanan tidak terlalu ketat, keputusan adalah untuk rujukan sahaja
Peningkatan prestasi pengehadan jenis tidak sebesar yang dijangkakan, ia sangat kecil, tetapi cara penulisan ini masih disyorkan
/*****第一次*****/
// 类型限定接口 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

  • Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati :
  • Video Pengaturcaraan
  • ! !


Atas ialah kandungan terperinci Mari kita bincangkan sama ada sekatan jenis fungsi PHP7 mempunyai kesan ke atas prestasi? (Perbincangan ujian). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:segmentfault. Jika ada pelanggaran, sila hubungi admin@php.cn Padam

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual