自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何高效優(yōu)化PHP代碼解析損耗

開(kāi)發(fā) 后端
PHP代碼解析損耗的優(yōu)化目標(biāo)是一個(gè)訪問(wèn)只運(yùn)行一個(gè)php文件,并且這個(gè)文件里不包含任何與這個(gè)流程無(wú)關(guān)的代碼。

程序員們?cè)谶M(jìn)行PHP代碼編程中總會(huì)希望對(duì)自己的代碼程序進(jìn)行最優(yōu)化的操作,使程序盡量的輕便簡(jiǎn)潔。我們?cè)谛阅芊治鰏hopex性能的時(shí)候。#t#

發(fā)現(xiàn)用在PHP的語(yǔ)法解析上的損耗占了很大比重,如果用valgrind看他的C調(diào)用的話,就會(huì)發(fā)現(xiàn)大約50%的時(shí)間被用在lex&yacc上面。也就是由PHP代碼轉(zhuǎn)成opcode的部分。即PHP代碼解析損耗。

這個(gè)方面PHP代碼解析損耗的優(yōu)化極限目標(biāo)是: 一個(gè)訪問(wèn)只運(yùn)行一個(gè)PHP文件,并且這個(gè)文件里不包含任何與這個(gè)流程無(wú)關(guān)的代碼。

如何兼顧代碼結(jié)構(gòu)容易理解和性能是個(gè)挑戰(zhàn)

我們的處理思路是,通過(guò)類似smarty的編譯系統(tǒng),將訪問(wèn)編譯成一個(gè)個(gè)文件:因?yàn)閟hopex是mvc的結(jié)構(gòu),那么編譯粒度就每個(gè)控制器的方法對(duì)應(yīng)一個(gè)流程文件。

當(dāng)控制器第一次調(diào)用時(shí),通過(guò)一種方法監(jiān)控流經(jīng)的每個(gè)model-method,子過(guò)程等等,最后抽取剝離出來(lái),加上公用的數(shù)據(jù)庫(kù)連接函數(shù),配置文件等等一起組合成一個(gè)單一的終極PHP文件。
至于緩存的更新基本就是版本的更新,每次升級(jí)的時(shí)候。touch一個(gè)cachestat文件的最后修改時(shí)間即可。

那么實(shí)現(xiàn)的挑戰(zhàn)有兩個(gè):

* 一個(gè)叫model的函數(shù)化 (這樣叫很酷,有點(diǎn)像虛的死神化) 。是弱化model層對(duì)象特性,讓類退化為僅是函數(shù)的容器,減少繼承,重載這些應(yīng)用。
* 二是實(shí)現(xiàn)一個(gè)自己的編譯引擎。

上面兩條最新的shopex485已經(jīng)走了很遠(yuǎn)了,商品和訂單的函數(shù)都已經(jīng)拆分了。第二個(gè)PHP代碼解析損耗的解決辦法是我們自己實(shí)現(xiàn)了一個(gè)叫tramsy的解析器( 翻轉(zhuǎn)(smart)+y ),特點(diǎn)是把大量的插件改成了編譯型。強(qiáng)化了編譯插件的特性,增加了一種編譯型modifier的插件類型。并且提出了變量預(yù)綁定的概念:

 

  1. {if $var=1}  
  2. yes  
  3. {elseif $var=2}  
  4. no  
  5. {else}  
  6. what?  
  7. {/if} 

 

如果是原生的smarty,生成的代碼是:

 

  1. vars['var']==1){ ?> 
  2. yes  
  3. vars['var']==2){ ?> 
  4. no  
  5. what? 

 

如果在tramsy里,程序員預(yù)測(cè)var一定是1,并且有把握在其值改變的時(shí)候系統(tǒng)自動(dòng)清除模板緩存,就可以把他設(shè)置為”預(yù)綁定變量”
那么最終生成的代碼就是:

no

這個(gè)設(shè)計(jì)大約減少了一倍多的編譯結(jié)果。性能提升了大約20%,極大的優(yōu)化了PHP代碼解析損耗。

責(zé)任編輯:曹凱 來(lái)源: shopex.cn
相關(guān)推薦

2009-02-20 11:05:58

PHP優(yōu)化高效提速

2015-01-28 14:30:31

android代碼

2018-05-11 08:39:42

NAND閃存損耗均衡算法優(yōu)化

2009-11-27 13:24:20

PHP代碼性能優(yōu)化

2009-12-07 15:41:51

PHP圖片加水印

2009-12-08 14:20:30

PHP CLI腳本

2011-06-01 16:56:57

2010-01-05 13:54:32

Jquery Json

2011-07-12 17:33:09

PHP

2009-12-03 11:11:57

PHP網(wǎng)站優(yōu)化

2022-09-06 07:00:35

CR代碼

2019-05-28 10:00:06

PHP代碼前端

2009-11-26 10:32:57

PHP代碼優(yōu)化

2009-02-23 09:11:21

2011-03-24 13:09:11

數(shù)據(jù)庫(kù)代碼

2012-06-18 15:18:32

JS

2009-12-02 13:07:27

PHP XMLRead

2009-07-31 14:50:16

電纜回波損耗

2015-06-15 12:46:09

PHPPHP代碼分析解析

2009-12-02 10:49:59

PHP解析XML元素結(jié)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)