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