為什么php不適合做計算密集型業(yè)務?
PHP,即"超文本預處理器"是一種通用的開源腳本語言。PHP是一種在服務器端執(zhí)行的腳本語言,類似于C語言,是一種常用的網(wǎng)站編程語言。PHP的獨特語法是C、Java、Perl和PHP自己的語法。有利于學習,應用廣泛,主要適用于Web開發(fā)領域。
1.優(yōu)點:開源,免費,快速【程序開發(fā)快,運行快,技術本身學習快】
1)跨平臺,性能優(yōu)越,與Linux/Unix結合時比與Windows結合時強45%,與許多免費平臺結合時非常經(jīng)濟,如LAMP(Linux/Apache/Mysql/PHP)或FAMP(FreeBSD/Apache/Mysql/PHP),或者如果數(shù)據(jù)應用足夠大,可以考慮換成PostgreSQL或Oracle,支持N種數(shù)據(jù)庫。(編號10)
2)語法簡單,學C和Perl很容易,部分和ASP差不多。有成熟的開發(fā)工具,如NuPHPed、ZendStudio等。,而Eclipse可以在Linu臺下使用。
3)目前支持主流技術,如WebServic::DB作為數(shù)據(jù)庫抽象層,用Smarty或者smarttemplate作為模板層,如果是PHP5.1就用PDO(PHP數(shù)據(jù)對象)訪問數(shù)據(jù)庫。
5)有很多成熟的框架,比如phpMVC,Prado,Cake等等,支持MVC,類似事件驅動的框架,像RubyOnRails這樣的快速開發(fā)框架,足以滿足你的應用需求。
6)PHP5有成熟的面向對象體系,可以適應基本的面向對象要求。適合開發(fā)大型項目。
7)有成熟的社區(qū)支持PHP的開發(fā)。
8)目前很多大型應用都使用PHP,比如淘寶、雅虎、163、新浪等大型門戶,很多都選擇PHP作為自己的開發(fā)語言,所以大型門戶都可以選擇,我覺得夠你用了。
9)有很多開源框架或者開源系統(tǒng)可以使用。比如大家熟知的開源框架有Zendframework、CakePHP、CodeIgniter、symfony等。,開源論壇包括Discuz!、Phpwind等。、開源博客WordPress、開源網(wǎng)店系統(tǒng)如Ecshop、ShopEx等。開源SNS系統(tǒng)如UCHome、ThinkSNS等。
10)低成本(linuxapachemysqlphp內核)
2.不足之處
1)函數(shù)命名不規(guī)范駝峰法和滑移線,傳遞參數(shù)的位置不一樣,大家都知道。
2)單線程;PHP本身一直是單進程程序;雖然phpspthreads擴展早已存在。但是不夠穩(wěn)定,運行起來會莫名其妙的掛掉;Php擴展都是用c寫的,也就是說任何一個有線程競爭資源控制問題的擴展都能讓整個一個死掉。
3)核心異步網(wǎng)絡不支持(當然linux中只有同步無阻塞網(wǎng)絡模型)。然而,缺乏這一點使得開發(fā)能夠承受大并發(fā)的網(wǎng)絡應用程序變得困難。傳統(tǒng)網(wǎng)絡模型和io都被阻塞。這個基本的編程實踐是一個進程(或線程)響應一個用戶鏈接請求。所以不可能像實時網(wǎng)游那樣完成需要上千個網(wǎng)絡連接的任務。雖然php也有Libevent和eio擴展在一定程度上彌補了這一點,但感覺不是那么完美。
4)只支持web開發(fā),制作不方便。exe文件、桌面應用程序和手機程序。
5)不適合做爬蟲,自動運行腳本和科學計算項目,這種語言的基本框架也不適合,雖然有很多實現(xiàn)。
6)后期維護困難。后期提速的空間有限。
在對PHP有了大致的了解之后,讓讓我們理解為什么PHP很慢。
PHP的慢是相對于C/C級別語言而言的。事實上,PHP語言最初的設計并不是用來解決計算密集型的應用場景。我們大致可以理解為PHP為了提高開發(fā)效率而犧牲執(zhí)行效率。
我們知道PHP的一個很大的特點就是弱類型化,也就是我可以隨意定義一個變量,隨意賦給各種類型的數(shù)據(jù)。以int整數(shù)為例,在C語言中:
intnum200//通常是4個字節(jié)。
但是,如果PHP定義了相同的變量,實際對應的存儲結構是:
這個結構將比C變量占用更多的內存,C變量在PHP中定義如下:
200澳元;//這個變量實際上會比C變量多占用很多倍的存儲空間。
事實上,對于PHP來說,無論存儲什么類型的數(shù)據(jù),都是通過上面提到的"滅口"結構。為了兼容PHP程序員變量類型,PHP對開發(fā)者友好,但對執(zhí)行引擎殘酷。單個變量的內存消耗可能不明顯。一旦使用PHP數(shù)組,復雜度指數(shù)就會上升(數(shù)組的實現(xiàn)是HashTable)。然后,當Zendengine執(zhí)行時,它將這些PHP代碼編譯成操作碼(PHP中間字節(jié)碼,格式有點類似于匯編),由Zend引擎逐行解釋執(zhí)行。
無論是字符串連接操作或數(shù)組的簡單修改。;幾乎是amp的節(jié)奏PHP程序員的一句話和Zendengine"。所以PHP相對于C來說,同樣的操作消耗更多的CPU、內存等系統(tǒng)資源。另外還有內存自動回收,變量類型判斷等等,都會增加系統(tǒng)資源的消耗。
比如我用純PHP實現(xiàn)的快速排序函數(shù)和原生排序函數(shù),對一萬個整數(shù)進行排序,進行耗時的比較。結果如下:
原生sort需要3.44ms,而我們自己的PHP函數(shù)sort需要68.79ms我們發(fā)現(xiàn)兩者的實現(xiàn)效率差距巨大。我的測試方法是計算函數(shù)執(zhí)行前后的時間間隔,而不是整個PHP腳本從開始到結束的時間。PHP腳本的啟動和關閉過程本身就有一系列的初始化和清理工作,也會占用大量的時間。
一般來說,PHP執(zhí)行效率的排名是:
最快的是PHP語言結構(isset,echo等。),PHP語言的一部分(它們根本不是函數(shù))。
那么越快就是PHP的原生和擴展功能。PHP擴展,基于ZendAPI,用C實現(xiàn)的功能,執(zhí)行效率和C/Java屬于同一數(shù)量級。
什么?;真正慢的是我們通過PHP編寫自己的代碼和函數(shù)。比如我們用純PHP實現(xiàn)的比較重的框架,因為框架本身的模塊比較多,明顯會拖累語言層面的執(zhí)行效率,占用內存比較多。(國內的Yaf框架是用擴展的實現(xiàn)的,所以執(zhí)行效率比純PHP編寫的框架快很多。
一般來說,我們不。;不推薦用PHP實現(xiàn)邏輯復雜的計算類型的功能,尤其是在Web系統(tǒng)流量比較大的場景下。所以PHP程序員應該對PHP的各種原生函數(shù)和擴展有廣泛的了解,在具體的功能實現(xiàn)場景中尋求更多的原生解決方案(原生接口或擴展),而不是寫一堆復雜的PHP代碼來實現(xiàn)這類功能。
如果有足夠的PHP擴展開發(fā)實力,將這類業(yè)務功能改寫成PHP擴展也會大大提高代碼的執(zhí)行效率。這是一個非常好的方法,廣泛應用于PHP優(yōu)化。但是自己寫的PHP業(yè)務開發(fā)的缺點也很明顯:
擴展開發(fā)時間長,需求變化時修改復雜。寫的不好可能會影響Web服務的穩(wěn)定性。(比如Apache的worker模式,在多線程場景中掛起會影響到同一個進程中的其他正常子線程。如果是多線程Web模式,寫擴展也需要支持線程安全)
當擴展PHP版本升級時,您可以可能需要做額外的兼容工作。
后的維護和接管成本也比較高。
其實在互聯(lián)網(wǎng)一線企業(yè)中,比較常見的解決方案不是增加PHP的擴展,而是用C/C獨立編寫一個服務服務器,然后PHP通過sock
網(wǎng)站建設需要多少錢?都有哪些成本?
邊肖干脆給樓主做個預算!
首先,必要條件是60元左右的域名。其次,需要網(wǎng)站空間。虛擬空間:1克空間25元左右一個月,國內相對便宜,但是需要備案。VPS:如果后面需要這個,價格不為!
其次,要有一套網(wǎng)站流程,這要看樓主是否懂網(wǎng)站建設。如果是大型網(wǎng)站,肯定要找人設計一套專屬的網(wǎng)站模板。如果只是個人站長,樓主可以直接在網(wǎng)上搜索網(wǎng)站源代碼,基本是免費的。我們拿回來之后,只需要做適當?shù)男薷摹?/p>
其實制作一個網(wǎng)站的成本不到100元。當然,邊肖說的只是簡單的個人網(wǎng)站建設。后期要做的就是seo。一般個人網(wǎng)站都是SEO。如果是公司或企業(yè)的大型網(wǎng)站,沒有信譽的話需要競價排名,所以價格會更多!