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水印技术
Feb 14 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
PHP回调函数与匿名函数实例详解
Aug 16 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 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
Yii配置文件用法详解
2014/12/04 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
Python实现Linux的find命令实例分享
2017/06/04 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
用python实现对比两张图片的不同
2018/02/05 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
技术总监岗位职责
2013/12/05 职场文书
远程研修随笔感言
2014/02/10 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
奥林匹克的口号
2014/06/13 职场文书
护理专科学生自荐书
2014/07/05 职场文书
2014高中生入党思想汇报范文
2014/09/13 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL