仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 598|回复: 8
打印 上一主题 下一主题

[学习教程] PHP网页编程之复杂说说PHP优化那些事

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
通过这段时间的学习实践,对软件开发有了更多新的认识,不在局限于之前的片面性。当然,现在所学到的工具其实并不多,离当一个真正的程序员,还有很大的差距。
我们在编写程序时,老是想要使本人的程序占用资本最小,运转速率更快,代码量更少。常常我们在寻求这些的同时却得到了良多器材。上面我想讲讲我对PHP优化的了解。优化的目标是花起码的价值换来最快的运转速率与最简单保护的代码。
举行年夜局限的优化,而不是逝世啃某些程序代码
我这里所说的优化,基础上都是从服务器,Apache,数据库这些方面来举行的优化,而并非对你的PHP代码加以改善从而进步程序的运转速率,由于比起你将程序中的正则优化为字符串处置函数从而提拔程序速率来讲,在年夜局限内举行的优化所必要的价值要比这个小的多,而取得待遇却要丰富的多。
在非代码处举行优化有以下优点:
1、一般情形下可以年夜年夜进步效力
2、不会危及到代码的完全性
3、可以疾速部署
  缓存手艺
上面来讲说经常使用的缓存手艺,经由过程这些缓存手艺可以年夜年夜的进步效力
在说到缓存手艺的时分不能不提到memcached,memcached是高效、疾速的散布式内存工具缓存体系,次要用于减速WEB静态使用程序。
  Memcached的道理
memcached是以保卫程序体例运转于一个或多个服务器中,守候吸收客户真个毗连操纵,客户端能够由各类言语编写(比方PHP)。PHP等客户端在与memcached服务创建毗连以后,接上去的事变就是存取工具了,每一个被存取的工具都有一个独一的标识符key,存取操纵均经由过程这个key举行,保留到memcached中的工具实践上是安排内存中的,并非保留在cache文件中的,这也是为何memcached可以云云高效疾速的缘故原由。
说完memcached,上面来讲说经常使用的缓存办法
  1、编译与OPCODE缓存
由于PHP是注释型的言语,以是每一个PHP文件在运转的时分都必要编译后再实行,统一个文件,分歧的用户会见,大概统一个用户分歧工夫会见统一个文件,每次都必要从头编译然后运转,如许就泯灭了大批工夫。
经由过程编译缓存每一个文件在修正以后只编译一次如许就削减了文件IO操纵,用户会见后呆板指令间接从内存中掏出并实行而不是硬盘中读出。
最多见的PHP编译缓存工具有:APC,Accelerator,xcache
  2、全局页面缓存–SquidCache
SquidCache(简称为Squid)是一个盛行的自在软件(GNU通用大众允许证)的代办署理服务器和Web缓存服务器,Squid作为网页服务器的前置cache服务器经由过程缓存相干哀求来进步Web服务器的速率。
  3、部分缓存之SQL缓存
在年夜多半使用程序中次要的瓶颈常常能够追溯到数据库的操纵中,一样平常都是由于庞大的数据库查询而泯灭了大批工夫,而SQL缓存能够年夜年夜下降庞大查询酿成的负荷。
SQL缓存的例子(利用了memcached扩大)
代码片断:
$key=md5(“somesortofsqlquery”);
if(!($result=memcache_get($key))){
$result=$pdo->query($qry)->fetchAll();
//缓存查询了局一小时
memcache_set($key,$result,NULL,3600);
}

  4、部分缓存之代码块缓存
为了优化PHP程序,偶然候我们不能不优化一个个代码段来削减那末一点点的实行的工夫,可是比起优化庞大的分歧的PHP代码段还不如经由过程缓存来间接疏忽这些代码段的优化,如许做的优点是:
1、可以很快的看到效果
2、不会损坏之前的代码
3、速率要比优化代码要快很多
代码块缓存的列子(一样利用了memcached扩大)
代码片断:
functioncomplex_function_abc($a,$b,$c){
$key=__FUNCTION__.serialize
(func_get_args());
if(!($result=memcache_get($key))){
$result=//函数代码
//贮存实行了局1小时
memcache_set($key,$result,NULL,3600);
}
return$result;
}

