tft每日頭條

 > 圖文

 > zendframework技術是什麼

zendframework技術是什麼

圖文 更新时间:2025-02-11 12:52:55

zendframework技術是什麼? 在PHP 5.4的更新list上, 有一句: 提升了Zend引擎的性能, 減少了内存占用.,我來為大家科普一下關于zendframework技術是什麼?以下内容希望對你有幫助!

zendframework技術是什麼(Zend引擎的優化)1

zendframework技術是什麼

在PHP 5.4的更新list上, 有一句: 提升了Zend引擎的性能, 減少了内存占用.

那麼, 到底是怎麼提升的呢?

避免不必要的hashtable

我們知道在PHP中, 類的屬性/靜态屬性/常量, 都是保存在hashtable中的, 而在以前, 即使一個類沒有申明屬性/靜态屬性/常量, Zend引擎也會為他們分配Hashtable.

而在現在, 這個過程被優化了, 隻有在有元素的時候才會分配Hashtable.

這樣就避免一些emalloc/efree操作, 減少一些内存占用.

四元式優化

在PHP中, 真正執行的是Opcodes, 一個Opcodes包含3個固定的操作數, result, left, right, 在以前, 這三個操作數每一個都包含一個zval, 即使根本用不到的時候, 比如沒有右操作數的時候, 還會為右操作數分配一個zval.

而在現在, 所有的操作數将不再直接包含zval, 而是包含一個literal table的指針, 每一個op array都會包含一個literal table. 并且znode也做了相應的調整.

這樣一來, 也能減少一些内存占用. 從之前的(32位操作系統)一個opcode占用72byte, 到現在的28byte.

另外, 對于string, literal table還會保存一份這個string的預先計算的hash值, 避免了在運行時多次計算. 從而提高一部分性能.

字面字符串

就好像C語言中, 代碼中的字面字符串, 會保存在一個固定段内(數據段), 在整個執行時期, 這些字符串都是常量字符串,不能被修改,不能被free.

PHP也借鑒了這樣的思想, 提出一個Internal string的概念, 在PHP代碼中的字面量字符串, 将會一次分配, 并前再整個執行器都不能被修改.

PHP在copy_zval, free zval等操作的時候, 會對internal string特别處理, 避免不必要的free和複制.

并且這些字面量字符串的hash值将會被預先計算, 這樣一來, 對于字符串比較 ==, 以及hashtable中的hash計算來說, 都可以直接使用這個預先計算的hash值, 從而能提高一部分性能.

其他

當然, 還有很多優化點, 比如優化了opcode, 減少了一些不必要的opcodes, 在此就不一一贅述了.

對比

下面是PHP開發小組内部測試的一些數據:

原生PHP, 沒有Opcode Cache:

php-trunkpatchedinprovementbench.php (sec)4.313.4919%micro_bench.php (sec)19.7814.6326%

一些實際的應用:

php-trunkpathcedimprovementblog (req/sec)59.366.212%drupal (req/sec)1073.91084.81%fw (req/sec)105.3111.86%hello (req/sec)5362.55351.40%qdig (req/sec)243.4253.74%typo3 (req/sec)355.3382.68%wordpress (req/sec)101.8108.57%xoops (req/sec)70.378.512%scrum (req/sec)86.5104.220%

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved