摘要:眾所周知,框架越重,性能相對就越低,因為重型框架會在解析時調用非常多的類方法和自定義函數,導致性能嚴重下降。好在相對于而言,性能提升了將近一倍,而的也是個不錯的替代方案。首先安裝和擴展。我已向作者反饋,他修正了這個問題。
眾所周知,PHP框架越重,性能相對就越低,因為重型框架會在解析時調用非常多的類、方法和自定義函數,導致性能嚴重下降。
Laravel是一個非常受歡迎的PHP框架,但它也是一個重型的全棧框架,你可以使用這個方法測試你的Laravel應用的性能,效果都很不理想。
當然Laravel還有個姊妹版:Lumen,這個是類似于Slim的微框架,如果你覺得這個微框架足夠使用,可以用來替代Laravel。
好在PHP7相對于PHP5.6而言,性能提升了將近一倍,而Facebook的HHVM也是個不錯的替代方案。所以如果可能的話,盡可能用最新版PHP,好處不是一星半點兒。
但對于Laravel這些重型框架來說,即使用了PHP7/HHVM,性能還是很低,雖然用緩存(比如memcached/redis等)可以緩解服務器壓力,但只是提升了靜態頁面速度,對于Eloquent ORM這種很耗性能的地方,還是治標不治本(當然你可以用DB門面代替,參考我的這個提問),難道就沒有辦法了嗎?(有人說opcache,但是它對于Laravel框架來說效果不是非常好)
不!你需要Stone!
Stone是什么?這是作者在PHPHub上面的帖子,查看Stone項目地址和文檔。
下面是在PHP7的安裝方法:
我的測試環境是Debian Linux 8 64位,OSX也可以(用homebrew安裝Nginx和PHP7,其他操作見下面),不推薦用Windows,因為編譯擴展相對麻煩些。
用Debian/Ubuntu/Linux mint可以使用dotdeb源,有最新版的Nginx,PHP7,MySQL/MariaDB。當然我不會告訴你,我用的是OpenResty,安裝過程不贅述,不會的請Google。
首先安裝swoole和runkit擴展。
pecl install swoole
PHP7在這里的坑是,如果用這個源安裝了PHP7,由于PEAR不是最新版,可能會遇到這個issues描述的問題,解決方法:
wget http://pear.php.net/go-pear.phar php go-pear.phar
在撰寫本文時,runkit擴展暫時不支持PHP7,所以不要用pecl安裝,編譯會出錯的。但是有人做了修改版可以用,見這個issues。
安裝方法:
git clone https://github.com/runkit7/runkit7.git cd runkit7 phpize ./configure make sudo make install
到此這兩個擴展都安裝成功。
然后根據你的PHP7實際路徑來寫ini文件,加載swoole和runkit。至于Windows或者OSX用homebrew安裝的話,直接改php.ini就行了。
使用Dotdeb源安裝的PHP7路徑是/etc/php/7.0/,所以我的相關命令是:
sudo echo extension=swoole.so >> /etc/php/7.0/cli/conf.d/20-swoole.ini sudo echo extension=swoole.so >> /etc/php/7.0/fpm/conf.d/20-swoole.ini sudo echo extension=runkit.so >> /etc/php/7.0/cli/conf.d/20-runkit.ini sudo echo extension=runkit.so >> /etc/php/7.0/fpm/conf.d/20-runkit.ini
然后安裝Stone:composer require stone/kernel:dev-master,不得不說的是,在撰寫本文時作者的gitbook上面有兩個錯誤:
1.把pecl寫成了pcel;
2.composer安裝的地址。仍然是他之前的項目地址,而他在帖子里面說了,由于之前的項目包含了他的公司的某些信息,所以他換了個地址,就是StoneGroup/stone。
大家在參考Stone文檔時務必按本文操作,少走彎路。我已向作者反饋,他修正了這個問題。
最后重啟php-fpm,再用php -m看看,這兩個擴展加載成功。
接下來的步驟,你按照文檔來操作就行了,到此Stone在PHP7上面安裝成功!啟動Stone,好好享受性能的飛躍吧!
PS:找到另一個類似項目,但是在細節上面的實現方式不同,感興趣的可以看看:LaravelFly
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21735.html
摘要:目前來看等語言還難以企及和。作為一個資深的開發者,在技術上給各位程序十點未來的建議,希望對大家有所幫助。開發者應當學習掌握規范,在開發程序時應當盡量遵循規范。程序員除了寫后臺程序之外,還有很大一部分工作在展現層,和瀏覽器前端打交道。 PHP 從誕生到現在已經有20多年歷史,從Web時代興起到移動互聯網退潮,互聯網領域各種編程語言和技術層出不窮, Node.js 、 GO 、 Pytho...
摘要:但在密集計算方面比等靜態編譯語言差幾十倍甚至上百倍。一使用棧內存在引擎和擴展中,經常要創建一個的變量,底層就是一個指針。代碼中創建的變量也進行了優化,直接在棧內存上預分配。應用層與底層在錯誤拋出的方式全部統一為異常。 原文:http://rango.swoole.com/archives/440最近PHP官方終于發布了傳說中的PHP7,雖然只是alpha版。PHP7號稱是新一代的PHP...
摘要:什么是當解釋器完成對腳本代碼的分析后,便將它們生成可以直接運行的中間代碼,也稱為操作碼,。的目地是避免重復編譯,減少和內存開銷。這將帶來顯著的性能加速,通常特別是高流量和高并發量時降低了整體服務器的內存消耗,而且很少有缺點。 一、個人實踐發現opcache 最近為了應對雙十一期間高流量的沖擊,小編通過壓力測試去查找服務器性能瓶頸,發現100并發時,QPS并不是很高,但CPU和內存消耗特...
摘要:如何實現持久化持久化,將在內存中的的狀態保存到硬盤中,相當于備份數據庫狀態。相當于備份數據庫接收到的命令,所有被寫入的命令都是以的協議格式來保存的。 最近社區里面有一篇文章引起了最多程序猿的關注,Laravel、PHPer 面試可能會遇到的問題,看評論區不少小伙伴們被難倒,對于一些問題同樣難倒了我(其實有很多啦),趁著周末有空,又總結梳理了一遍,順便來答一波題。由于個人技術水平有限,答...
閱讀 731·2023-04-25 19:28
閱讀 1391·2021-09-10 10:51
閱讀 2390·2019-08-30 15:55
閱讀 3408·2019-08-26 13:55
閱讀 2996·2019-08-26 13:24
閱讀 3325·2019-08-26 11:46
閱讀 2751·2019-08-23 17:10
閱讀 1415·2019-08-23 16:57