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
, 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 | 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
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
import "C"
func main() {}
|
Salin selepas log masuk
1 2 3 4 5 6 7 8 9 | package main
import "C"
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);
}
$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" ;
$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" ;
$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!