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?

Mar 28, 2022 pm 01:55 PM
sambungan php

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

//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
编译安装
zephir build
Salin selepas log masuk

sambungan penjanaan kod cgo

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
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

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

<?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

php test.php
->执行结果取一个平均
832040
CGO: 0.059875011444092 秒
832040
zephir: 8.5679790973663 秒
832040
PHP: 0.75995492935181 秒
Salin selepas log masuk

Menguji dengan PHP JIT

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.

[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

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!

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

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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyemak sambungan mana yang digunakan dalam php Bagaimana untuk menyemak sambungan mana yang digunakan dalam php Aug 01, 2023 pm 04:13 PM

Anda boleh menyemak sambungan yang digunakan oleh PHP dengan melihat output fungsi phpinfo(), menggunakan alat baris arahan dan menyemak fail konfigurasi PHP. 1. Lihat output fungsi phpinfo(), buat skrip PHP mudah, simpan skrip ini sebagai phpinfo.php, dan muat naik ke pelayan web anda Akses fail ini dalam pelayar dan gunakan fungsi carian pelayar "extension" atau "extension_loaded" pada halaman untuk mencari maklumat tentang sambungan.

Bagaimana untuk melanjutkan keupayaan penjanaan laporan SuiteCRM menggunakan PHP Bagaimana untuk melanjutkan keupayaan penjanaan laporan SuiteCRM menggunakan PHP Jul 19, 2023 am 10:27 AM

Cara menggunakan PHP untuk melanjutkan fungsi penjanaan laporan SuiteCRM SuiteCRM ialah sistem CRM sumber terbuka yang berkuasa yang menyediakan fungsi yang kaya untuk membantu perusahaan mengurus perhubungan pelanggan. Salah satu fungsi penting ialah penjanaan laporan Menggunakan laporan boleh membantu perusahaan lebih memahami situasi perniagaan mereka dan membuat keputusan yang betul. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melanjutkan fungsi penjanaan laporan SuiteCRM dan menyediakan contoh kod yang berkaitan. Sebelum memulakan, anda perlu memastikan SuiteCRM dipasang.

Cara menggunakan php untuk melanjutkan PDO untuk menyambung ke pangkalan data Oracle Cara menggunakan php untuk melanjutkan PDO untuk menyambung ke pangkalan data Oracle Jul 29, 2023 pm 07:21 PM

Cara menggunakan PHP untuk melanjutkan PDO untuk menyambung ke pangkalan data Oracle Pengenalan: PHP ialah bahasa pengaturcaraan sebelah pelayan yang sangat popular, dan Oracle ialah sistem pengurusan pangkalan data hubungan yang biasa digunakan. Artikel ini akan memperkenalkan cara menggunakan sambungan PHP PDO (PHPDataObjects) untuk menyambung ke pangkalan data Oracle. 1. Pasang sambungan PDO_OCI Untuk menyambung ke pangkalan data Oracle, anda perlu memasang sambungan PDO_OCI terlebih dahulu. Berikut ialah langkah-langkah untuk memasang sambungan PDO_OCI: Pastikan

Bermula dengan PHP: Pemasangan Sambungan PHP Bermula dengan PHP: Pemasangan Sambungan PHP May 20, 2023 am 08:49 AM

Apabila membangun dengan PHP, kami mungkin perlu menggunakan beberapa sambungan PHP. Sambungan ini boleh memberikan kami lebih banyak fungsi dan alatan, menjadikan pembangunan kami berfungsi dengan lebih cekap dan mudah. Tetapi sebelum menggunakan sambungan ini, kami perlu memasangnya terlebih dahulu. Artikel ini akan memperkenalkan anda kepada cara memasang sambungan PHP. 1. Apakah sambungan PHP? Sambungan PHP merujuk kepada komponen yang menyediakan fungsi dan perkhidmatan tambahan kepada bahasa pengaturcaraan PHP. Komponen ini boleh dipasang dan digunakan melalui mekanisme sambungan PHP. Sambungan PHP boleh membantu kami

Bagaimana untuk menggunakan sambungan geoip PHP? Bagaimana untuk menggunakan sambungan geoip PHP? Jun 01, 2023 am 09:13 AM

PHP ialah bahasa skrip sebelah pelayan yang popular yang boleh mengendalikan kandungan dinamik pada halaman web. Sambungan geoip untuk PHP membolehkan anda mendapatkan maklumat tentang lokasi pengguna dalam PHP. Dalam artikel ini, kami akan membincangkan cara menggunakan sambungan geoip PHP. Apakah sambungan GeoIP untuk PHP? Sambungan geoip untuk PHP ialah sambungan sumber terbuka percuma yang membolehkan anda mendapatkan data tentang alamat IP dan maklumat lokasi. Sambungan ini boleh digunakan dengan pangkalan data GeoIP, pangkalan data yang dibangunkan oleh MaxMin

Sambungan PHP dan pengurusan versi PHP Panel Pagoda Sambungan PHP dan pengurusan versi PHP Panel Pagoda Jun 21, 2023 am 08:49 AM

Pagoda Panel ialah panel pengurusan pelayan sumber terbuka Sambil menyediakan pengendali laman web dengan pengurusan laman web yang mudah, pengurusan pangkalan data, pengurusan sijil SSL dan perkhidmatan lain, ia juga menyediakan sambungan PHP yang berkuasa dan fungsi pengurusan versi PHP, menjadikan pengurusan pelayan lebih mudah dan cekap. 1. Sambungan PHP Sambungan PHP ialah modul yang digunakan untuk meningkatkan fungsi PHP Dengan memasang sambungan PHP, lebih banyak fungsi dan perkhidmatan boleh dilaksanakan, seperti: accelerator: pemecut boleh meningkatkan prestasi PHP dengan ketara, dan mengurangkan beban perkhidmatan dengan menyimpan skrip PHP.

Penerokaan mendalam pembangunan sambungan PHP: Mendedahkan rahsia di sebalik tabir pembangunan sambungan PHP Penerokaan mendalam pembangunan sambungan PHP: Mendedahkan rahsia di sebalik tabir pembangunan sambungan PHP Feb 19, 2024 pm 11:40 PM

Pembangunan sambungan PHP ialah seni mencipta fungsi tersuai, memanjangkan fungsi teras PHP dan membina aplikasi yang lebih berkuasa. Ia membuka kemungkinan baharu dalam dunia PHP, membolehkan pembangun mengatasi batasan asas bahasa. Artikel ini akan membawa anda dalam perjalanan pembangunan sambungan PHP, memberikan anda pengetahuan komprehensif dan panduan praktikal daripada konsep asas kepada teknik lanjutan. Asas pembangunan sambungan PHP Sebelum memulakan pembangunan sambungan PHP, anda perlu memahami beberapa konsep asas. Apakah sambungan PHP? Sambungan PHP ialah perpustakaan pautan dinamik (DLL) yang memanjangkan fungsi teras PHP dan menyediakan jenis data, fungsi dan kelas baharu. Kelebihan Sambungan PHP Sambungan PHP mempunyai banyak kelebihan, termasuk: kebolehskalaan, fleksibiliti, pengoptimuman prestasi dan penggunaan semula kod. PHP

Tutorial Lengkap: Cara menggunakan sambungan php GdImage untuk penjanaan imej Tutorial Lengkap: Cara menggunakan sambungan php GdImage untuk penjanaan imej Jul 28, 2023 am 11:41 AM

Tutorial Lengkap: Cara Menggunakan PHP Extension GdImage untuk Penjanaan Imej Pengenalan: Penjanaan imej adalah keperluan biasa dalam pembangunan laman web. Contohnya, jana kod pengesahan, lakaran kenit, statistik grafik dan banyak lagi. PHP menyediakan banyak perpustakaan sambungan untuk memproses imej, salah satu yang paling biasa digunakan ialah GdImage. Tutorial ini memperincikan cara menggunakan sambungan GdImage untuk menjana imej dan menyediakan contoh kod yang berkaitan. Langkah 1: Pasang sambungan GdImage Untuk menggunakan sambungan GdImage, anda perlu terlebih dahulu memastikan sambungan itu dipasang.

See all articles