Rumah > pembangunan bahagian belakang > tutorial php > Penemubual: Senaraikan beberapa cara untuk melaksanakan sambungan PHP dan membandingkan prestasinya?

Penemubual: Senaraikan beberapa cara untuk melaksanakan sambungan PHP dan membandingkan prestasinya?

藏色散人
Lepaskan: 2023-04-10 22:36:01
ke hadapan
5478 orang telah melayarinya

Mengenai beberapa kaedah pelaksanaan sambungan PHP

1.php pembangunan sambungan asli dalam bahasa c, nota: [ext_skel.php] penciptaan skrip

2.zephir

3.php-cpp

4.php-x

5.cgo

  • Mod zendapi pakej

  • CGO menyarangkan kod C dan GO serta menggunakan GO untuk menyusun rangka sambungan PHP dan pelaksanaan khusus GO

, dsb. . . Tidak terhad kepada kaedah di atas.

Dayakan JIT sekitar [zephir, cgo, PHP] dalam 4 mod dan semak kesan larian melalui prestasi pengiraan jujukan Fibonacci.

sambungan penjanaan kod zephir

1

2

3

4

5

6

7

8

9

//Main 类

final class Zimuge

{

  public static function calcFibonacci(int i){

      if (i < 2) {

          return i;

      }

      return self::calcFibonacci(i - 1) + self::calcFibonacci(i - 2);

  }

Salin selepas log masuk

1

2

编译安装

zephir build

Salin selepas log masuk

sambungan penjanaan kod cgo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

package main

/*

#ifdef HAVE_CONFIG_H

#include "config.h"

#endif

#include "php.h"

#include "php_ini.h"

#include "ext/standard/info.h"

static int le_go2php;

PHP_MINIT_FUNCTION(go2php)

{

    return SUCCESS;

}

PHP_MSHUTDOWN_FUNCTION(go2php)

{

    return SUCCESS;

}

PHP_RINIT_FUNCTION(go2php)

{

    return SUCCESS;

}

PHP_RSHUTDOWN_FUNCTION(go2php)

{

    return SUCCESS;

}

PHP_MINFO_FUNCTION(go2php)

{

    php_info_print_table_start();

    php_info_print_table_header(2, "go2php support", "enabled");

    php_info_print_table_end();

}

PHP_FUNCTION(go2php_print)

{

    zend_long a,b;

    ZEND_PARSE_PARAMETERS_START(1, 1)

        Z_PARAM_LONG(a)

    ZEND_PARSE_PARAMETERS_END();

    b = calcFib(a);

    RETURN_LONG(b);

}

ZEND_BEGIN_ARG_INFO(null, 0)

ZEND_END_ARG_INFO()

const zend_function_entry go2php_functions[] = {

    PHP_FE(go2php_print, null)

    PHP_FE_END

};

zend_module_entry go2php_module_entry = {

    STANDARD_MODULE_HEADER,

    "go2php",

    go2php_functions,

    PHP_MINIT(go2php),

    PHP_MSHUTDOWN(go2php),

    PHP_RINIT(go2php),

    PHP_RSHUTDOWN(go2php),

    PHP_MINFO(go2php),

    "0.1.0",

    STANDARD_MODULE_PROPERTIES

};

#ifdef COMPILE_DL_GO2PHP

ZEND_GET_MODULE(go2php)

#endif

*/

import "C"

func main() {}

Salin selepas log masuk

1

2

3

4

5

6

7

8

9

package main

import "C"

//export calcFib

func calcFib(i int) int {

    if i < 2 {

        return i

    }

    return calcFib(i-1)+calcFib(i-2)

}

Salin selepas log masuk

Kompilasi & Pautkan

1

2

3

4

5

6

7

8

CGO_CFLAGS="-g \

-I`/root/download/php8/bin/php-config --include-dir` \

-I`/root/download/php8/bin/php-config --include-dir`/main \

-I`/root/download/php8/bin/php-config --include-dir`/TSRM \

-I`/root/download/php8/bin/php-config --include-dir`/Zend \

-I`/root/download/php8/bin/php-config --include-dir`/ext \

-I`/root/download/php8/bin/php-config --include-dir`/ext/date/lib \

-DHAVE_CONFIG_H" CGO_LDFLAGS="-Wl,--export-dynamic -Wl,--unresolved-symbols=ignore-all" go build -p 1 -gcflags "-l" -buildmode=c-shared -o go2php.so

Salin selepas log masuk

Menguji kod skrip php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<?php

const COUNT = 30;

function calcFibonacci(int $i): int {

    if ($i < 2) {

        return $i;

    }

    return calcFibonacci($i - 1) + calcFibonacci($i - 2);

}

// CGO 速度

$startTime = microtime(true);

for($i = 1; $i <= COUNT; $i++) {

    if($i != COUNT) {

        go2php_print($i);

    }else {

        echo go2php_print($i)."\n";

    }

}

$time = microtime(true) - $startTime;

echo "CGO: {$time} 秒\n";

//zephir 速度

$startTime = microtime(true);

for($i = 1; $i <= COUNT; $i++) {

    if($i != COUNT) {

        Lsz\Zimuge::calcFibonacci($i);

    }else {

        echo Lsz\Zimuge::calcFibonacci($i)."\n";

    }

}

$time = microtime(true) - $startTime;

echo "zephir: {$time} 秒\n";

// PHP JIT 速度

$startTime = microtime(true);

for($i = 1; $i <= COUNT; $i++) {

    if($i != COUNT) {

        calcFibonacci($i);

    }else {

        echo calcFibonacci($i)."\n";

    }

}

$time = microtime(true) - $startTime;

echo "PHP: {$time} 秒\n";

Salin selepas log masuk

Menguji tanpa menggunakan PHP JIT

1

2

3

4

5

6

7

8

php test.php

->执行结果取一个平均

832040

CGO: 0.059875011444092 秒

832040

zephir: 8.5679790973663 秒

832040

PHP: 0.75995492935181 秒

Salin selepas log masuk

Menguji dengan PHP JIT

1

2

3

4

5

6

7

8

php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M test.php

->执行结果取一个平均

832040

CGO: 0.046900987625122 秒

832040

zephir: 5.5882248878479 秒

832040

PHP: 0.10621190071106 秒

Salin selepas log masuk

Fail so yang disusun oleh cgo dan zephir diperkenalkan melalui php.ini

Semasa melaksanakan skrip ujian, anda perlu memastikan bahawa fail so dibaca dengan betul.

Perintah php -m atau php --ri xx.so untuk mengesahkan.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

[PHP Modules]

Core

ctype

curl

date

dom

FFI

fileinfo

filter

gd

go2php

hash

iconv

json

libxml

lsz

mbstring

mysqlnd

openssl

pcre

PDO

pdo_mysql

pdo_sqlite

Phar

posix

redis

Reflection

session

SimpleXML

SPL

sqlite3

standard

swoole

tokenizer

xml

xmlreader

xmlwriter

yaf

Zend OPcache

zephir_parser

zimuge

[Zend Modules]

Zend OPcache

Salin selepas log masuk

Gunakan versi PHP

1

2

3

4

5

php -v

PHP 8.1.3 (cli) (built: Feb 27 2022 19:40:08) (NTS)

Copyright (c) The PHP Group

Zend Engine v4.1.3, Copyright (c) Zend Technologies

    with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies

Salin selepas log masuk

Kesimpulan:

JIT boleh meningkatkan prestasi php.

Jika anda ingin belajar pergi tetapi tidak mahu melepaskan php, anda boleh mencuba CGO.

Walaupun prestasi pengkomputeran zephir tidak begitu baik, menulis sambungan PHP agak mudah untuk dilaksanakan.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Penemubual: Senaraikan beberapa cara untuk melaksanakan sambungan PHP dan membandingkan prestasinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan