欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

php7和PHP5對比新特性和性能優(yōu)化有哪些區(qū)別-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)php7和PHP5對比新特性和性能優(yōu)化有哪些區(qū)別,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及會所設(shè)計(jì)等,在成都網(wǎng)站建設(shè)公司營銷型網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

1、抽象語法樹( AST)

  1)在 PHP5中,從 php 腳本到 opcodes 的執(zhí)行的過程是:

  1. Lexing:詞法掃描分析,將源文件轉(zhuǎn)換成 token 流;

  2. Parsing:語法分析,在此階段生成 op arrays。

php7和PHP5對比新特性和性能優(yōu)化有哪些區(qū)別

2)PHP7 中在語法分析階段不再直接生成 op arrays,而是先生成 AST,所以過程多了一步:

  1. Lexing:詞法掃描分析,將源文件轉(zhuǎn)換成 token 流;

  2. Parsing:語法分析,從 token 流生成抽象語法樹;

  3. Compilation:從抽象語法樹生成 op arrays。

php7和PHP5對比新特性和性能優(yōu)化有哪些區(qū)別

添加了抽象語法樹:內(nèi)存的使用增加了,但是執(zhí)行時間上卻有所降低

AST在PHP編譯過程作為一個中間件的角色,替換原來直接從解釋器吐出opcode的方式,讓解釋器(parser)和編譯器(compliler)解耦,可以減少一些Hack代碼,同時,讓實(shí)現(xiàn)更容易理解和可維護(hù)

2、Natice TLS

PHP在多線程模式下,需要解決“線程安全”(TS,Thread Safe)的問題,因?yàn)榫€程是共享進(jìn)程的內(nèi)存空間的,所以每個線程本身需要通過某種方式,構(gòu)建私有的空間來保存自己的私有數(shù)據(jù),避免和其他線程相互污染。

而PHP5采用的方式,就是維護(hù)一個全局大數(shù)組,為每一個線程分配一份獨(dú)立的存儲空間,線程通過各自擁有的key值來訪問這個全局?jǐn)?shù)據(jù)組。而這個獨(dú)有的key值在PHP5中需要傳遞給每一個需要用到全局變量的函數(shù),PHP7認(rèn)為這種傳遞的方式并不友好,并且存在一些問題。因而,嘗試采用一個全局的線程特定變量來保存這個key值。

3、指定參數(shù) 返回值類型

PHP語言一個非常重要的特點(diǎn)就是“弱類型”,它讓PHP的程序變得非常容易編寫.

PHP7可選的方式支持類型定義,除此之外,還引入了一個開關(guān)指令declare(strict_type=1);,當(dāng)這個指令一旦開啟,將會強(qiáng)制當(dāng)前文件下的程序遵循嚴(yán)格的函數(shù)傳參類型和返回類型。

4、zval 結(jié)構(gòu)的變化

在PHP5的時候, zval的定義如下:

struct _zval_struct {
union {
long lval;
double dval;
struct {
char *val;
int len;
} str;
HashTable *ht;
zend_object_value obj;
  zend_ast *ast;
  } value;
zend_uint refcount__gc;
zend_uchar type;
  zend_uchar is_ref__gc;
};

首先這個結(jié)構(gòu)體的大小是(在64位系統(tǒng))24個字節(jié), 我們仔細(xì)看這個zval.value聯(lián)合體, 其中zend_object_value是較大的長板, 它導(dǎo)致整個value需要16個字節(jié), 這個應(yīng)該是很容易可以優(yōu)化掉的, 比如把它挪出來, 用個指針代替,因?yàn)楫吘笽S_OBJECT也不是最最常用的類型.

第二, 這個結(jié)構(gòu)體的每一個字段都有明確的含義定義, 沒有預(yù)留任何的自定義字段, 導(dǎo)致在PHP5時代做很多的優(yōu)化的時候, 需要存儲一些和zval相關(guān)的信息的時候, 不得不采用其他結(jié)構(gòu)體映射, 或者外部包裝后打補(bǔ)丁的方式來擴(kuò)充zval, 比如5.3的時候新引入專門解決循環(huán)引用的GC, 它不得采用如下的比較hack的做法

