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入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
定义php常量的详解
Jun 09 PHP
一个简洁实用的PHP缓存类完整实例
Jul 26 PHP
浅析iis7.5安装配置php环境
May 10 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
Aug 11 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 empty函数 使用说明
2009/08/10 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
js模拟弹出效果代码修正版
2008/08/07 Javascript
js的闭包的一个示例说明
2008/11/18 Javascript
jQuery 选择器理解
2010/03/16 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
解决Python一行输出不显示的问题
2018/12/03 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
教师批评与自我批评(群众路线)
2014/10/15 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
四年级数学教学反思
2016/02/16 职场文书
python实现图片批量压缩
2021/04/24 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript