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中进行身份认证
Oct 09 PHP
php header()函数使用说明
Jul 10 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
深入密码加salt原理的分析
Jun 06 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
简单的php新闻发布系统教程
May 09 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php获取当前url地址的方法小结
Jan 10 PHP
php实现网页端验证码功能
Jul 11 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 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数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
2017/02/12 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
JQuery元素快速查找与操作
2018/04/22 jQuery
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
python基础教程之lambda表达式使用方法
2014/02/12 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
python简单实现刷新智联简历
2016/03/30 Python
python微信公众号开发简单流程
2018/03/23 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python内存动态分配过程详解
2019/07/15 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
python入门之基础语法学习笔记
2020/02/08 Python
Python bisect模块原理及常见实例
2020/06/17 Python
校园摄影活动策划方案
2014/02/05 职场文书
司法建议书范文
2014/05/13 职场文书
学校花圃的标语
2014/06/18 职场文书
Golang jwt身份认证
2022/04/20 Golang