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