Heim > Backend-Entwicklung > PHP-Tutorial > 良好的书写规范提高PHP代码执行效率【下】

良好的书写规范提高PHP代码执行效率【下】

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-07-25 08:48:19
Original
874 Leute haben es durchsucht

用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数加上了双引号)。

  28、尽量做缓存,可使用 memcached。memcached 是一款高性能的内存对象缓存系统,可用来加速动态 Web 应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
  29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用 strlen() 函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于 strlen() 是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP 不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
  (举例如下)
  if (strlen($foo)
  (与下面的技巧做比较)
  if ( ! isset($foo{5})) { echo "Foo is too short"; }
  调用 isset() 恰巧比 strlen() 快,因为与后者不同的是,isset() 作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
  34、当执行变量$i的递增或递减时,$i++ 会比 ++$i 慢一些。这种差异是 PHP 特有的,并不适用于其他语言,所以请不要修改你的 C 或 Java 代码并指望它们能立即变快,没用的。++$i 更快是因为它只需要 3 条指令(opcodes),$i++ 则需要 4 条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如 Zend 的 PHP 优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
  35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
  36、并非要用类实现所有的数据结构,数组也很有用。
  37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
  38、当你需要时,你总能把代码分解成方法。
  39、尽量采用大量的 PHP 内置函数。
  40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
  41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug 调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
  42、mod_zip 可作为 Apache 模块,用来即时压缩你的数据,并可让数据传输量降低 80%。
  43、在可以用 file_get_contents 替代 file、fopen、feof、fgets 等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意 file_get_contents 在打开一个 URL 文件时候的 PHP 版本问题;
  44、尽量的少进行文件操作,虽然 PHP 的文件操作效率也不低的;
  45、优化 SELECT SQL 语句,在可能的情况下尽量少的进行 INSERT、UPDATE 操作(在 update 上,我被恶批过);
  46、尽可能的使用 PHP 内部函数(但是我却为了找个 PHP 里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
  47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
  48、多维数组尽量不要循环嵌套赋值;
  49、在可以用 PHP 内部字符串操作函数的情况下,不要用正则表达式;
  50、foreach 效率更高,尽量用 foreach 代替 while 和 for 循环;
  51、用单引号替代双引号引用字符串;
  52、“用 i+=1 代替 i=i+1 。符合 c/c++ 的习惯,效率还高”;
  53、对 global 变量,应该用完就 unset() 掉。
免费领取LAMP兄弟连原创php教程光盘/《细说PHP》精要版,详情咨询官网客服:http://www.lampbrother.net
PHPCMS二次开发 http://yun.itxdl.cn/online/phpcms/index.php?u=5
微信开发            http://yun.itxdl.cn/online/weixin/index.php?u=5
移动互联网服务器端开发   http://yun.itxdl.cn/online/server/index.php?u=5
Javascript课程   http://yun.itxdl.cn/online/js/index.php?u=5
CTO训练营                http://yun.itxdl.cn/online/cto/index.php?u=5



Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage