仓酷云

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

[学习教程] PHP网页设计PHP使用法式的功能优化

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

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

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

x
当然你可以把你最基本的功能放出来的时候就放出来,比如放到论坛上,让大家都参与,法式|功能|优化   利用PHP编程的最大优点是进修这类编程言语十分轻易和其丰厚的库。即便对需求利用的函数不是非常懂得,咱们也可以猜想出若何完成一个特定的义务。

虽然PHP十分复杂易学,但咱们依然需求消费一点工夫来进修PHP的一些编程技能,特别是与功能和内存占用相干的技能。在PHP中,有很多小技能可以使咱们削减内存的占用,并进步使用法式的功能。在本篇文章中,咱们将对PHP使用法式的剖析、若何改动剧本代码和对照优化前后的各类参数值停止扼要的引见。

经由过程在法式中设置计时的法式,并重复履行这些代码,咱们可以取得有关法式履行速度的一组数据,这些数据可以可以用来发明法式中的瓶颈,和若何停止优化,进步使用法式的功能。

或许读者已经传闻过PEAR库吧。咱们将利用PEAR库创立在剖析时需求利用的例子,这也是对现有的代码停止剖析的最复杂的办法,它使咱们无需利用商用产物就可以对代码停止剖析。

咱们要利用的库的名字是PEAR::Benchmark,它关于对代码停止剖析和功能测试十分有效。这个库供应一个名字为Benchmark_Timer()的类,可以纪录一个函数挪用和下一个函数挪用之间的工夫。在对代码的功能停止测试时,咱们可以失掉一个具体的剧本履行了局,它十分复杂,以下所示:

<?php
include_once("Benchmark/Timer.php");
  $bench = new Benchmark_Timer; $bench->start();
  $bench->setMarker('Start of the script'); 如今处于睡眠形态几分钟
  sleep(5); $bench->stop(); // 从计时器中取得剖析信息
  print_r($bench->getProfiling());
?>
下面代码履行后的输入以下所示:

Array
  (
  [0] => Array
  (
  [name] => Start
  [time] => 1013214253.05751200
  [diff] => -
  [total] => 0
  )
[1] => Array
  (
  [name] => Start of the script
  [time] => 1013214253.05761100
  [diff] => 9.8943710327148E-05
  [total] => 9.8943710327148E-05
  )
[2] => Array
  (
  [name] => Stop
  [time] => 1013214258.04920700
  [diff] => 4.9915959835052
  [total] => 4.9916949272156
  )
  )
下面的数字仿佛是一组混乱无章的数字,但假如法式的范围更大,这些数字就非常地有效了。

或许宽大读者也能猜想到,数组的第一个表目是实践挪用Benchmark_Timer()类的办法,例如

$bench->start()、$bench->setMarker()和$bench->stop(),与这些表目有关的数字是相当复杂的,如今咱们来细心地研讨这些数字:

[0] => Array
  (
  [name] => Start
  [time] => 1013214253.05751200
  [diff] => -
  [total] => 0
  )

time表目指的是什么时候对Benchmark_Timer()的start()办法挪用的UNIX的timestamp,diff表目暗示此次挪用和前次挪用之间的工夫距离,因为这里没有上一次,因而显示出了一个破折号,total表目指的是自测试入手下手到这一特定的挪用之前代码运转的总的工夫。上面咱们来看看下一个数组的输入:

[1] => Array
  (
  [name] => Start of the script
  [time] => 1013214253.05761100
  [diff] => 9.8943710327148E-05
  [total] => 9.8943710327148E-05
  )

从下面的数字咱们可以看出,在挪用$bench->start()以后,法式运转了9.8943710327148E-05秒(也就是

0.0000989秒)后入手下手挪用$bench->setMarker(....)。

一次真实的功能测试履历

虽然下面的例子不错,但在关于决意若何优化你的站点代码设计方面,它真的不克不及算是一个好例子。上面我将用我本人作为网站手艺人员的一段亲自履历来讲明若何处理功能方面存在的成绩。

我其实不大了解网站利用的代码,由于它是依据特别的需求,历经多年开辟而成的━━个中的一个模块包含网站转换代码,另外一个模块纪录网站的利用情形,其他的模块也各有各的感化。我和网站的次要开辟者都意想到网站的代码需求优化,但又不清晰成绩出在哪儿。

为了尽快地完成义务,我入手下手研讨网站的次要剧本代码,并在全体剧本代码和其包括文件中添加了一些$bench->setMarker()号令,然后剖析$bench->getProfiling()的输入,并对失掉的了局大吃一惊,本来成绩出在一个与取得特定言语名字(例如en代表english)的转换代码的函数挪用中,该函数在每一个页面上城市被利用数百次。每次挪用该函数时,剧本代码城市对一个MySQL数据库停止查询,从一个数据库表中取得真实的言语名字。

因而咱们这一类的信息创立了一个缓冲体系。经由短短2地利间的任务,咱们使体系的功能失掉了很大的进步,第一周内页面的阅读量也因而而增添了40%。固然了,这只是一个有关剖析代码可以进步互联网使用或互联网网站功能的例子。

功能测试函数挪用

在剖析一个剧本或网页(和其包括文件)时,虽然Benchmark_Timer()出格有效,但它其实不迷信,由于要取得剖析的数据咱们必需屡次加载剧本,并且它也不是针对某个类或函数挪用的。

PEAR::Benchmark库中的另外一个被称作Benchmark_Iterator的类可以很好地处理这一个成绩,它可以针对特定的函数或类的办法,显示其剖析信息。它的用处是可以可以从测试中取得分歧的了局,由于咱们晓得,假如运转一段剧本一次,其运转工夫为10秒,其实不意味着它每次的运转工夫老是10秒。

In any case, let's see some examples:

// 毗连数据库的代码
  include_once("DB.php");
  $dsn = array(
  'phptype' => 'mysql',
  'hostspec' => 'localhost',
  'database' => 'database_name',
  'username' => 'user_name',
  'password' => 'password'
  );
  $dbh = DB::connect($dsn); function getCreatedDate($id)
  {
  global $dbh; >$stmt = "SELECT created_date FROM users WHERE id=$id";
  // 在这里利用PEAR::DB
  $created_date = $dbh->getOne($stmt);
  if ((PEAR::isError($created_date)) ||
  (empty($created_date))) {
  return false;
  } else {
  return $created_date;
  }
  }include_once 'Benchmark/Iterate.php';
  $bench = new Benchmark_Iterate; // 运转getDate函数10次
  $bench->run(10, 'getCreatedDate', 1);// 打印剖析信息
  print_r($bench->get());
  ?>

运转下面的代码可以发生与上面类似的了局:

Array
  (
  [1] => 0.055413007736206
  [2] => 0.0012860298156738
  [3] => 0.0010279417037964
  [4] => 0.00093603134155273
  [5] => 0.00094103813171387
  [6] => 0.00092899799346924
  [7] => 0.0010659694671631
  [8] => 0.00096404552459717
  [9] => 0.0010690689086914
  [10] => 0.00093603134155273
  [mean] => 0.0064568161964417
  [iterations] => 10
  )
下面的这些数字很好了解,mean条目暗示getCreatedDate()函数10次运转的均匀工夫。在停止实践测试时,应当最少运转1000次,但这个例子得出的了局已足够申明成绩了。

停止语

但愿宽大读者可以经由过程本篇文章把握若何敏捷地对PHP代码停止剖析的根基办法。在这里我还还要提示宽大读者的是,对代码停止剖析不是一件复杂的事儿,由于咱们必需把握大批的有关该种言语的特征。在代码中添加计时用的代码有助于找出运转速度迟缓的函数,使用屡次反复的办法使咱们可以发明对代码停止准确优化的办法。
  刚开始写页面程序,调试完书中的例子。然后就可以尝试编写留言板了,
金色的骷髅 该用户已被删除
沙发
发表于 2015-2-4 11:53:15 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
莫相离 该用户已被删除
板凳
发表于 2015-2-7 02:37:50 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
柔情似水 该用户已被删除
地板
发表于 2015-2-9 17:25:02 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
小女巫 该用户已被删除
5#
发表于 2015-2-27 12:45:53 | 只看该作者
爱上php,他也会爱上你。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-6 00:24:17 | 只看该作者
当然这种网站的会员费就几十块钱。
7#
发表于 2015-3-8 14:58:22 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
山那边是海 该用户已被删除
8#
发表于 2015-3-10 17:52:16 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
精灵巫婆 该用户已被删除
9#
 楼主| 发表于 2015-3-11 03:22:53 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
第二个灵魂 该用户已被删除
10#
发表于 2015-3-12 00:15:46 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
变相怪杰 该用户已被删除
11#
发表于 2015-3-16 23:12:03 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
飘灵儿 该用户已被删除
12#
发表于 2015-3-19 06:00:07 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
兰色精灵 该用户已被删除
13#
发表于 2015-3-27 08:51:36 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
因胸联盟 该用户已被删除
14#
发表于 2015-3-28 20:56:07 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
冷月葬花魂 该用户已被删除
15#
发表于 2015-4-12 01:26:34 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
若相依 该用户已被删除
16#
发表于 2015-4-21 07:58:28 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
分手快乐 该用户已被删除
17#
发表于 2015-5-11 22:29:46 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
只想知道 该用户已被删除
18#
发表于 2015-6-10 17:32:01 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
小魔女 该用户已被删除
19#
发表于 2015-6-29 22:42:53 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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