cari

PHP归档phar性能测试
PHP自从5.3后新增PHAR归档,Phar 归档的概念来自 Java? 技术的 JAR 归档,它允许使用单个文件打包应用程序,这个文件中包含运行应用程序所需的所有东西。该文件不同于单个可执行文件,后者通常由编程语言生成,比如 C,因为该文件实际上是一个归档文件而非编译过的应用程序。因此 JAR 文件实际上包含组成应用程序的文件,但是考虑到安全性,不对这些文件进行仔细区分。Phar 扩展正是基于类似的理念,但是在设计时主要针对 PHP 的 Web 环境。同样,与 JAR 归档不同的是,Phar 归档可由 PHP 本身处理,因此不需要使用额外的工具来创建或使用。Phar 扩展对 PHP 来说并不是一个新鲜的概念。它最初使用 PHP 编写并被命名为 PHP_Archive,然后在 2005 年被添加到 PEAR 库。然而在实际中,解决这一问题的纯 PHP 解决方案非常缓慢,因此 2007 年重新编写为纯 C 语言扩展,同时添加了使用 SPL 的 ArrayAccess 对象遍历 Phar 归档的支持。自那时起,人们做了大量工作来改善 Phar 归档的性能,目前对Phar使用非常有限,而关于Phar的性能测试很少,到底Phar性能如何,通过一个简单实验检验下。

测试环境:
PHP:5.5.10
CPU:2GHz intel core i7
Mem:8GB
系统:Darwin 13.1.0

主要测试点:
1:Phar加载速度
1.1:文件大小多少的影响?
1.2:  include/require的影响?
1.3:Phar 存根(Stub)内容的影响?
2:Phar代码执行速度
2.1 全局函数对比
2.2 类对象
2.3 类方法
为了保证尽量保证测试准确,每种方式运行3次,去3次的平均值。同时作为对比,我们会直接采用代码方式,获得基准数据。
Phar 文件主要包含文件


phar-builder.php用于生成phar文件,执行test命令前,先执行此文件生成phar-test.phar文件。
test_load.php 测试加载phar文件速度
src目录内包含文件index.php文件是存根文件,包含dates.php,for.php,functions.php,dates测试文件类方法,for.php测试对象方法,functions.php测试函数方法。
具体附件代码。
第一:phar加载速度,采用include和require方式测试发现差异不大,只采用require方式。

$stime = microtime(true);require './phar-test.phar';$etime = microtime(true);$total = $etime - $stime;echo "phar total:".$total."s";
执行后,效率如下
localhost:phar ugg$ php test_phar_load.php phar total:0.0044760704040527slocalhost:phar ugg$ php test_phar_load.php phar total:0.0051448345184326slocalhost:phar ugg$ php test_phar_load.php phar total:0.0043849945068359slocalhost:phar ugg$ vim test_phar_load.php

平均加载4.7毫秒

对比直接源代码引用方式。

$stime = microtime(true);require './src/index.php';$etime = microtime(true);$total = $etime - $stime;echo "src total:".$total."s\n";

执行后,效率如下

localhost:phar ugg$ php test_src_load.phpsrc total:0.0026230812072754slocalhost:phar ugg$ php test_src_load.phpsrc total:0.0026969909667969slocalhost:phar ugg$ php test_src_load.phpsrc total:0.0025439262390137s

平均加载2.6毫秒
结论:通过加载速度对比,phar加载方式比直接文件加载方式慢了不少,几乎直接引用文件所耗时间的两倍。同时我又在phar文件中加载一些干扰文件,使phar文件变大,发现在10k以内,这个load时间变化不大。当然我并没有把新增的文件放到存根内,这样做的目的,对于超过10K的目录,文件组织方式比如是autoload方式,而不会通过一个文件包含所有的文件。phar加载时间是src直接加载的1.8倍左右。

第二:执行速度检验
phar方式,代码如下

    $stime = microtime(true);    //require 'phar://phar-test.phar';    require 'phar-test.phar';    $sstime = microtime(true);    for($i = 0; $ifor1to10000();        $number = number2Chinese('12345');    }       $eetime = microtime(true);    $etime = microtime(true);    $total = $etime - $stime;    $total2 = $eetime - $sstime;    echo "phar load total:".$total."s\n";    echo "phar execution 10000 total:".$total2."s";
执行效率如下
localhost:phar ugg$ php test_phar_functions.php phar load total:0.0047600269317627sphar execution 10000 total:0.00017499923706055slocalhost:phar ugg$ php test_phar_functions.php phar load total:0.004863977432251sphar execution 10000 total:0.00017404556274414slocalhost:phar ugg$ php test_phar_functions.php phar load total:0.004680871963501sphar execution 10000 total:0.00016689300537109s
执行10000次的类方法,对象实例和对象方法,以及函数方法,总共时间消耗为0.17毫秒。
src执行效率
localhost:phar ugg$ php test_src_functions.php phar load total:0.0029089450836182sphar execution 10000 total:0.00019693374633789slocalhost:phar ugg$ php test_src_functions.php phar load total:0.0028579235076904sphar execution 10000 total:0.0002140998840332slocalhost:phar ugg$ php test_src_functions.php phar load total:0.0029168128967285sphar execution 10000 total:0.00019478797912598s
执行10000次的类方法,对象实例和对象方法,以及函数方法,总共时间消耗为0.20毫秒。
小结:通过执行速度对比,发现是phar方式,执行速度,要比直接文件include方式,快了(0.20-0.17)/0.20*100=15%,phar方式执行速度快的具体原因没有找到,网上有份资料,apc+include_path设置 phar执行速度很快。https://github.com/ralphschindler/test-phar-performance-apc/。

