PHP性能 - php_performance - by llia alshanetsky

本文档提供了PHP性能优化的实用建议,包括减少编译耗时、使用opcode缓存、优化I/O操作、调整系统配置等多方面技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php & performance》 by llia alshanetsky

该文档是五阿哥两个月前分享给我的。当时看了1/3就撂下了。现在准备把它看完。


百度文库: http://wenku.baidu.com/view/b4c9e20116fc700abb68fcf2.html

slideshare:http://www.slideshare.net/pangee/php-performance-22852213


自己的简单翻译如下:


p2

每个php脚本文件的引入,都会造成zend编译与执行环节。

编译耗时远大于执行的时间。


p3 opcode

每个脚本仅在修改后编译一次。

opcode会从内存中读取,要比每次从硬盘读取文件编译,快很多。

opcode可以执行得更快。


p5 Compiler

尽量使用编译器的高级特性。譬如-O3

将-march -mcpu配置为你的机器相应配置。

利用CPU特殊的属性。sse  mmx 

删除调试数据。 -fomit-frame-pointer


p6 webserver : File IO

让文件所属目录的路径尽可能的短。

如果没有使用.htaccess,请把AllowOverride设置为none。

使用Apache配置Options FollowSymLinks简化文件访问方式。

Log文件真的有必要记录嘛?该条Log有必要打嘛?尽可能精简他们。

如果LOG很有必要,那么在记录时,请在一个文件中记录。在日志分析阶段,再切分日志。


p7 系统调用

系统方法由内核行,使用这些方法可以最小开销。

不要开启 ExtendedStatus (server汇报更多状态的开关)

对于禁用、开放权限时候,使用IP,而不要用domain。

不要开启 HostnameLookups (DNS反查,根据IP查HOSTNAME,开销大)

常关 ServerSignature (服务端标记)

注: apache中文详解


p8 KeepAlive

按理说长链接可以让请求变的更快,但如果不合理使用长链接,服务器会崩溃。

Apache的长连接超时尽可能的设置短一些,建议值为10s

如果该服务器是为动态脚本语言服务,可以将长链接彻底关闭。


p9 Matching your IO size

尽可能的把任务交由内核完成。

优化PHP到系统通信(?)。

减少系统调用。


p10 输出控制

效率;

灵活;

请使用ob_start();

请开启 output_buffering;

提高浏览器的渲染速度。


p11 apache的输出控制

一个好办法是,不加锁的将整个页面交由内核(?);

请将 SendBufferSize 设置为页面相似的大小;


p12 系统的输出控制 (详解)

/proc/sys/net/ipv4/tcp_wmem

4096    16384   maxcontentsizemin      default      max

/proc/sys/net/ipv4/tcp_mem

(maxcontentsize * maxclients) / pagesize

✴低内存系统请甚用






待续...

``` typedef struct hal_dma_lli { void* src_addr; void* dst_addr; struct hal_dma_lli *next; reg_dma_ctll_t lli_ctl_l; reg_dma_ctlh_t lli_ctl_h; uint32_t dstat; uint32_t sstat; uint32_t block_size; }hal_dma_lli_t; hal_status_e hal_dma_channel_tf_ll_set(uint8_t channel_num, hal_dma_lli_t *tf_ll) { uint32_t i = 0; reg_dma_ctll_t reg_ch_ctl_l; hal_dma_lli_t *tf_lli_tmp = tf_ll; reg_dma_llpl_t reg_llp_l; if (channel_num >= HAL_DMA_CHANNEL_NUM) { return E_HAL_ERROR_OUT_OF_RANGE; } if (NULL == tf_ll) { return E_HAL_ERROR_PARAMETER; } // transfer is not complete,can't modify cfg. if (E_HAL_OK != hal_dma_channel_valid(channel_num)) { return E_HAL_ERROR_RESOURCE; } dma.channels[channel_num].tf_ll_head = tf_ll; reg_llp_l.lms = 0; reg_llp_l.loc = (uint32_t)tf_ll >> 2; hal_write_reg32(HAL_DMA_BASE_ADDR + REG_DMA_LLPL_OFFSET(channel_num), reg_llp_l); while (tf_lli_tmp && (i < dma.channels[channel_num].user_cfg.block_total)) { hal_read_reg32(HAL_DMA_BASE_ADDR + REG_DMA_CTLL_OFFSET(channel_num), reg_ch_ctl_l); tf_lli_tmp->lli_ctl_l.int_en = reg_ch_ctl_l.int_en; tf_lli_tmp->lli_ctl_l.dst_tr_width = dma.channels[channel_num].user_cfg.dst_tr_width; tf_lli_tmp->lli_ctl_l.src_tr_width = dma.channels[channel_num].user_cfg.src_tr_width; tf_lli_tmp->lli_ctl_l.dinc = dma.channels[channel_num].user_cfg.dst_modify_mode; tf_lli_tmp->lli_ctl_l.sinc = dma.channels[channel_num].user_cfg.src_modify_mode; tf_lli_tmp->lli_ctl_l.dest_msize = dma.channels[channel_num].user_cfg.dst_burst_size; tf_lli_tmp->lli_ctl_l.dest_msize = dma.channels[channel_num].user_cfg.src_burst_size; tf_lli_tmp->lli_ctl_l.tt_fc = dma.channels[channel_num].user_cfg.tf_fc; tf_lli_tmp->lli_ctl_l.dms = 0; tf_lli_tmp->lli_ctl_l.sms = 0; switch (dma.channels[channel_num].user_cfg.tf_type) { case E_DMA_CONT_TO_LINKLIST: case E_DMA_RELOAD_TO_LINKLIST: tf_lli_tmp->lli_ctl_l.llp_src_en = 0; tf_lli_tmp->lli_ctl_l.llp_dst_en = 1; break; case E_DMA_LINKLIST_TO_CONT: case E_DMA_LINKLIST_TO_RELOAD: tf_lli_tmp->lli_ctl_l.llp_src_en = 1; tf_lli_tmp->lli_ctl_l.llp_dst_en = 0; break; case E_DMA_LINKLIST_TO_LINKLIST: tf_lli_tmp->lli_ctl_l.llp_src_en = 1; tf_lli_tmp->lli_ctl_l.llp_dst_en = 1; break; default: break; } tf_lli_tmp->lli_ctl_h.block_ts = tf_lli_tmp->block_size; tf_lli_tmp->lli_ctl_h.done = 0; tf_lli_tmp->lli_ctl_h.rsv0 = 0; tf_lli_tmp = tf_lli_tmp->next; i++; } return E_HAL_OK; }```请解释这段代码,分析出不规范的地方和待改进的地方并改进。
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值