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正则校验用户名介绍
Jul 19 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
flash用php连接数据库的代码
Apr 21 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
详解js异步文件加载器
Jan 24 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
Laravel中的Auth模块详解
Aug 17 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 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
Terran热键控制
2020/03/14 星际争霸
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
php中hashtable实现示例分享
2014/02/13 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
javascript的push使用指南
2014/12/05 Javascript
原生javascript获取元素样式
2014/12/31 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
2019/09/28 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
解决Python3中的中文字符编码的问题
2018/07/18 Python
基于python中theano库的线性回归
2018/08/31 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
tensorflow如何批量读取图片
2019/08/29 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
西柏坡观后感
2015/06/08 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
2016七夕情人节感言
2015/12/09 职场文书