固然除上述办法外还能够用到文件缓存(将数据库中的数据掏出贮存在文件中),还能够天生静态HTML文件等,可是这些办法的缓存仍是将文件贮存在硬盘上而不是内存中。
  输入把持
除上述缓存手艺外还能够经由过程输入把持来让程序实行的工夫更少
上面经由过程PHP与APACHE来讲说输入把持
  1、PHP输入把持
这里最次要用到ob_start()和PHP中的OB系列函数,这些函数能够做甚么呢?
第一就是静态模版手艺。所谓静态模版手艺就是经由过程某种体例,使得用户在client端失掉的是由PHP发生的html页面。假如这个html页面不会再被更新,那末当别的的用户再次扫瞄此页面时,程序将不会再挪用PHP和相干的数据库,关于某些信息量对照年夜的网站,比方sina,163,sohu。相似这类的手艺带来的优点长短常伟大的。
代码示例:
<?php
ob_start();//翻开缓冲区
?>
php页面的全体输入
<?php
$content=ob_get_contents();//获得php页面输入的全体内容
$fp=fopen(“output.html”,“w”);//创立一个文件,并翻开,筹办写进
fwrite($fp,$content);//把php页面的内容全体写进output.html,然后……
fclose($fp);
?>

固然这个ob系列函数另有其他良多用途我就不在这里逐一申明了。
  2、apache输入把持
将SendBufferSize设置为页面巨细,如许就可以将页面一次性放在发送缓冲区从而增添处置速率。
SendBufferSize指令
申明:TCP发送缓冲区巨细(字节)
语法:SendBufferSizebytes
默许值:SendBufferSize0
感化域:serverconfig
形态:MPM
模块:beos,mpm_netware,mpm_winnt,mpmt_os2,prefork,worker
这个指令设置服务器的TCP发送缓冲区的巨细(字节)。进步这个值会招致两个成果:高速率和高埋伏工夫(100ms摆布)。假如设置为”0&Prime;,将利用操纵体系默许值。
经由过程源代码体例编译你的Apache/PHP/Database可以让你的程序增添10&ndash;15%的速率
上面再说说在代码优化的时分应当注重的
1、短代码不即是快的代码
良多人在写程序时但愿将代码写的越简便越好,可是越短的代码偶然候反而必要更长的实行工夫,以是哪怕是用更多的代码也不利用速率慢的代码
2、在写程序的时分更应当注意程序的扩大性,而不是寻求速率
3、在优化你的代码之前,先看看跟数据库有关的部分,由于年夜多半使用程序的瓶颈在数据库而不是代码
4、微优化得失相当
甚么叫做微优化?就像后面所说的将正则表达式部分的代码改用字符串函数取代。如许做有以下弱点:
(1)消费工夫较长
(2)不会办理你的功能成绩
(3)很有大概会损坏之前的代码从而发生未知的毛病
(4)支付年夜于报答
这里还不能不提到一个误区,有些工资了让程序加倍优化,在剖析营业逻辑的时分便将优化思索在内了,从而为了失掉更优的代码而修改营业逻辑。这是非常愚昧的设法,由于程序的目标即是为了处置实际中碰到的成绩,是为这些成绩服务的,怎样能本末颠倒呢。
告诉你了一个方式,但是缺少努力这一环节,那也是白搭。
admin 该用户已被删除
沙发
发表于 2015-1-19 06:27:51 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
柔情似水 该用户已被删除
板凳
发表于 2015-1-25 23:10:47 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
分手快乐 该用户已被删除
地板
发表于 2015-2-4 13:12:21 | 只看该作者
实践是检验自己会不会的真理。
金色的骷髅 该用户已被删除
5#
发表于 2015-2-9 23:15:14 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-28 04:42:29 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
若天明 该用户已被删除
7#
发表于 2015-3-9 21:13:26 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
山那边是海 该用户已被删除
8#
发表于 2015-3-17 01:10:36 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
老尸 该用户已被删除
9#
发表于 2015-3-23 14:59:43 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表