摘要:路由控制器性能測(cè)試前言前段時(shí)間抽空寫了個(gè)微型路由控制器可以在我的另一篇文章里面看到詳細(xì)的介紹。上門有測(cè)試以及這幾個(gè)路由控制器的性能,總體來(lái)說(shuō)和在最壞的情況下表現(xiàn)最好。同樣的測(cè)試條件。所以本次測(cè)試僅僅針對(duì),以及。
PHP路由控制器性能測(cè)試 前言
前段時(shí)間抽空寫了個(gè)微型路由控制器可以在我的另一篇文章里面看到詳細(xì)的介紹。雖然在設(shè)計(jì)的時(shí)候及盡量避開(kāi)了正則匹配和數(shù)組循環(huán)這種耗時(shí)的操作。盡量節(jié)省時(shí)間。但是那都是理論上的。今天就實(shí)際測(cè)試了一下。
代碼github上面專門有一個(gè)叫做php-router-benchmark的倉(cāng)庫(kù),用來(lái)測(cè)試路由分發(fā)的性能。
上門有測(cè)試php-r3,Pux,FastRoute,Symfony2 Dumped,Symfony2 以及Aura v2這幾個(gè)路由控制器的性能,總體來(lái)說(shuō)R3和FastRoute在最壞的情況下表現(xiàn)最好。其中R3和Pux是C語(yǔ)言實(shí)現(xiàn)的插件,有語(yǔ)言上面的性能優(yōu)勢(shì)。
測(cè)試首先f(wàn)ork了一份這個(gè)benchmark的庫(kù),并把自己的Router的測(cè)試代碼加上去了。同樣的測(cè)試條件。由于R3沒(méi)有裝上,還有Pux安裝失敗。所以本次測(cè)試僅僅針對(duì)FastRoute,Symfony2 Dumped,Symfony2,Aura v2以及Router。
這樣也好,反正這幾個(gè)都是純PHP實(shí)現(xiàn)的。另外兩個(gè)C語(yǔ)言實(shí)現(xiàn)的這次就不進(jìn)行比較了。
首先是最壞情況下的測(cè)試,其中包含了兩個(gè)測(cè)試用例,一個(gè)是找不到的404 還有一個(gè)是在列表最后一個(gè)才能匹配到的,也就是最壞的兩種情況。
Worst-case matchingThis benchmark matches the last route and unknown route. It generates a randomly prefixed and suffixed route in an attempt to thwart any optimization. 1,000 routes each with 9 arguments.
This benchmark consists of 10 tests. Each test is executed 1,000 times, the results pruned, and then averaged. Values that fall outside of 3 standard deviations of the mean are discarded.
Test Name | Results | Time | + Interval | Change |
---|---|---|---|---|
Router - unknown route (1000 routes) | 993 | 0.0000232719 | +0.0000000000 | baseline |
Router - last route (1000 routes) | 981 | 0.0000955424 | +0.0000722705 | 311% slower |
FastRoute - unknown route (1000 routes) | 990 | 0.0005051955 | +0.0004819236 | 2071% slower |
FastRoute - last route (1000 routes) | 998 | 0.0005567203 | +0.0005334484 | 2292% slower |
Symfony2 Dumped - unknown route (1000 routes) | 998 | 0.0006116139 | +0.0005883420 | 2528% slower |
Symfony2 Dumped - last route (1000 routes) | 998 | 0.0007765370 | +0.0007532651 | 3237% slower |
Symfony2 - unknown route (1000 routes) | 996 | 0.0028456177 | +0.0028223458 | 12128% slower |
Symfony2 - last route (1000 routes) | 993 | 0.0030129542 | +0.0029896823 | 12847% slower |
Aura v2 - last route (1000 routes) | 989 | 0.1707107230 | +0.1706874511 | 733450% slower |
Aura v2 - unknown route (1000 routes) | 988 | 0.1798588730 | +0.1798356011 | 772760% slower |
查看上表的數(shù)據(jù),我自己的Router在兩種測(cè)試用例的最壞情況下都是表現(xiàn)最好的。并且把其他幾個(gè)遠(yuǎn)遠(yuǎn)的甩出幾條街。看來(lái)這個(gè)主要得益于使用樹(shù)形結(jié)構(gòu)的PHP數(shù)組來(lái)存儲(chǔ)路由表。所以進(jìn)行遍歷的時(shí)候始終能達(dá)到O(log n)的時(shí)間復(fù)雜度。
然后再來(lái)看最好的情況,也就是在第一個(gè)url就能匹配到的情況。
First route matchingThis benchmark tests how quickly each router can match the first route. 1,000 routes each with 9 arguments.
This benchmark consists of 5 tests. Each test is executed 1,000 times, the results pruned, and then averaged. Values that fall outside of 3 standard deviations of the mean are discarded.
Test Name | Results | Time | + Interval | Change |
---|---|---|---|---|
FastRoute - first route | 998 | 0.0000498390 | +0.0000000000 | baseline |
Symfony2 Dumped - first route | 995 | 0.0000517531 | +0.0000019141 | 4% slower |
Router - first route | 994 | 0.0001499363 | +0.0001000972 | 201% slower |
Aura v2 - first route | 998 | 0.0008559464 | +0.0008061073 | 1617% slower |
Symfony2 - first route | 998 | 0.0012734995 | +0.0012236604 | 2455% slower |
查看這個(gè)表的數(shù)據(jù),每一個(gè)庫(kù)只有一個(gè)測(cè)試用例。是測(cè)試的“最好”的情況。這里之所以加上引號(hào)是因?yàn)椋琑outer使用的是樹(shù)形結(jié)構(gòu)存儲(chǔ),其他幾個(gè)庫(kù)所謂的“最好”情況,其實(shí)不適用了。不能在第一個(gè)匹配到。所以應(yīng)該說(shuō)在這個(gè)測(cè)試用例中Router還是以比較平均的時(shí)間來(lái)和其他幾個(gè)庫(kù)的最好時(shí)間進(jìn)行比較?。。。ū容^一下上下兩個(gè)表中的Time絕對(duì)值就能看出,其他幾個(gè)庫(kù)在下面的“最好”情況下都比上面的最壞情況要好很多,但是Router庫(kù)的表現(xiàn)確是相反的,并且不管那種情況時(shí)間都是比較接近的,這就和之前提到的樹(shù)形節(jié)點(diǎn)遍歷的時(shí)間復(fù)雜度相對(duì)固定有關(guān)系)
后記這次測(cè)試了幾個(gè)純PHP實(shí)現(xiàn)的路由控制器,等下次繼續(xù)把兩個(gè)C語(yǔ)言實(shí)現(xiàn)的庫(kù)一起拿來(lái)比較一下!??!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21167.html
摘要:為了一探究竟,于是開(kāi)啟了這次應(yīng)用性能調(diào)優(yōu)之旅。使用即時(shí)編譯器和都能輕輕松松的讓你的應(yīng)用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結(jié)。在經(jīng)歷了調(diào)優(yōu)過(guò)程踩的很多坑之后,我們最終完善并實(shí)施了初步的性能測(cè)試方案,通過(guò)真實(shí)的測(cè)試數(shù)據(jù)歸納出了 Laravel 開(kāi)發(fā)過(guò)程中的一些實(shí)踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應(yīng)用程序響應(yīng)有點(diǎn)慢、20幾個(gè)并...
摘要:目前的業(yè)務(wù)訪問(wèn)量數(shù)千萬(wàn),后端臺(tái),平均使用率。產(chǎn)生的問(wèn)題長(zhǎng)連接數(shù)超過(guò)時(shí),性能會(huì)下降。很可惜,我們目前使用的青云,目前尚不能實(shí)現(xiàn)超高可用,也不能實(shí)現(xiàn)無(wú)縫擴(kuò)容,私網(wǎng)內(nèi)的網(wǎng)絡(luò)傳輸性能延遲都有很大優(yōu)化空間。經(jīng)測(cè)試,性能有的提升。 需求分析 目前的業(yè)務(wù)全站使用ThinkPHP 3.2.3,前臺(tái)、后臺(tái)、Cli、Api等。目前的業(yè)務(wù)API訪問(wèn)量數(shù)千萬(wàn),后端7臺(tái)PHP 5.6,平均CPU使用率20%。 ...
摘要:一是什么全稱用語(yǔ)言編寫的輕量級(jí)擴(kuò)展框架專注于開(kāi)發(fā)。這里只是給出了一種測(cè)試方法通過(guò)多次不同并發(fā)數(shù)測(cè)試結(jié)果得知與原生性能消耗是。業(yè)務(wù)開(kāi)發(fā)速度結(jié)論采用框架開(kāi)發(fā)業(yè)務(wù)代碼量能節(jié)約。 showImg(https://segmentfault.com/img/bVbamHp?w=320&h=320); 一、Asf 是什么? 全稱 API Services Framework, 用C語(yǔ)言編寫的輕量級(jí)P...
摘要:一路由目錄眾所周知,對(duì)于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無(wú)狀態(tài)的,并且被分配了中間件組。生成的控制器為每個(gè)行為保留了方法,同時(shí)還包括了處理動(dòng)作和的聲明注釋。 一、路由目錄 眾所周知,對(duì)于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對(duì)于laravel框架也一樣,對(duì)于數(shù)據(jù)庫(kù)的操作,無(wú)非...
閱讀 3034·2021-11-24 09:39
閱讀 2272·2021-10-08 10:05
閱讀 2762·2021-09-24 13:52
閱讀 1581·2021-09-22 15:07
閱讀 599·2019-08-30 15:55
閱讀 1818·2019-08-30 15:53
閱讀 698·2019-08-30 15:44
閱讀 3126·2019-08-30 11:20