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实现的获取URL信息的类
Jan 02 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
PHPThumb图片处理实例
May 03 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
PHP将进程作为守护进程的方法
Mar 19 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
WordPress中获取所使用的模板的页面ID的简单方法
Dec 31 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP类的特性实例分析
Sep 28 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
PHP 进度条函数的简单实例
Sep 19 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
php实现mysql数据库备份类
2008/03/20 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
javascript的事件描述
2006/09/08 Javascript
Using the TextRange Object
2006/10/14 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
区域销售经理岗位职责
2015/04/02 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
python实战之90行代码写个猜数字游戏
2021/04/22 Python
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android