瞭解PHP7的革新與性能優化
PHP 7.0被號稱為新一代的PHP,官方直接跳過了php 6版本(為什麼跳過PHP6),將在2015年10月發佈。他的重要特性主要體現在性能方面,據稱性能實現跨越式的大幅提升。
官方開發組對Zend引擎底層做了大量優化來提升PHP的性能。開發者聲稱其性能兩倍於PHP 5。對PHP 7.0 RC2的測試顯示, 這一説法是精確的,其實還是保守估計。評測結果顯示:PHP 7.0的速度是PHP 5.3~5.6的2~2.5倍,同時佔用的內存更少。這次PHP7的革新一定會給Web服務帶來更深刻的變化,它已經接近Facebook開發的PHP執行引擎HHVM,後者通過將PHP代碼動態翻譯成原生機器碼而大幅提高速度。
除了性能的優化外,其中最值得一提的就是JIT了。
Just In Time(即時編譯)是一種軟件優化技術,指在運行時才會去編譯字節碼為機器碼。從直覺出發,我們都很容易認為,機器碼是計算機能夠直接識別和執行的,比起Zend讀取opcode逐條執行效率會更高。其中,HHVM(HipHop Virtual Machine,HHVM是一個Facebook開源的PHP虛擬機)就採用JIT,讓他們的PHP性能測試提升了一個數量級,放出一個令人震驚的測試結果,也讓我們直觀地認為JIT是一項點石成金的強大技術。
在PHP5.5的代碼裏,因為並沒有明顯類型定義,只能靠類型推斷。儘可能將可以推斷出來的變量類型,定義出來,然後,結合類型推斷,將非該類型的分支代碼去掉,生成直接可執行的機器碼。然而,類型推斷不能推斷出全部類型,在WordPress中,能夠推斷出來的類型信息只有不到30%,能夠減少的分支代碼有限。導致JIT以後,直接生成機器碼,生成的ByteCodes太大,最終引起CPU緩存命中大幅度下降(CPU Cache Miss)。通過JIT,可以降低VM的開銷,同時,通過指令優化,可以間接降低內存管理的開發,因為可以減少內存分配的次數。然而,對於真實的WordPress項目來説,CPU耗時只有25%在VM上,主要的問題和瓶頸實際上並不在VM上。
特別需要大家知道的是:做為業內知名的在線平台《慕課網》也已經發布了最新的PHP7.0新特性詳解課程( Rango主講)
PHP 7.0.0 RC 1 現已提供下載(),Windows 源代碼和二進制提供在( )。
新增特性和改變
1. 標量類型和返回類型聲明(Scalar Type Declarations & Scalar Type Declarations)
PHP語言一個非常重要的特點就是“弱類型”,它讓PHP的程序變得非常容易編寫,新手接觸PHP能夠快速上手,不過,它也伴隨着一些爭議。支持變量類型的定義,可以説是革新性質的變化,PHP開始以可選的'方式支持類型定義。除此之外,還引入了一個開關指令declare(strict_type=1);,當這個指令一旦開啟,將會強制當前文件下的程序遵循嚴格的函數傳參類型和返回類型。
2. 更多的Error變為可捕獲的Exception
PHP7實現了一個全局的throwable接口,原來的Exception和部分Error都實現了這個接口(interface), 以接口的方式定義了異常的繼承結構。於是,PHP7中更多的Error變為可捕獲的Exception返回給開發者,如果不進行捕獲則為Error,如果捕獲就變為一個可在程序內處理的Exception。這些可被捕獲的Error通常都是不會對程序造成致命傷害的Error,例如函數不存。PHP7進一步方便開發者處理,讓開發者對程序的掌控能力更強。因為在默認情況下,Error會直接導致程序中斷,而PHP7則提供捕獲並且處理的能力,讓程序繼續執行下去,為程序員提供更靈活的選擇。
3. AST(Abstract Syntax Tree,抽象語法樹)
AST在PHP編譯過程作為一箇中間件的角色,替換原來直接從解釋器吐出opcode的方式,讓解釋器(parser)和編譯器(compliler)解耦,可以減少一些Hack代碼,同時,讓實現更容易理解和可維護。
4. Native TLS(Native Thread local storage,原生線程本地存儲)
PHP在多線程模式下(例如,Web服務器Apache的woker和event模式,就是多線程),需要解決“線程安全”(TS,Thread Safe)的問題,因為線程是共享進程的內存空間的,所以每個線程本身需要通過某種方式,構建私有的空間來保存自己的私有數據,避免和其他線程相互污染。而PHP5採用的方式,就是維護一個全局大數組,為每一個線程分配一份獨立的存儲空間,線程通過各自擁有的key值來訪問這個全局數據組。
而這個獨有的key值在PHP5中需要傳遞給每一個需要用到全局變量的函數,PHP7認為這種傳遞的方式並不友好,並且存在一些問題。因而,嘗試採用一個全局的線程特定變量來保存這個key值。
-
php如何基於dom實現圖書xml格式數據
導語:php如何基於dom實現圖書xml格式數據呢?下面是小編給大家提供的代碼實現方法,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。<?php$doc=newDOMDocument();$doc->load('');$books=$doc->getElementsByTagName("book");foreach($booksas$book){$aut...
-
PHP的基本語法介紹
PHP的基本語法和C是很相似的,可以説大部分編程語言的基本語法都是如出一轍的:順序、選擇(if)、循環(while)。以下是本站小編搜索整理的關於PHP的基本語法介紹,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!打開記事本,編寫以下程序...
-
PHP常用函數總結
PHP的常用函數有哪些呢?下面是由本站小編為大家整理的PHP常用函數總結,喜歡的可以收藏一下!瞭解更多詳情資訊,請關注應屆畢業生考試網!數學函數():求絕對值$abs=abs(-4.2);//4.2數字絕對值數字():進一法取整echoceil(9.999);//10浮點數進一取整r():捨去法取整ech...
-
對PHP語言認識上要避免10大誤區
PHP是一種非常流行的開源服務器端腳本語言,你在萬維網看到的大多數網站都是使用php開發的。但是,你大概很奇怪的注意到有少部分的人發誓要離php遠遠的。但是令人更奇怪的是或者很震驚的説他們不用php並不是因為一些被證實的語言缺點。他們決定不用php,是因為誤解...