总结:PHP归档phar方式,加载速度要慢于正常文件包含方式,但是执行速度要高于文件包含方式,如果配合include_path设置和APC或者OP方式,优化phar归档的加载速度,就能提升php的执行速度。下一步会做方面的尝试,1:构建大phar文件,实验加载速度,执行速度。2:了解phar加载原理和执行原理,3:包概念管理和依赖。


其他一些参考资料
PHP V5.3中新特性,创建并使用Phar归档。http://www.ibm.com/developerworks/cn/opensource/os-php-5.3new4/
test-phar-performance-apc https://github.com/ralphschindler/test-phar-performance-apc/

Kenyataan
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
E-mel PHP: Panduan Penghantaran Langkah demi LangkahE-mel PHP: Panduan Penghantaran Langkah demi LangkahMay 09, 2025 am 12:14 AM

PhpisusedforsendingemailsduetoitsintegrationWithservermailservicesandexternalsmtpproviders, automatingnotificationsandmarketingcampaigns.1) Setupyourphpenvironmentwithawebserverandphp, Memastikan

Cara Menghantar E -mel melalui PHP: Contoh & KodCara Menghantar E -mel melalui PHP: Contoh & KodMay 09, 2025 am 12:13 AM

Cara terbaik untuk menghantar e -mel ialah menggunakan perpustakaan phpmailer. 1) Menggunakan fungsi mel () adalah mudah tetapi tidak boleh dipercayai, yang boleh menyebabkan e -mel memasuki spam atau tidak dapat dihantar. 2) PHPMailer menyediakan kawalan dan kebolehpercayaan yang lebih baik, dan menyokong surat HTML, lampiran dan pengesahan SMTP. 3) Pastikan tetapan SMTP dikonfigurasi dengan betul dan penyulitan (seperti startTLS atau SSL/TLS) digunakan untuk meningkatkan keselamatan. 4) Untuk sejumlah besar e -mel, pertimbangkan untuk menggunakan sistem giliran mel untuk mengoptimumkan prestasi.

E -mel PHP Lanjutan: Headers & Ciri -ciri KustomE -mel PHP Lanjutan: Headers & Ciri -ciri KustomMay 09, 2025 am 12:13 AM

CustomheadersandadvancedfeaturesInphpeMailenhanceFunctialityandreliability.1) customHeadersAddmetadataFortrackingandCategorization.2) htmlemailsallowformattingIntivity.3)

Panduan untuk menghantar e -mel dengan PHP & SMTPPanduan untuk menghantar e -mel dengan PHP & SMTPMay 09, 2025 am 12:06 AM

Menghantar mel menggunakan PHP dan SMTP boleh dicapai melalui Perpustakaan PHPMailer. 1) Pasang dan konfigurasikan PHPMailer, 2) Tetapkan butiran pelayan SMTP, 3) Tentukan kandungan e -mel, 4) Hantar e -mel dan mengendalikan kesilapan. Gunakan kaedah ini untuk memastikan kebolehpercayaan dan keselamatan e -mel.

Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?May 08, 2025 am 12:21 AM

Thebestapproachforsendingemailsinphpisusingthephpmaillibraryduetoitsreliability, featureRichness, andeaseofuse.phpmailersupportssmtp, proveddetaileDerrorHandling, membolehkanSendsendingHtmlandPlainteMails, supportsattachments, danStoVeShanCess

Amalan terbaik untuk suntikan ketergantungan dalam phpAmalan terbaik untuk suntikan ketergantungan dalam phpMay 08, 2025 am 12:21 AM

Alasan untuk menggunakan suntikan ketergantungan (DI) ialah ia menggalakkan gandingan longgar, kebolehlihatan, dan pemeliharaan kod. 1) Gunakan pembina untuk menyuntik kebergantungan, 2) Elakkan menggunakan pencari perkhidmatan, 3) Gunakan bekas suntikan ketergantungan untuk menguruskan kebergantungan, 4) meningkatkan kesesuaian melalui suntikan suntikan, 5) Elakkan kebergantungan over-suntikan, 6) Pertimbangkan kesan DI terhadap prestasi.

Petua Penalaan Prestasi PHPPetua Penalaan Prestasi PHPMay 08, 2025 am 12:20 AM

Phpperformancetuningiscrucialbecauseitenhancesspeedandeficiency, whoarevitalforwebapplications.1) cachingwithapcureSdatabaseloadandimprovesresponsetimes.2)

Keselamatan e -mel PHP: Amalan terbaik untuk menghantar e -melKeselamatan e -mel PHP: Amalan terbaik untuk menghantar e -melMay 08, 2025 am 12:16 AM

TthebestpracticesforDailssecureeleynpinceDudududude: 1) usingSecureConfigurationsatiationswithsmtpandStartTartTlSencrryption, 2) vactrentatiatingIsTitionputStopReventInJectaCtAtactaSs, 3) engrypTyptingSensensitiVIdAdAlsHAlSiSsSenSsensSl ,SsengsSenSsensSl ,SsengSiSsSSSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSssSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSSSSsSSSSSSSSSHAsSsSSSSSHAsSsSengs.)

See all articles

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

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

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.