注:本文为作者多年工作经验总结,转贴请注明出处 Albert Wang

做PHP已经有4年多了吧,总是没写点什么总结一下,现在开始写博客了,也顺便总结下吧,留给那些新入行的朋友看看。

1. 不宜频繁使用常量
如在程序中定义了常量 define(’TEST_CONST’, ‘test’);
在某一函数中如果多次使用了这个常量TEST_CONST,那么最好将它赋值给一个局部变量来使用 $tmp = TEST_CONST;
多次调用常量是件很费时间的时,想象一下,如果全楼就一本书,是大家轮着看快还是复印一本自己看快呢?

2.写Log时使用fputs和error_log
基本上用这两个函数所耗内存差不多,时间上error_log比fputs略快些,而且写起来也比fputs省事,不用fopen和fclose了。
另外,如果程序中有频繁的log操作时可将log记录在内存中在析构函数中统一写文件,不过如果是error时的log就要在error_handler和exception_handler实时写了

3.array和object存储数据比较
这个其实比较的是内存占用了,传递的数据如果能用array就尽量用,而不要使用object,占用内存忒大

4.静态方法和动态方法
调用同一个类中的静态方法所用时间及内存都要比动态方法的小,毕竟静态方法不用实例化对象,少了很大一部分内存的
基于此原因,一些封装好了的类比如check,cache,html等等就尽量封装成静态的好了,用起来也方便,check::date($strDate),看起来也一目了然
还有静态调用的成员一定要声明成static,否则调用起来会产生一个E_STRICT警告,速度也会慢一些,仿佛PHP内部要做一些转换

5.使用require/include加载,避免require_once/include_once
如果你能保证你的程序书写的没有错误的话请尽量使用require/include加载其他PHP,如果使用require_once/include_once的话速度就会降下来,这两个函数中会验证是否已经加载过此文件,速度比较慢
另外,如果你使用的PHP版本小于5的话,最好使用require,因为include在你写这行的时候就已经加载了,而不是需要时加载

6.尽量使用系统常量而不是函数
比如:php_version()和PHP_VERSION;
如果使用常量的话,速度明显比使用函数快很多。

7.关于PHP的正则
这个嘛,总之一句话,能不用就不用,自己比较比用正则快的多,PHP的正则处理速度真的是不敢恭维。

8.判断字符长度小技巧
前几天新发现的一个小技巧
if (isset($str[9])) {}这样来判断的速度要比if (strlen($fubar) >= 10) {}快很多呦,新发现的,在一个外国人的博客上,留个地址大家看看
http://blog.dynom.nl/archives/String-length-vs-isset-to-check-string-lengths_20070807_5.html

9.替换字符串前的判断
如果不能肯定字符串中是否有要替换的值请先用strpos查找,再用str_replace来替换,strpos的速度是相当快的(比较str_replace而言可以忽略不计)

10.error_reporting(0)与@
@速度超慢

针对PHP性能方面编程技巧的总结的更多相关文章

  1. 转载--提高C++性能的编程技术

    读书笔记:提高C++性能的编程技术   第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...

  2. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  3. 15个提高编程技巧的JavaScript工具

    原文地址:http://www.imooc.com/wenda/detail/243523 JavaScript脚本库是一个预先用JavaScript语言写好的库,它方便了我们开发基于JavaScri ...

  4. 11 个简单的 Java 性能调优技巧

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这 ...

  5. 11个简单的Java性能调优技巧,傻瓜都能学会!

    大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情. ...

  6. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  7. java命名规范和编程技巧

    一个好的java程序首先命名要规范. 命名规范 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,方便维护等作用 Package 的命名 Package 的名字应该都是由一个小写 ...

  8. 从linux内核中学到的编程技巧 【转】

     从linux内核中学到的编程技巧  分类: LINUX 1构建泛型宏 (./linux/include/linux/kernel.h) #define min(x, y) ({ \ typeof(x ...

  9. 深入理解C#:编程技巧总结(二)

    原创文章,转载请注明出处! 以下总结参阅了:MSDN文档.<C#高级编程>.<C#本质论>.前辈们的博客等资料,如有不正确的地方,请帮忙及时指出!以免误导! 在上一篇 深入理解 ...

随机推荐

  1. HTML5 2D平台游戏开发#7Camera

    在庞大的游戏世界中,玩家不能一览地图全貌,而是只能看到其中一部分,并一步步探索,这时就要用到一种技术来显示局部的地图,游戏术语称为摄像机(Camera).下面两张图中的白色矩形框表示了Camera的作 ...

  2. Amzaon EC2虚拟化技术演进:从 Xen 到 Nitro

      今年2月,由光环新网运营的 AWS 中国(北京)区域和由西云数据运营的 AWS 中国 (宁夏)区域发布新的实例类型,新的实例类型包括 C5.C5d.R5.R5d.除了这四种之外,在AWS国外部分区 ...

  3. yum lock 解决方法

    方法一: # ps aux | grep yum # kill -9 pid 方法二:可以通过执行rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了 解释: [ ...

  4. 实战c++中的vector系列--creating vector of local structure、vector of structs initialization

    之前一直没有使用过vector<struct>,如今就写一个简短的代码: #include <vector> #include <iostream> int mai ...

  5. mxnet编译问题手记

    MXNet在64位Win7下的编译安装:https://www.cnblogs.com/noahzn/p/5506086.html http://blog.csdn.net/Jarvis_wxy/ar ...

  6. "活在未来" VS “活在当下”(通向财富自由学习笔记六)

    之前读过一些灵修类的书籍,<遇见未知的自己>.<当下的力量>等都在告诉我们活在当下很重要,这里笑来老师提出了一个问题,是活在当下重要呢?还是活在未来?,笑来老师给出了很好的答案 ...

  7. 【BZOJ2790】[Poi2012]Distance 筛素数+调和级数

    [BZOJ2790][Poi2012]Distance Description 对于两个正整数a.b,这样定义函数d(a,b):每次操作可以选择一个质数p,将a变成a*p或a/p, 如果选择变成a/p ...

  8. (比赛)A - Simple String Problem

    A - Simple String Problem Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%lld & ...

  9. EasyNVR无插件H5/HLS/m3u8直播解决方案中Windows系统服务启动错误问题的修复:EasyNVR_Service 服务因 函数不正确。 服务特定错误而停止。

    最近在做某地市移动公司景观直播的项目时,遇到一个问题,当我们部署EasyNVR为系统服务后,居然出现了无法启动服务的现象,表面上看,提示是系统服务启动失败,实际通过查看windows 系统日志: 查找 ...

  10. ibatis中井号跟美元符号区别(#.$)

    1.#可以进行预编译,进行类型匹配,#变量名# 会转化为 jdbc 的 类型 $不进行数据类型匹配,$变量名$就直接把 $name$替换为 name的内容 例如: select * from tabl ...