第三, PHP的zval大部分都是按值傳遞, 寫時拷貝的值, 但是有倆個例外, 就是對象和資源, 他們永遠(yuǎn)都是按引用傳遞, 這樣就造成一個問題, 對象和資源在除了zval中的引用計(jì)數(shù)以外, 還需要一個全局的引用計(jì)數(shù), 這樣才能保證內(nèi)存可以回收. 所以在PHP5的時代, 以對象為例, 它有倆套引用計(jì)數(shù), 一個是zval中的, 另外一個是obj自身的計(jì)數(shù):

第四, 我們知道PHP中, 大量的計(jì)算都是面向字符串的, 然而因?yàn)橐糜?jì)數(shù)是作用在zval的, 那么就會導(dǎo)致如果要拷貝一個字符串類型的zval, 我們別無他法只能復(fù)制這個字符串. 當(dāng)我們把一個zval的字符串作為key添加到一個數(shù)組里的時候, 我們別無他法只能復(fù)制這個字符串. 雖然在PHP5.4的時候, 我們引入了INTERNED STRING, 但是還是不能根本解決這個問題.

還比如, PHP中大量的結(jié)構(gòu)體都是基于Hashtable實(shí)現(xiàn)的, 增刪改查Hashtable的操作占據(jù)了大量的CPU時間, 而字符串要查找首先要求它的Hash值, 理論上我們完全可以把一個字符串的Hash值計(jì)算好以后, 就存下來, 避免再次計(jì)算等等

第五, 這個是關(guān)于引用的, PHP5的時代, 我們采用寫時分離, 但是結(jié)合到引用這里就有了一個經(jīng)典的性能問題:

第六, 也是最重要的一個, 為什么說它重要呢? 因?yàn)檫@點(diǎn)促成了很大的性能提升, 我們習(xí)慣了在PHP5的時代調(diào)用MAKE_STD_ZVAL在堆內(nèi)存上分配一個zval, 然后對他進(jìn)行操作, 最后呢通過RETURN_ZVAL把這個zval的值”copy”給return_value, 然后又銷毀了這個zval, 比如pathinfo這個函數(shù):

5、異常處理

PHP 5 的 try ... catch ... finally 無法處理傳統(tǒng)錯誤,如果需要,你通常會考慮用 set_error_handler() 來 Hack 一下。但是仍有很多錯誤類型是 set_error_handler() 捕捉不到的

PHP 7引入 Throwable 接口,錯誤及異常都實(shí)現(xiàn)了 Throwable,無法直接實(shí)現(xiàn) Throwable,但可以擴(kuò)展 \Exception 和 \Error 類??梢杂?Throwable 捕捉異常跟錯誤。\Exception 是所有PHP及用戶異常的基類;\Error 是所有內(nèi)部PHP錯誤的基類。

$name = "Tony";
try {
    $name = $name->method();
} catch (\Error $e) {
    echo "出錯消息 --- ", $e->getMessage(), PHP_EOL;
}
 
try {
    $name = $name->method();
} catch (\Throwable $e) {
    echo "出錯消息 --- ", $e->getMessage(), PHP_EOL;
}
 
try {
    intp(5, 0);
} catch (\pisionByZeroError $e) {
    echo "出錯消息 --- ", $e->getMessage(), PHP_EOL;
}

6、hashtable 的變化

7、執(zhí)行器

8、新的參數(shù)解析方式

PHP5  對應(yīng)的參數(shù)解析 zend_parse_parament,

PHP7對應(yīng)的參數(shù)解析:fast_zpp

關(guān)于“php7和PHP5對比新特性和性能優(yōu)化有哪些區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

分享名稱:php7和PHP5對比新特性和性能優(yōu)化有哪些區(qū)別-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://chinadenli.net/article14/dgjoge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站制作、網(wǎng)站制作用戶體驗(yàn)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)