php性能比較
『壹』 php的性能要比node.js高很多嗎
有學習Swoole的疑惑、遇到瓶頸期的PHPer可在底部留言給我!!!
在本機windows環境下的測試:8G內存,4GCPU,win7系統,插入10000條記錄測試比較,php和nodejs的性能。
當改為10000條記錄插入,php耗時1.65 seconds,nodejs耗時318微秒,nodejs還是快得比較明顯。
『貳』 python與php哪個性能高
語法:PHP 的語法看起來就像沒有經過精心設計一樣,很隨意。有的語法看似很方便(用點來連接字元串), 但是卻為之後擴展造成了很多麻煩(點沒法用於訪問對象的成員), 再比如比較蛋疼的命名空間的語法。Python 相比之下要好一點,但是 Python2 和 Python3 直接存在著一些不兼容的語法變動。
編寫 HTML 模版:PHP 可以非常方便地直接用來編寫 HTML 模版,Python 需要藉助其他的語言或庫來實現。
包管理器:PHP 的包管理器(PEAR)和擴展管理器(PECL)恐怕根本沒人用,這導致引入一個新依賴的成本很高,於是很多人傾向於自己造輪子而不是引入現成的庫。Python 有統一的包管理器,雖然也有問題,但要比 PHP 好得多,引入庫之後的命名空間管理也要比 PHP 好。
擴展和庫:PHP 和 Python 都可以用 C 來編寫擴展。相比之下 Python 可用的庫要更多一點。
運行方式:PHP 運行方式比較單一(php-fpm, mod_php), Python 則可以以 fastCGI 運行,也可以自行監聽埠來處理請求。
性能:因為 PHP 運行方式單一,opcode 緩存方案也比較成熟(APC, opcache),緩存 opcode 之後運行速度很快。Python 則可能需要更多地自行優化性能。
類型系統:PHP 和 Python 都是動態類型。PHP 對類型判別比較模糊,有很多陷阱,Python 則嚴格一些。
學習成本:PHP 和學習成本都不是很高。PHP 優勢在於有比較完整的官方中文文檔,而且 PHP 應用領域只有 Web, 所以需要學習的內容較少。Python 因為學習路線較多,不太容易找到適合自己的教程和資料。
社區:PHP 的資料遍地,但是高質量的中文社區較少,普遍對官方的新功能不是很關注。Python 則要好一點。
應用領域:PHP 僅在 Web 後端方面被使用,Python 應用領域更廣泛一點,如果需要將邏輯移植到其他平台(如桌面), Python 要方便一點。
『叄』 國外主流PHP框架對比評測
最近簡單的使用了目前在國內用的比較多的幾個主流國外PHP框架(不包括國內框架) 大致對這些框架有個直觀上的感受 簡單分享一下 對於哪些做框架選型的時候 權當一個參考
主要參考的框架包括 CodeIgniter CakePHP ZendFramework Symfony 我對很多框架也沒有認真使用 只是簡單試用了一下 可能很多看法不成熟或者是錯誤的 請大家指正 一起成長
CodeIgniter
優點
配置簡單 全部的配置使用PHP腳本來配置 執行效率高 具有基本的路由功能 能夠進行一定程度的路由 具有初步的Layout功能 能夠製作一定程度的界面外觀 資料庫層封裝的不錯 具有基本的MVC功能
快速簡潔 代碼不多 執行性能高 框架簡單 容易上手 學習成本低 文檔詳細 自帶了很多簡單好用的library 框架適合小型應用
缺點
把Model層簡單的理解為資料庫操作
框架略顯簡單 只能夠滿足小型應用 略微不太能夠滿足中型應用需要
評價
總體來說 拿CodeIgniter來完成簡單快速的應用還是值得 同時能夠構造一定程度的layout 便於模板的復用 數據操作層來說封裝的不錯 並且CodeIgniter沒有使用很多太復雜的設計模式 執行性能和代碼可讀性上都不錯 至於附加的 library 也還不錯 簡潔高效
CakePHP
優點
CakePHP是最類似於RoR的框架 包括設計方式 資料庫操作的Active Record方式 設計層面很優雅 沒有自帶多餘的 library 所有的功能都是純粹的框架 執行效率還不錯 資料庫層的 hasOne hasMany 功能很強大 對於復雜業務處理比較合適 路由功能 配置功能還不錯 自動構建腳手架(scaffold)很強大 適合中型應用 基本實現過了MVC每一層 具有自動操作命令行腳本功能
文檔比較全 在國內推廣的比較成功 大部分都知道CakePHP 學習成本中等
缺點
CakePHP非常嚴重的問題是把Model理解為資料庫層操作 嚴重影響了除了資料庫之外的操作能力
CakePHP的cache功能略顯薄弱 配置功能稍嫌弱 CakePHP不適合大型應用 只適合中型應用 小型應用來說略微的學習成本高了點
評價
總體來說CakePHP框架代表了PHP框架很重要的一個時代和代表 並且目前發揮著很重要的作用 不少自己寫的框架都模仿了CakePHP的方式 是個里程碑式的產品 CakePHP透露著RoR的敏捷橘猜開發方式和把資料庫操作認為是唯一Model的設計思想 作為開發快速應用和原型是絕好的工具 同樣 用來做Web 網站的開發框架 也是值得選擇的
Zend Framework
優點
官方出品 自帶了非常多的 library 框架本身使用了很多設計模式來編寫 架構上很優雅 執行效率中等 MVC設計中 比較簡潔 具有路由功能 配置文件比較強大(能夠處理XML和php INI) 各種 library 很強大 是所有PHP框架中各種功能最全面的 包括它不僅是一個框架 更是一個大類庫(取代PEAR) 這是它的主要特色 能夠直觀的支持除資料庫操作之外的Model層(比 CodeIgniter 和 CakePHP 強) 並且能夠很輕易的使用Loader功能載入其他新增加的Class Cache功能很強大 從前端Cache到後端Cache都支持 後端Cache支持Memcache APC sqlite 文件等等方式 資料庫操作功能很強大 支持各種驅動(適配器)
文檔很全 在國內社區很成熟 並且目前不少Web 網站在使用 學習成本中等
缺點
MVC功能完成比較弱 View層簡單實現(跟沒實現一樣) 無法很強大的控制前端頁面
沒有自動化腳本 創建一個應用 包括入口文件 全部必須自己手工構建 入門成本圓仔型高
Zend Framework 作為一個中型應用框架問題不大 也能夠勉強作為大型應用的框架 但是作為一個很成熟的大型PHP框架來說 還需要一些努力
評價
戚如作為官方出品的框架 Zend Framework的野心是可以預見的 想把其他框架擠走 同時封裝很多強大的類庫 能夠提供一站式的框架服務 並且他們的開發團隊很強大 完全足夠有能力開發很強大的產品出來 所以基本可以確定的是Zend Framework前途無量 如果花費更多的時間去完善框架 同樣的 Zend Framework架構本身也是比較優雅的 說明Zend官方是有很多高手的 設計理念上比較先進 雖然有一些功能實現的不夠完善 比如View層 自動化腳本等等 這些都有賴於未來的升級 總體來說Zend Framework是最值得期待的框架 當然 你目前要投入你的項目中使用也是完全沒問題的
Symfony
優點
Symfony 是我了解的PHP框架中功能最強大的 而且我使用時間比較長 但是很多功能還是沒有挖掘出來 它完整實現了MVC三層 封裝了所有東西 包括 $_POST $_GET 數據 異常處理 調試功能 數據檢測 包含強大的緩存功能 自動載入Class(這個功能很爽) 強大的i n國家化支持 具有很強大的view層操作 能夠零碎的包含單個多個文件 非常強大的配置功能 使用yml配置能夠控制所有框架和程序運行行為 強大到讓人無語 能夠很隨意的定義各種自己的class 並且symfony能夠自動載入(auto load)這些class 能夠在程序中隨意調用 包含強大的多層級項目和應用管理 Project > Application > Mole > Action 能夠滿足一個項目下多個應用的需要 並且每層可以定義自己的類庫 配置文件 layout 非常強大的命令行操作功能 包括建立項目 建立應用 建立模塊 刷新緩存等等
Symfony絕對是開發大型復雜項目的首選 因為使用了Symfony 將大大節約開發成本 並且多人協作的時候 不會出現問題 在Project級別定義好基礎Class以後 任何模塊都能夠重用 大大復用代碼
缺點
資料庫操作model採用了重量級的propel和creole 不過在我測試的版本中已經把他們移到了addon里 可用可不用
緩存功能無法控制 每次開發調試總是緩存 需要執行 symfony cc symfony rc 來清除和重建緩存
效率不是很高 特別是解析模板和讀取配置文件的過程 花費時間不少
學習成本很高 並且國內沒有成熟的社區和文檔 連中文手冊都沒有 相應的要掌握所有功能 需要花費比較多的時間
評價
Symfony絕對是企業級的框架 唯一能夠貌似能夠跟java領域哪些強悍框架抗衡的東西 強悍的東西 自然學習復雜 但是相應的對項目開發也比較有幫助 自然是推薦復雜的項目使用Symfony來處理 覺得是值得 後期的維護成本比較低 復用性很強 相應的如果使用Symfony的應該都是比較復雜的互聯網項目 那麼相應的就要考慮關於資料庫分布的問題 那麼就需要拋棄Symfony自帶的資料庫操作層 需要自己定義 當然了 Symfony支持隨意的構造model層
總結
以上數款框架 各有特色 而且都是開源項目 不過框架針對的項目不一樣 一般來說 CodeIngiter 比較適合小型項目 CakePHP 和 Zend Framework 比較適合中型項目 Symfony 比較適合大型重量級項目 在項目選型的時候 要充分考慮框架的可以定製性 擴展性 因為每個項目都無法確定你是否會隨著需求的變化進行改變
相對來說 Zend Framework 和 Symfony 應對變化的能力比較強 特別是能夠隨意定製 model 層的Class 能夠非常方便增加自己業務或者數據處理類 我是個人比較推薦在中大型項目中使用的框架
CodeIngiter 和 CakePHP 在中小型項目中同樣能夠發揮重大作用 快速開發和原型構建 非常適合目標不清晰的原型項目的開發
當然了 也許 自己寫一個框架更適合
lishixin/Article/program/PHP/201311/21441
『肆』 PHP7開啟OPcache和Swoole哪個提升更大性能的提升對比
測試所用的主機為虛擬機,虛擬機配置在雙核4GB的個人電腦中。虛擬機系統為linux,http伺服器採用nginx,用lnmp腳本安裝nginx、mysql、php。Laravel框架為7.X版本。
在app/Http/Kernel文件中租肢寬,關掉頻率限制中間件throttle。
修改php-fpm.conf文件,修改pm和pm.max_children 配置,pm設置飢雀為static,pm.max_children設置為50,以獲得較好的並發性能。
此時的並發大約為為 7 qps
在配置文件php.ini文件中開啟opcache
此時的達到了 90qps,性能是未開啟時的 10 倍以上!。
開源的laravel-swoole加速包
在項目目錄下運行composer命令安裝;在nginx的配置文件中配置,將請求轉發到swoole監聽的埠。
用 ab 壓測 : ab -n 1000 -c 100 http://test.laravel.com/api/test
速度起飛!達到了800qps!
也就是一百多倍?
當然這只是一個比較簡單的測試,但是總的來說opcache擴展和swoole擴展對php腳本性能的提升還是很明顯的。
八重櫻:PHP 互聯網架構師成長之路*「設計模式」終極指南
PHP 互聯網架構師 50K 成長指南+行業問題解決總綱(持續更新)
面試10家公司,收獲9個offer,2020年PHP 面試問題
★如果喜歡我的文章,想與更多資深開發者一起交流學習的話,獲取更多大廠面試相關技術咨詢和指弊亮導,歡迎加入我們的群啊,暗號:phpzh
2020年最新PHP進階教程,全系列!
『伍』 php7與php5的區別
php5與php7之間的區別:
1、性能提升:PHP7比PHP5.0性能提升了兩倍。
2、以前的許多致命錯誤,現在改成拋出異常。
3、PHP 7.0比PHP5.0移除了一些老的不在支持的SAPI(伺服器端應用編程埠)和擴展。
4、PHP 7.0比PHP5.0新增了空接合操作符。
5、PHP 7.0比PHP5.0新增加了結合比較運算符。
6、PHP 7.0比PHP5.0新增加了函數的返回類型聲明。
7、PHP 7.0比PHP5.0新增加了標量類型聲明。
8、PHP 7.0比PHP5.0新增加匿名類。
9、錯誤處理和64位支持
『陸』 學java好還是php
php和Java哪個好?這個問題應該會有很多人問,但是每種編程語言都有各自的優缺點,所謂的哪個好,不過就是看你習慣於使用哪種或者說你更擅長於哪種,所以今天我們就來說一說php和Java之間的對比。
1、php與Java的語法比較
php是解釋執行的伺服器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象,所以學過c語言的程序員可以很快的熟悉php的開發。
java的學習需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。
推薦課程:01:PHP在線視頻教程;02:JAVA在線視頻教程
2、php與Java系統架構設計的對比
PHP採用面向過程的開發方法,專注互聯網領域。WEB領域php擁有得天獨厚的優勢,使用php來開發web是最好的選擇。
Java的Web開發技術,需要使用的是面向對象的系統設計方法,總而言之,Java功能強大,分支眾多,沒有java不能做的軟體。
3、php與Java訪問資料庫速度的比較
php對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。例如:用Java開發的Web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改。而php則需要做大量的修改工作。
Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。
4、php與Java源代碼安全的對比
PHP開發的程序的源代碼都是公開的。
Java開發的程序,最後用戶拿到的是只是一些編譯好的class類,安全性高。
5、php與Java開發成本的對比
PHP最經典的組合就是:PHP + MySQL + Apache。非常適合開發中小型的Web應用,開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。
Java的Web應用伺服器有免費Tomcat、JBoss等,如果需要更好的商業化的服務有:Web Sphere和 Web logic。
6、php與Java的性能比較
有人做過試驗,對這兩種種語言分別做迴圈性能測試及存取Oracle資料庫測試。
在循環性能測試中,JSP只用了令人吃驚的四秒鍾就結束了20000*20000的迴圈。而PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒。
資料庫測試中,二者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 需要 13秒,PHP 需要 69 秒。
總結:
php和Java到底哪個好?
從上面的對比來看,php和Java可以說是各有千秋,php更加適合於快速開發,中小型應用系統,開發成本低、易學。Java更適合於開發大型的應用系統,應用的前景比較廣闊,系統易維護、可復用性較好。你想要學習哪個,完全看你以後更傾向於做哪一方面的開發。
『柒』 PHP的性能探討和測試
緣起
關於PHP 很多人的直觀感覺是PHP是一種靈活的腳本語言 庫類豐富 使用簡單 安全 非常適合WEB開發 但性能低下 PHP的性能是否真 的就如同大家的感覺一樣的差呢?本文就是圍繞這么一個話題來進行探討的 從源碼 應用場景 基準性能 對比分析等幾個方面深入分析PHP之性能問題 並通 過真實的數據來說話
從原理分析PHP性能
從原理分析PHP的性能 主要從以下幾個方面 內存管理 變數 函數 運行機制來進行分析
內存管理
類似Nginx的內存管理方式 PHP在內部也是基於內存池 並且引入內存池的生命周期概念 在內存池方面 PHP對PHP腳本和擴展的所有內 存相關操作都進行了託管 對大內存和小內存的管理採用了不同的實現方式和優化 具體可以參考以下文檔 在內存分配和回收的生命周期內 PHP採用一次初始化申請+動態擴容+內存標識回收機制 並且在每次請求結束後直 接對內存池進行重新mask
變數
總所周知 PHP是一種弱變數類型的語言 所以在PHP內部 所有的PHP變數都對應成一種類型Zval 其中具體定義如下
圖一PHP變數
在變數方面 PHP做了大量的優化工作 比如說Reference counting和 on writer機制 這樣能夠保證內存使用上的優化 並且亮簡逗減少內存拷貝次數(請參考) 在數組方面 PHP內部採用高效的hashtable來實現
函數
在PHP內部 所有的PHP函數都回轉化成內部的一個函數指針 比如說擴展中函數
ZEND_FUNCTION(my_function);//類似functionmy_function(){}
在內部展開後就會是一個函數
voidzif_my_function(INTERNAL_FUNCTION_PARAMETERS);
voidzif_my_function(
intht
zval*return_value
zval*this_ptr
intreturn_value_used
zend_executor_globals*executor_globals
);
從這個角度來看 PHP函數在內部也是對應一個函數指針
運行機制
敬賣在話說PHP性能的時候 很多人都會說「C/C++是編譯型咐李 JAVA是半編譯型 PHP是解釋型」 也就是說PHP是先動態解析再代碼運行的 所以從這個角度來看 PHP性能必然很差
的確 從PHP腳本運行來輸出 的確是一個動態解析再代碼運行的過程 具體來說 PHP腳本的運行機制如下圖所示
圖二 PHP運行機制
PHP的運行階段也分成三個階段
Parse 語法分析階段
Compile 編譯產出opcode中間碼
Execute 運行 動態運行進行輸出
所以說 在PHP內部 本身也是存在編譯的過程 並且據此產生了大量的opcode cache工具 比如說apc eacc xcache等等 這些opcode cache在生產環境基本上在標配 基於opcode cache 能到做到「PHP腳本編譯一次 多次運行」的效果 從這點上 PHP就和JAVA的半編譯機制非常類似
所以 從運行機制上來看 PHP的運行模式和JAVA是非常類似的 都是先產生中間碼 然後運行在不同虛擬機上
動態運行
從上面的幾個分析來看 PHP在內存管理 變數 函數 運行機制等幾個方面都做了大量的工作 所以從原理來看 PHP 不應該存在性能問題 性能至少也應該和Java 比較接近
這個時候就不得不談PHP動態語言的特性所帶來的性能問題了 由於PHP是動態運行時 所以所有的變數 函數 對象調用 作用域實現等等都是在 執行階段中才確定的 這個從根本上決定了PHP性能中很難改變的一些東西 在C/C++等能夠在靜態編譯階段確定的變數 函數 在PHP中需要在動態運行 中確定 也就決定了PHP中間碼不能直接運行而需要運行在Zend Engine上
說到PHP變數的具體實現 又不得不說一個東西了 Hashtable Hashtable可以說在PHP靈魂之一 在PHP內部廣泛用到 包含變數符號棧 函數符號棧等等都是基於hashtable的
以PHP變數為例來說明下PHP的動態運行特點 比如說代碼
<?php
$var=「hello blog xiuwz 」;
?>
該代碼的執行結果就是在變數符號棧(是一個hashtable)中新增一個項
當要使用到該變數時候 就去變數符合棧中去查找(也就是變數調用對出了一個hash查找的過程)
同樣對於函數調用也基本上類似有一個函數符號棧(hashtable)
其實關於動態運行的變數查找特點 在PHP的運行機制中也能看出一些 PHP代碼通過解釋 編譯後的流程下圖
圖 PHP運行實例
從上圖可以看出 PHP代碼在pile之後 產出的了類符號表 函數符號表 和OPCODE 在真正執行的時候 zend Engine會根據op code去對應的符號表中進行查找 處理
從某種程度上 在這種問題的上 很難找到解決方案 因為這是由於PHP語言的動態特性所決定的 但是在國內外也有不少的人在尋找解決方案 因為 通過這樣 能夠從根本上完全的優化PHP 典型的列子有facebook的hiphop
結論
從上面分析來看 在基礎的內存管理 變數 函數 運行機制方面 PHP本身並不會存在明顯的性能差異 但由於PHP的動態運行特性 決定了 PHP和其他的編譯型語言相比 所有的變數查找 函數運行等等都會多一些hash查找的CPU開銷和額外的內存開銷 至於這種開銷具體有多大 可以通過後 續的基準性能和對比分析得出
因此 也可以大體看出PHP不太適合的一些場景 大量計算性任務 大數據量的運算 內存要求很嚴格的應用場景 如果要實現這些功能 也建議通過擴展的方式實現 然後再提供鉤子函數給PHP調用 這樣可以減低內部計算的變數 函數等系列開銷
基準性能
對於PHP基準性能 目前缺少標準的數據 大多數同學都存在感性的認識 有人認為 QPS就是PHP的極限了 此外 對於框架的性能和框架對性能的影響很沒有響應的權威數字
本章節的目的是給出一個基準的參考性能指標 通過數據給大家一個直觀的了解
具體的基準性能有以下幾個方面
裸PHP性能 完成基本的功能
裸框架的性能 只做最簡單的路由分發 只走通核心功能
標准模塊的基準性能 所謂標准模塊的基準性能 是指一個具有完整服務模塊功能的基準性能
環境說明
測試環境
Uname aPnux db forum test db _ # SMP Wed Aug : : CST x _ x _ x _ GNU/PnuxRed Hat Enterprise Pnux AS release (Nahant Update )
Intel(R) Xeon(R) CPU E @ GHz
軟體相關
Nginx nginx version: nginx/ built by gcc (Red Hat )Php (採用php fpm)
PHP (cP) (built: Mar : : )
Copyright (c) The PHP Group
Zend Engine v Copyright (c) Zend Technologies
with eAccelerator v Copyright (c) eAccelerator by eAccelerator
bingo
PHP框架
其他說明
目標機器的部署方式 nginx >php fpm >php腳本
測試壓力機器和目標機器獨立部署
裸PHP性能
最簡單的PHP腳本
<?php
require_once『 /actions/indexAction php』;
$objAction=newindexAction();
$objAction >init();
$objAction >execute();
?>
Acitons/indexAction php裡面的代碼如下
<?php
classindexAction
{
pubPcfunctionexecute()
{
echo『hello world!』;
}
}
?>
通過壓力工具測試結果如下
裸PHP框架性能
為了和 的對比 基於bingo 框架實現了類似的功能 代碼如下
<?php
require_once『Bingo/Controller/Front php』;
$objFrontController=Bingo_Controller_Front::getInstance(array(
『actionDir』=>『 /actions』
));
$objFrontController >dispatch();
壓力測試結果如下
從該測試結果可以看出 框架雖然有一定的消耗 但對整體的性能來說影響是非常小的
標准PHP模塊的基準性能
所謂標准PHP模塊 是指一個PHP模塊所必須要具體的基本功能
路由分發
自動載入
LOG初始化&Notice日誌列印 所以的UI請求都一條標準的日誌
錯誤處理
時間校正
自動計算每個階段耗時開銷
編碼識別&編碼轉化
標准配置文件的解析和調用
採用bingo 的代碼自動生成工具產生標準的測試PHP模塊 test
測試結果如下
結論
從測試數據的結論來看 PHP本身的性能還是可以的 基準性能完全能夠達到幾千甚至上W的QPS 至於為什麼在大多數的PHP模塊中表現不佳 其實這個時候更應該去找出系統的瓶頸點 而是簡單的說OK PHP不行 那我們換C來搞吧 (下一個章節 會通過一些例子來對比 採用C來處理不見得有特 別的優勢)
通過基準數據 可以得出以下幾個具體的結論
PHP本身性能也很不錯 簡單功能下能夠達到 QPS 極限也能過W
PHP框架本身對性能影響非常有限 尤其是在有一定業務邏輯和數據交互的情況下 幾乎可以忽略
一個標準的PHP模塊 基準性能能夠達到 QPS( cpu idle)
對比分析
lishixin/Article/program/PHP/201311/21287
『捌』 php foreach、while性能比較
foreach是對數組副本進行操作(通過拷貝數組),而while則通過移動數組內部指標進行操作,一般邏輯下認為,while應該比foreach快(因為foreach在開始執行的時候首先把數組復制進去,而while直接移動內部指標。),但結果剛剛相反。
在循環里進行的是數組「讀」操作,則foreach比while快:
復制代碼
代碼如下:
foreach
($array
as
$value)
{
echo
$value;
}
while
(list($key)
=
each($array))
{
echo
$array[$key];
}
在循環里進行的是數組「寫」操作,則while比foreach快:
復制代碼
代碼如下:
foreach
($array
as
$key
=>
$value)
{
echo
$array[$key]
=
$value
.
'...';
}
while
(list($key)
=
each($array))
{
$array[$key]
=
$array[$key]
.
'...';
}
總結:通常認為,foreach涉及到值復制,一定會比while慢,但實際上,如果僅僅是在循環里進行數組的讀操作,那麼foreach是很
快的,這是因為PHP採用的復制機制是「引用計數,寫時復制」,也就是說,即便在PHP里復制一個變數,最初的形式從根本上說其實
仍然是引用的形式,只有當變數的內容發生變化時,才會出現真正的復制,之所以這么做是出於節省內存消耗得目的,同時也提升了
復制的效率。這樣看來,foreach的高效讀操作就不難理解了。另外,既然foreach不適合處理數組寫操作,那麼我們可以得出一個結
論,多數情況下,類似foreach
($array
as
$key
=>
$value)形式的做數組寫操作得代碼都應該被替換成while
(list($key)
=
each($array))。這些技巧產生的速度差異在小項目里可能並不明顯,但是在類似框架這樣的大項目中,一次請求動輒便會涉及到幾
百幾千幾萬次數組循環操作,差異就會明顯放大。
『玖』 Java和PHP在Web開發方面的比較
比較PHP和JSP這兩個Web開發技術 在目前的情況是其實是比較PHP和Java的Web開發 以下是我就幾個主要方面進行的比較
一 語言比較
PHP是解釋執行的伺服器腳本語言 首先php有簡單容易上手的特點 語法和c語言比較象 所以學過c語言的程序員可以很快的熟悉php的開發 而java需要先學好java的語法和熟悉一些核心的類庫 懂得面向對象的程序設計方法 所以java不如php好學
Java首先要編譯成位元組碼 class文件 然後在java虛擬機上解釋執行 Java的Web開發首先最容易想到的就是JSP(現在已經到JSP ) 原來的java的Web開發都是用servlet來實現的 用servlet來開發需要程序員在java的源文件中嵌入大量的代碼 所以後來就出現了JSP JSP可以方便的嵌入到文件當中 其實jsp文件在伺服器上執行的時候首先會被應用伺服器轉換成servlet 然後再編譯執行 Jsp可以通過servlet和JavaBean的支持產生強大的功能 JavaBean 是一種可復用的 跨平台的軟體組件 使用javabean可以方便的實現java代碼和的分離 能夠增強系統的功能和軟體的復用性
Java的Web開發屬於SUN公司定義的J EE其中的規范 而且在J EE中包括了java的Web開發的所有方面 如 JSP Servlet JDBC JNDI JAVABEAN EJB等等 J EE就特別適合於做大型的企業級的應用
二 資料庫訪問比較
Java通過JDBC來訪問資料庫 通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫 訪問資料庫的介面比較統一
PHP對於不同的資料庫採用不同的資料庫訪問介面 所以資料庫訪問代碼的通用性不強 例如 用Java開發的Web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改 而PHP則需要做大量的修改工作
三 系統設計架構比較
採用Java的Web開發技術 需要使用的是面向對象的系統設計方法 而PHP還是採用面向過程的開發方法 所以用Java進行開發前期需要做大量的系統分析和設計的工作
四 跨平台性
Java和PHP都有很好的跨平台的特性 幾乎都可以在不作任何修改的情況下運行在Linux或者Windows等不同的操作系統上
五 開發成本比較
PHP最經典的組合就是 PHP + MySQL + Apache 非常適合開發中小型的Web應用 開發的速度比較快 而且所有的軟體都是開源免費的 可以減少投入
Java的Web應用伺服器有免費Tomcat JBoss等 如果需要更好的商業化的服務有 Web Sphere和 Web logic
六 分布式多層架構比較
PHP只能實現簡單的分布式兩層或三層的架構 而JAVA在這方面就比較強大 可以實現多層的網路架構 資料庫層(持久化層) 應用(業務)邏輯層 表示邏輯層彼此分開 而且現在不同的層都已經有一些成熟的開發框架的支持 例如Struts就是利用java的Web開發技術實現了MVC的設計模式 而在業務邏輯層也有Spring框架 資料庫持久化層有Hibernate等框架 這些框架可以方便開發者高效 合理 科學得架構多層的商業應用
下面簡要的說一下Struts 它實質上是在JSP Model 的基礎上實現的一個MVC(Model View Controler)框架 JSP Model 體系結構是一種聯合使用JSP 與Servlet 來提供動態內容的方法 在Struts框架中 模型由實現業務邏輯的JavaBean或EJB組件構成 控制器由Servlet實現的 視圖由一組JSP文件組成 採用Struts可以明確角色的定義和開發者與網頁設計者的分工 而且項目越復雜 其優勢越明顯
七 源代碼安全
PHP開發的程序的源代碼都是公開的 他人拿到php開發的程序後都可以進行修改
Java開發的程序 最後用戶拿到的是只是一些編譯好的class類 無法看到完整的源代碼 安全性高
八 性能比較
有人做過試驗 對這兩種種語言分別做迴圈性能測試及存取Oracle資料庫測試
在循環性能測試中 JSP只用了令人吃驚的四秒鍾就結束了 * 的迴圈 而PHP測試的是 * 循環(少一個數量級) 卻分別用了 秒
資料庫測試中 二者分別對 Oracle 進行 次 Insert Update Select和Delete JSP 需要 秒 PHP 需要 秒
項目
PHP
JAVA
可復用性
低
高
開發速度
快
慢
易維護性
差
優
可移植性
優- Linux
Windows Unix
安全性
低
高
開發費用
低
高
多層架構
差
優
資料庫訪問
介面不統一
介面統一
可擴展性
差
優
面向對象
差
優
lishixin/Article/program/PHP/201311/21447
『拾』 PHP中數組和變數的性能對比
我們知道,數組本身也是一種變數,訪問數組其實也是訪或好碰問變數的一種,這里我們主要比較的是普通的int , string ,bool的簡單類型的變數 和包含了這些簡單類型變數的數組之間的對比。
ps : 這里我們只對比 一維索引 數組 和 簡單數據變數類型
結果: 變數 < 數組 , 小了896個byte
結論: 數組 < 變數 , 少了一倍【931240 】
當我們訪問次數為 1千萬次 的對比情況
結論: 數組 < 襪敬 變數 , 少了0.04s
總結論: 數組在訪問次數比較大衫談的情況和變數很多的情況下,比單純使用變數的性能更好