仓酷云

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

[学习教程] PHP网页设计复杂说说PHP优化

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:33:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
不懂的问题有很多高手帮你解决。但不要认为你是新手,就不能帮助别人,比如今天你学会了怎样安装PHP,明天还可能有朋友会问这个问题,你就可以给他解答,不要认为这是浪费时间,忙别人其实就是帮助自己。      咱们在编写法式时,老是想要使本人的法式占用资本最小,运转速度更快,代码量更少。常常咱们在寻求这些的同时却得到了良多器材。上面我想讲讲我对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、全局页面缓存-- Squid Cache
    Squid Cache(简称为Squid)是一个盛行的自在软件(GNU通用公共允许证)的代办署理办事器和Web缓存办事器,Squid作为网页办事器的前置cache办事器经由过程缓存相干恳求来进步Web办事器的速度。
    3、部分缓存之SQL缓存
    在大多半使用法式中次要的瓶颈常常可以追溯到数据库的操作中,普通都是由于庞杂的数据库查询而消耗了大批工夫,而SQL缓存可以大大下降庞杂查询酿成的负荷。
    SQL缓存的例子(利用了memcached扩大)
    代码片断:
   
    $key = md5(“some sort of sql query”);
    if (!($result = memcache_get($key))) {
    $result = $pdo->query($qry)->fetchAll();
    // 缓存查询了局一小时
    memcache_set($key, $result, NULL, 3600);
    }
   
    4、部分缓存之代码块缓存
    为了优化PHP法式,有时分咱们不能不优化一个个代码段来削减那末一点点的履行的工夫,然而比起优化庞杂的分歧的PHP代码段还不如经由过程缓存来直接疏忽这些代码段的优化,如许做的优点是:
    1、可以很快的看到后果
    2、不会损坏之前的代码
    3、速度要比优化代码要快很多
    代码块缓存的列子(一样利用了memcached扩大)
    代码片断:
   
    function complex_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发送缓冲区巨细(字节)
    语法:SendBufferSize bytes
    默许值:SendBufferSize 0
    感化域:server config
    形态:MPM
    模块:beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker
    这个指令设置办事器的TCP发送缓冲区的巨细(字节)。进步这个值会招致两个效果:高速度和高埋伏工夫(100ms摆布)。假如设置为"0",将利用操作体系默许值。
    经由过程源代码体例编译你的Apache/PHP/Database 可以让你的法式增添10--15%的速度
    上面再说说在代码优化的时分应当注重的
    1、短代码不等于快的代码
    良多人在写法式时但愿将代码写的越简约越好,然而越短的代码有时分反而需求更长的履行工夫,所以哪怕是用更多的代码也不利用速度慢的代码
    2、在写法式的时分更应当重视法式的扩大性,而不是寻求速度
    3、在优化你的代码之前,先看看跟数据库有关的局部,由于大多半使用法式的瓶颈在数据库而不是代码
    4、微优化得失相当
    甚么叫做微优化?就像后面所说的将正则表达式局部的代码改用字符串函数取代。如许做有以下弱点:
    (1)消费工夫较长
    (2)不会处理你的功能成绩
    (3)很有能够会损坏之前的代码从而发生未知的毛病
    (4)支付大于报答
    这里还不能不提到一个误区,有些工资了让法式加倍优化,在剖析营业逻辑的时分便将优化思索在内了,从而为了失掉更优的代码而修改营业逻辑。这是非常愚昧的设法,由于法式的目标即是为了处置实际中碰到的成绩,是为这些成绩办事的,怎样能本末颠倒呢。
熟悉了PHP和MYSQL开发的要领之后,再回头看你写的那个留言本,你也许会怀疑那真的是你写的吗?当然,如果屋里还有鬼的话,也许是它写的-_-
透明 该用户已被删除
沙发
发表于 2015-2-4 02:07:23 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
山那边是海 该用户已被删除
板凳
发表于 2015-2-6 13:21:36 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
兰色精灵 该用户已被删除
地板
发表于 2015-2-8 04:29:30 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-9 04:32:04 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
爱飞 该用户已被删除
6#
发表于 2015-2-10 22:58:52 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
不帅 该用户已被删除
7#
发表于 2015-2-16 23:19:28 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
冷月葬花魂 该用户已被删除
8#
发表于 2015-2-19 00:40:26 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
admin 该用户已被删除
9#
发表于 2015-3-6 11:20:38 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-13 00:09:45 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
老尸 该用户已被删除
11#
发表于 2015-3-20 06:52:13 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
分手快乐 该用户已被删除
12#
发表于 2015-3-21 02:30:35 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
飘灵儿 该用户已被删除
13#
发表于 2015-3-23 22:41:17 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
简单生活 该用户已被删除
14#
发表于 2015-3-28 09:08:15 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
灵魂腐蚀 该用户已被删除
15#
发表于 2015-4-2 11:58:57 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
若相依 该用户已被删除
16#
发表于 2015-4-3 18:08:03 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
只想知道 该用户已被删除
17#
发表于 2015-4-7 15:21:46 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
小魔女 该用户已被删除
18#
发表于 2015-4-9 18:15:47 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
柔情似水 该用户已被删除
19#
发表于 2015-4-12 23:24:59 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
深爱那片海 该用户已被删除
20#
发表于 2015-4-15 16:10:29 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 17:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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