php提高网站效率的技巧


Posted in PHP onSeptember 29, 2015

程序员在编写程序时,总是想要使自己的程序占用资源最小,运行速度更快,代码量更少。往往我们在追求这些的同时却失去了很多东西。优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码。以下就几点PHP的优化做下总结:
1、in_array的用法 
      避免在大的数组上使用in_array(),同时避免在循环中对包含20个以上元素的数组使用这个函数。in_array()会非常消耗资源.对于小的数组这种影响可能很小,但是在一个循环中检查大数组可能会需要好几秒钟的时间。如果您确实需要这个功能,请使用isset()来查找数组元素。实际上是使用键名来查询键值。调用isset($array[$var])会比in_array($var,array_keys($array))要快得多。
 
2、数组键名
      在PHP中,使用不经单引号包含的字符串作为数组键名是合法的,但是我们不希望如此--键名应该总是由单引号包含而避免引起混淆。注意这是使用一个字符串,而不是使用变量做键名的情况。

例如:

// 不好的写法
$foo = $assoc_array[blah];
// 好的写法
$foo = $assoc_array['blah'];
// 不好的写法
$foo = $assoc_array["$var"];
// 好的写法
$foo = $assoc_array[$var];

3、字符串表达
       在PHP中用两种不同的方式来表示一个字符串-单引号或者双引号。主要的区别在于语法解释器会对双引号表示的字符串进行变量替换,而不会处理单引号表示的字符串。因此您应该总是使用单引号,除非您真的需要在字符串中处理变量。这样,我们可以减少程序运行消耗,因为语法解释器不需要每次多处理一大堆根本没有变量的字符串。 
      同样,如果您在函数调用中使用了一个字符串变量作为参数,您不需要将这个变量包含在引号里。这会导致语法解释器多做好多无用功。记住,几乎所有双引号中的转义符对于单引号都是无效的。您需要留意以上的规则,但是有时候为了代码的可读性,可以适当的破例。

例如:

// 不好的写法
$str = "This is a really long string with no variables for the parser to find.";
do_stuff("$str");
// 好的写法
$str = 'This is a really long string with no variables for the parser to find.';
do_stuff($str);
// 有时候单引号不是那么合适
$post_url = $phpbb_root_path . 'posting.' . $phpEx . '?mode=' . $mode . '&start=' . $start;
// 双引号有时候能让代码行更集中
$post_url = "{$phpbb_root_path}posting.$phpEx?mode=$mode&start=$start";

4、循环定义中的操作 
      在比较部分如果存在运算请一定要进行优化。因为这部分会在循环中的每一步进行操作:

// 在每次循环中sizeof函数都要被调用
 for ($i = 0; $i < sizeof($post_data); $i++)
 {
  do_something();
 }
// 您可以在循环起始部分对这个不变的量赋值
 for ($i = 0, $size = sizeof($post_data); $i < $size; $i++)
 {
  do_something();
 }

5、分支判断,switchcase好于ifelse 
      使用分支语句要比用很多ifelse好很多。
 
6、不要滥用@操作符
      不要滥用@操作符,看上去很简单,但实际上用@比不用@效率要差几倍。
      特别不要在循环中使用@。
 
7、获取时间的方法 
      很多时候我们习惯使用time()获取当前时间,但time()终归是一个函数,不如直接用$_SERVER['REQUEST_TIME']好一点。
 
8、字符串长度判断
两种写法:
(1)if(strlen($str) < 5){/* do something */}
(2)if(isset($str[5])){ /* do something */ }

以上是小编在网上整理的php优化技巧,希望对大家的学习有所帮助!

PHP 相关文章推荐
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
Yii核心组件AssetManager原理分析
Dec 02 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
四个PHP非常实用的功能
Sep 29 #PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 #PHP
PHP+AJAX实现投票功能的方法
Sep 28 #PHP
WIFI万能钥匙密码查询接口实例
Sep 28 #PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 #PHP
培养自己的php编码规范
Sep 28 #PHP
ThinkPHP数据操作方法总结
Sep 28 #PHP
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
PHP 数组入门教程小结
2009/05/20 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP循环结构实例讲解
2014/02/10 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
使用变量动态设置js的属性名
2014/10/19 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
微信小程序实现购物车功能
2020/11/18 Javascript
python人民币小写转大写辅助工具
2018/06/20 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python中私有属性的定义方式
2020/03/05 Python
Python如何转换字符串大小写
2020/06/04 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
后勤采购员岗位职责
2013/12/19 职场文书
超市营业员岗位职责
2013/12/20 职场文书
年级组长自我鉴定
2014/02/22 职场文书
给校长的建议书
2014/03/12 职场文书
项目经理任命书内容
2014/06/06 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
行政处罚告知书
2015/07/01 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书