


Interviewer: List several implementation methods of PHP expansion and compare their performance?
About several implementation methods of PHP extension
1.php native extension development c language, note: [ext_skel.php] script creation
2.zephir
3.php-cpp
4.php-x
5.cgo
Encapsulation zendapi mode
CGO nests C and GO codes, and uses GO to compile the PHP extension skeleton and the specific implementation of GO
, etc. . . Not limited to the above methods.
Focus on [zephir, cgo, PHP enable JIT] 4 modes, and use the Fibonacci sequence calculation performance to check the running effect.
zephir code generation extension
//Main 类 final class Zimuge { public static function calcFibonacci(int i){ if (i < 2) { return i; } return self::calcFibonacci(i - 1) + self::calcFibonacci(i - 2); }
编译安装 zephir build
cgo code generation extension
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() {}
package main import "C" //export calcFib func calcFib(i int) int { if i < 2 { return i } return calcFib(i-1)+calcFib(i-2) }
Compile & Link
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
Testing php script code
<?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";
Testing without using PHP JIT
php test.php ->执行结果取一个平均 832040 CGO: 0.059875011444092 秒 832040 zephir: 8.5679790973663 秒 832040 PHP: 0.75995492935181 秒
Testing without using 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 秒
The so files compiled by cgo and zephir are imported through php.ini
To execute the test script, you need to ensure that so is read in correctly.
Command php -m or php --ri xx.so to confirm.
[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
Use PHP version
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
Conclusion:
JIT can improve the performance of PHP.
If you want to learn go but don’t want to give up php, you can play CGO.
zephir Although the computing performance is not very good, writing PHP extensions is relatively simple to implement.
Recommended learning: "PHP Video Tutorial"
The above is the detailed content of Interviewer: List several implementation methods of PHP expansion and compare their performance?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



You can check which extensions are used by PHP by viewing the phpinfo() function output, using command line tools, and checking the PHP configuration file. 1. View the phpinfo() function output, create a simple PHP script, save this script as phpinfo.php, and upload it to your web server. Access this file in the browser and use the browser's search function. Just look for the keyword "extension" or "extension_loaded" on the page to find information about the extension.

How to use PHP to extend the report generation function of SuiteCRM SuiteCRM is a powerful open source CRM system that provides rich functions to help enterprises manage customer relationships. One of the important functions is report generation. Using reports can help enterprises better understand their business situations and make correct decisions. This article will introduce how to use PHP to extend the report generation function of SuiteCRM and provide relevant code examples. Before starting, you need to make sure that SuiteCRM is installed.

How to use PHP to extend PDO to connect to Oracle database Introduction: PHP is a very popular server-side programming language, and Oracle is a commonly used relational database management system. This article will introduce how to use PHP extension PDO (PHPDataObjects) to connect to Oracle database. 1. Install the PDO_OCI extension. To connect to the Oracle database, you first need to install the PDO_OCI extension. Here are the steps to install the PDO_OCI extension: Make sure

When developing with PHP, we may need to use some PHP extensions. These extensions can provide us with more functions and tools, making our development work more efficient and convenient. But before using these extensions, we need to install them first. This article will introduce you to how to install PHP extensions. 1. What is a PHP extension? PHP extensions refer to components that provide additional functionality and services to the PHP programming language. These components can be installed and used through PHP's extension mechanism. PHP extension can help us with

PHP is a popular server-side scripting language that can handle dynamic content on web pages. The geoip extension for PHP allows you to get information about the user's location in PHP. In this article, we’ll cover how to use PHP’s geoip extension. What is the GeoIP extension for PHP? The geoip extension for PHP is a free, open source extension that allows you to obtain data about IP addresses and location information. This extension can be used with the GeoIP database, a database developed by MaxMin

Pagoda Panel is an open source server management panel. While providing website operators with convenient website management, database management, SSL certificate management and other services, it also provides powerful PHP extension and PHP version management functions, making server management easier. Be more simple and efficient. 1. PHP extension PHP extension is a module used to enhance PHP functions. By installing PHP extensions, more functions and services can be implemented, such as: accelerator: accelerator can significantly improve PHP performance, and reduce service load by caching PHP scripts.

PHP extension development is the art of creating custom functionality, extending PHP core functionality and building more powerful applications. It opens up new possibilities in the PHP world, allowing developers to transcend the basic limitations of the language. This article will take you on a journey of PHP extension development, providing you with comprehensive knowledge and practical guidance from basic concepts to advanced techniques. PHP extension development basics Before starting PHP extension development, you need to understand some basic concepts. What are PHP extensions? A PHP extension is a dynamic link library (DLL) that extends PHP core functionality and provides new data types, functions and classes. Advantages of PHP Extensions PHP extensions have many advantages, including: scalability, flexibility, performance optimization, and code reuse. PHP

Tutorial: Use Aurora Push and its PHP extension to add push message functionality to your application. Introduction: In today's mobile application development, push message functionality has become an indispensable part of various applications. Aurora push is one of the most commonly used and most popular solutions in this regard. This tutorial will introduce how to use Aurora Push and its PHP extension to add message push functionality to your application, and provide corresponding code examples for reference. 1. Introduction to Jiguang Push Jiguang Push is a cross-platform message push solution based on cloud services.
