仓酷云

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

[学习教程] PHP网页编程之PHP法式减速探究之代码优化

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
不过还好,PHP语言给出的语法错误很详细,只要稍微熟悉一点之后,看错误提示就能很容易找出错误所在的。PHP还有一个特别好用的调试功能,在PHP语句中,你可以随时用echo来输出结果。法式|优化       把握了PEAR::BenchMark,如今你已晓得若何测试你的代码,晓得若何判别你的代码是快是慢,是哪一部分对照慢。那末接上去我要说的就是若何没落或优化那部分慢的代码。

  这一点上我团体最次要的经历只要两点,一是消弭毛病的或低效的轮回;二是优化数据库查询语句。其实还存在一些其它的优化细节,好比“str_replace比ereg_replace快”、“echo比print快”等等。这些我临时都放在一边,稍后我会提到用缓存来凑合过于频仍的IO。

  上面咱们将三个功效不异,但法式写法分歧的函数的效力(损耗的工夫)停止对照。

  badloops.php

<?php
require_once('Benchmark/Iterate.php');
define('MAX_RUN',100);
$data = array(1, 2, 3, 4, 5);

doBenchmark('v1', $data);
doBenchmark('v2', $data);
doBenchmark('v3', $data);
function doBenchmark($functionName = null, $arr = null)
{
 reset($arr);
 $benchmark = new Benchmark_Iterate;
 $benchmark->run(MAX_RUN, $functionName, $arr);
 $result = $benchmark->get();
 echo '<br>';
 printf("%s ran %d times where average exec time %.5f ms",$functionName,$result['iterations'],$result['mean'] * 1000);
}

function v1($myArray = null) {
 // 效力很差的轮回
 for ($i =0; $i < sizeof($myArray); $i++)
 {
  echo '<!--' . $myArray[$i] . ' --> ';
 }
}


function v2($myArray = null) {
 // 效力略有进步
 $max = sizeof($myArray);
 for ($i =0; $i < $max ; $i++)
 {
  echo '<!--' . $myArray[$i] . ' --> ';
 }
}

function v3($myArray = null){
 //最好效力
 echo "<!--", implode(" --> <!--", $myArray), " --> ";
}

?>
  法式输入的了局也许是如许的:

  v1 ran 100 times where average exec time 0.18400 ms
  v2 ran 100 times where average exec time 0.15500 ms
  v3 ran 100 times where average exec time 0.09100 ms

  可以看到,函数的履行工夫变少,效力上升。

  函数v1有个很分明的毛病,每次轮回的工夫,都需求挪用sizeof()函数来盘算。函数v2则在轮回外把$myArray数组的元素个数存到$max变量中,防止了每次轮回都要盘算数组的元素个数,所以效力进步了。函数v3的效力最高,使用了现成的函数,防止轮回。

  这个例子只是给你一个理性的熟悉,分明甚么是绝对高效的代码。在实践开辟中,我信任会有良多人会恍恍惚惚地写出良多低效力的代码。要把代码写得精华精辟而高效,生怕需求工夫去锻炼:-) 但这是另外一个话题了,咱们略过不谈。

  数据库使用根基上每一个PHP法式城市用到,在实践开辟中我发明最影响全部体系效力的就是数据库这部分。至于数据库的优化和数据查询语句的优化,在此限于篇幅不具体会商。读者可参考《MySQL查询优化手艺讲座》  怎么样出来了吧,怎么样自己也可以写出php程序了,虽然离职业和专业的人还有很远,但是好的开始是成功的一半。这个时候改怎么做了呢。现在就是拿1本高手推荐的书,重头到尾读1遍,我说的这个读是自己看。
冷月葬花魂 该用户已被删除
沙发
发表于 2015-2-4 11:48:19 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
乐观 该用户已被删除
板凳
发表于 2015-2-5 21:09:20 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
飘灵儿 该用户已被删除
地板
发表于 2015-2-6 07:40:26 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小妖女 该用户已被删除
5#
发表于 2015-2-15 17:28:47 | 只看该作者
做为1门年轻的语言,php一直很努力。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-28 07:43:51 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
admin 该用户已被删除
7#
发表于 2015-3-9 21:37:42 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
变相怪杰 该用户已被删除
8#
发表于 2015-3-11 19:51:50 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
深爱那片海 该用户已被删除
9#
发表于 2015-3-15 22:26:17 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
莫相离 该用户已被删除
10#
发表于 2015-3-19 22:50:53 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
若相依 该用户已被删除
11#
 楼主| 发表于 2015-3-22 23:14:58 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
若天明 该用户已被删除
12#
发表于 2015-3-25 21:22:54 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
第二个灵魂 该用户已被删除
13#
发表于 2015-3-28 12:30:22 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
小魔女 该用户已被删除
14#
发表于 2015-4-8 04:58:54 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
不帅 该用户已被删除
15#
发表于 2015-4-12 00:54:47 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
爱飞 该用户已被删除
16#
发表于 2015-4-16 18:34:17 | 只看该作者
实践是检验自己会不会的真理。
飘飘悠悠 该用户已被删除
17#
发表于 2015-4-17 01:27:59 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
精灵巫婆 该用户已被删除
18#
发表于 2015-4-21 05:38:47 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
山那边是海 该用户已被删除
19#
发表于 2015-4-22 03:32:48 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
透明 该用户已被删除
20#
发表于 2015-4-26 02:09:05 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-13 06:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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