第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP7函數(shù)采用強類型后為什么性能沒有提升,反而下降了?

PHP7函數(shù)采用強類型后為什么性能沒有提升,反而下降了?

PHP
狐的傳說 2019-03-08 18:53:19
題目描述 PHP版本:PHP 7.2.9先后采用傳統(tǒng)PHP風(fēng)格 和 PHP7.X以后的強類型函數(shù)風(fēng)格執(zhí)行一段邏輯相同的測試代碼按預(yù)期應(yīng)該是強類型版本的代碼性能更高,可是實際執(zhí)行時間確實傳統(tǒng)風(fēng)格的版本更短 代碼如下: 傳統(tǒng)風(fēng)格的: <?php class Normal { public $data = 0; public function func1($a, $aa, $aaa, $aaaa) { $this->data += $a; $this->data += $aa; $this->data += $aaa; $this->data += $aaaa; return $this->data; } public function func2($b, $bb, $bbb, $bbbb) { $this->data += $b; $this->data += $bb; $this->data += $bbb; $this->data += $bbbb; return $this->data; } public function func3($c, $cc, $ccc, $cccc) { $this->data += $c; $this->data += $cc; $this->data += $ccc; $this->data += $cccc; return $this->data; } public function getData() { return $this->data; } } $obj = new Normal(); $val = 0; for($i = 1; $i < 500000; ++$i) { $val += $obj->func1($i, $i+1, $i+2, $i+3); $val += $obj->func2($i, $i+1, $i+2, $i+3); $val += $obj->func3($i, $i+1, $i+2, $i+3); } echo $val; echo "\ndone\n"; 強類型的: <?php class Normal { public $data = 0; public function func1(int $a, int $aa, int $aaa, int $aaaa): int { $this->data += $a; $this->data += $aa; $this->data += $aaa; $this->data += $aaaa; return $this->data; } public function func2(int $b, int $bb, int $bbb, int $bbbb): int { $this->data += $b; $this->data += $bb; $this->data += $bbb; $this->data += $bbbb; return $this->data; } public function func3(int $c, int $cc, int $ccc, int $cccc): int { $this->data += $c; $this->data += $cc; $this->data += $ccc; $this->data += $cccc; return $this->data; } public function getData(): int { return $this->data; } } $obj = new Normal(); $val = 0; for($i = 1; $i < 500000; ++$i) { $val += $obj->func1($i, $i+1, $i+2, $i+3); $val += $obj->func2($i, $i+1, $i+2, $i+3); $val += $obj->func3($i, $i+1, $i+2, $i+3); } echo $val; echo "\ndone\n"; 執(zhí)行時間(執(zhí)行5次): 傳統(tǒng)版本:0m0.402s0m0.404s0m0.422s0m0.399s0m0.411s 強類型版本:0m0.395s0m0.351s0m0.462s0m0.472s0m0.438s 我理解是PHP在解釋代碼的過程中當(dāng)需要解釋執(zhí)行一個函數(shù),如果有參數(shù),作為弱類型語言會在解釋的過程中生成若干不同參數(shù)類型的機器碼, 而如果用強類型的方式指定了類型,就會生成唯一的機器碼因此我也在測試方法中采用了4個參數(shù)然而好像并沒有拉開差距, 甚至平均下來還不如普通版本 是我的方式有問題嗎?
查看完整描述

4 回答

?
瀟湘沐

TA貢獻1816條經(jīng)驗 獲得超6個贊

首先,使用了強類型的情況下,后者反而會比前者多一種“VERIFY_RETURN_TYPE”的opcode,也就是多一種操作(注意不是多一步,這種操作在你每次循環(huán)的時候都要執(zhí)行),多花費的時間基本都在這兒了。。
其次,PHP7的性能提升主要是zval結(jié)構(gòu)的改進,HashTable的改進等等優(yōu)化累積起來的效果。嚴(yán)格模式帶來的更多是編碼風(fēng)格上的規(guī)范,強制編碼者按照規(guī)范進行傳參,返回值等操作(以前的PHP版本在這方面不報錯,那么勢必需要花費開銷來進行一系列的處理),新版本的PHP在開啟強校驗之后在遇到不規(guī)范的情況下則直接報錯,不再往下執(zhí)行。。

查看完整回答
反對 回復(fù) 2019-03-18
?
鳳凰求蠱

TA貢獻1825條經(jīng)驗 獲得超4個贊

php7的性能提升不是某個語法或者某個語法糖的原因,而是php的內(nèi)核的性能的提示。而且這種強制類型轉(zhuǎn)換肯定是比以前的多出一次操作,理論上是要慢的,同時,我覺得只有5次測試,數(shù)量太少。

查看完整回答
反對 回復(fù) 2019-03-18
?
UYOU

TA貢獻1878條經(jīng)驗 獲得超4個贊

我想問的是PHP7下強類型和弱類型的性能
而不是PHP7和PHP5的性能
況且PHP7有必要和PHP5比性能嗎?

查看完整回答
反對 回復(fù) 2019-03-18
?
BIG陽

TA貢獻1859條經(jīng)驗 獲得超6個贊

比較性能要和php5.*比好不好。自己和自己比也是6

查看完整回答
反對 回復(fù) 2019-03-18
  • 4 回答
  • 0 關(guān)注
  • 1333 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號