PHP性能优化(1)

 更新时间:2016年11月25日 16:11  点击:2073

前言

PHP 本身已经是一种非常快速的语言,不过除了执行速度,PHP仍然有许多可以被优化的地方。

       在本文中我们将介绍一下几点:

1.         为什么PHP中优化的有许多因素是和代码没有关系的

2.         在提升PHP性能的过程中,为什么我们还需要了解更多的关于其它方面的知识

3.         这些子系统导致瓶颈的原因以及解决的方法

4.         我们还讨论如何调整以及优化PHP代码使其拥有更佳的性能

达到高性能

       当我们谈论高性能时,我们并不仅仅指一个PHP脚本运行的有多么快速,性能是指速度和可伸缩性的折中权衡。使用较少资源的脚本因该会比另一个使用了缓存的脚本要慢,但是在web服务器中,某一时刻可能运行同一个脚本的多个拷贝。

       在下面的例子中,我们假设脚本a.php是一位跑得十分快速赛跑选手,而b.php是一位马拉松长跑健将,他的速度是基本不变的。在负载较轻时,a.php 运行的要比b.php快,然而随着web服务器的负载不断增加,b.php的性能只是降低了一些,而a.php却大势已去!

      

    现在我们以一个现实中的例子来解释上面发生的情况。我们要写一个PHP脚本,它从一个250k的文件中读取数据,并且生成一个HTML文件。为了便于比较,我们写了两个实现同样功能脚本:“hare.php 将文件一次性读入内存,并且一次性处理所有的数据;“tortoise.php 一次只从文件中读取一行,并且决不在内存中保留多于一行的信息。结果是tortoise.php因为使用了更多的系统调用而明显的慢与hare.php

       脚本hare.php要求有0.04秒的CPU时间和10M的内存,tortoise.php要求有0.05秒的CPU是时间和5M的内存。此时Web服务器有100M的物理内存,和99%的空闲CPU。为了简化问题,我们不考虑内存碎片的情况。

       当有10个脚本被同时运行时,hare.php将会占用掉所有的内存(10M×10100M,tortoise.php则可以剩下50M的空闲内存。如果第11个脚本要在服务器中运行,hare.php将不得不使用虚拟内存,这可能导致其速度降低一半,这时所有对hare.php的请求都将使用0.88秒的CPU时间,与此同时,tortoise.php将仍然使用0.06秒的CPU时间。

       下表中较快的PHP脚本使用了粗体以示区别:

连接数

 

1HTTP连接时的CPU时间

10HTTP连接时的CPU时间

11HTTP连接时的CPU时间

hare.php

0.04

 

0.40

 

0.88
(
使用了虚拟内存)

tortoise.php

0.06

0.06

0.66

 

上面的例子说明:提供好的性能并不是仅仅指编写一个快速的PHP脚本。实现高性能的PHP还要求对底层硬件、操作系统、以及常用的配套软件像web服务器和数据库系统都有良好的认识。

 

总结下php程序效率优化的一些策略:
1.在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
2.尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
3.优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
4.尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
5.循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
6.多维数组尽量不要循环嵌套赋值;
7.在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
8.foreach效率更高,尽量用foreach代替while和for循环;
9.用单引号替代双引号引用字符串;
10.“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
11.对global变量,应该用完就unset()掉;

以上的策略所涉及的问题,我都在实践中遇到过,用了这些策略,效率提高了不少。试试吧。。。。

以下是一篇关于提高PHP效率的文章,很不错啦:
===================================================================================
榨干 php,提高效率
2006-12-22 14:35

原文地址:http://www.111cn.net/bbs/thread-13409-1-1.html
这篇杂文翻译整理自网络各路文档资料(见最末的参考资料),尤其是 Ilia Alshanetsky (佩服之至) 在多个 php 会议上的演讲,主要是各类提高 php 性能的技巧。为求精准,很多部分都有详细的效率数据,以及对应的版本等等。偷懒,数据就不一一给出了,直接给结论,如果需要看原文档,请到文末「参考资料」部分。橙色标题为推荐部分。

========================================================

静态调用的成员一定要定义成 static  (PHP5 ONLY)

贴士:PHP 5 引入了静态成员的概念,作用和 php 4 的函数内部静态变量一致,但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多,所有类的实例共享同一个静态变量。

QUOTE:
// php CODE Highliting for CU by dZ902

<?php
class foo {
    function bar() {
        echo ''foobar'';
    }
}

$foo = new foo;

// instance way

$foo-

< 问题: 
我查询一个表比如xinxi  里面的其中有字段为name,id 
select name from xinxi where id="变量" 
如果查出来的name 的长度的字符 的值大于3比如为"aaaaaaaaaaaaaaa"我想显示为"aaa..."; 
怎么实现望大家帮忙.......

--

如果是SQL语句则为:

SQL code

select name = case when len(name) > 3 then left(name,3) else name end from xinxi where id=''变量''


<

好久没有装过了,这次安装又发现了些问题,gg,baidu搜了一大圈,有的解决方法,有的不可以,把我的配置方法写一遍,留备用。

目标:win2003下配置iis+php+zend+mysql+phpmyadmin

需要软件列表:

IIS6: win2003自带

php: 版本 5.2.5 (最开始用的win下面的msi的安装包,总是出问题,最后换了zip包进行安装)

zend: 版本 2.2.0

phpmyadmin: 版本 2.11.5

mysql: 版本 5.0.22-community-nt

以下为参考某网站版本,对于我个人适用

===================================

WIN2003 IIS6.0+ASP.NET+PHP+MYSQL+ZEND配置
第一步  IIS安装
首先在控制面板里运行"添加删除程序" 打开 应用程序服务器  钩上ASP.NET
双击Internet 信息服务(IIS)-- 万维网服务  钩上Active Server Pages  确定  安装
把Win 2003系统盘插入光驱安装  或者指向系统文件I386目录安装
然后启用IIS父路径
打开我的电脑 -- 控制面板 -- 管理工具 -- Internet 信息服务(IIS)管理器 -- 双击打开列表
点网站 -- 属性 -- 主目录 -- 配置 -- 选项 -- 钩上 启用父路径  确定
然后修改默认访问文件  在文档里添加删除
我一般设置Default.htm  Default.html  Default.asp  Default.aspx  Index.htm  Index.html  Index.asp  Index.aspx
第二步  PHP配置
先到php官网下载php安装包
http://www.php.net/downloads.php
目前最新版是 PHP 5.2.3 zip package
将下载来的 php-5.2.3-Win32.zip 解压缩到C:PHP
先将C:PHPphp.ini-recommended 重命名为 php.ini,
将这个文件剪贴到C:windows中,确认它有users读与运行的权限。
用记事本打开C:windowsphp.ini
查找short_open_tag = Off,把off改成On,此处一般能解决运行安装Discuz!论坛时出现空白的问题
查找extension_dir = "./" 改为 extension_dir = "C:phpext"
查找;extension=php_mbstring.dll,把分号;去掉
查找;extension=php_mysql.dll,把分号;去掉,注意是mysql
查找;extension=php_gd2.dll,把分号;去掉
查找safe_mode = Off 改为: safe_mode = On
查找magic_quotes_gpc = Off  改为: magic_quotes_gpc = On
下面的是否要修改自己决定:
一些文件上传以及内存使用最大限制:
post_max_size = 20M    闪存容量
upload_max_filesize = 20M  附件容量
去掉前面的;
extension=php_bz2.dll
extension=php_curl.dll
extension=php_dba.dll
extension=php_dbase.dll
extension=php_gd2.dll
extension=php_imap.dll
extension=php_interbase.dll
extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_mssql.dll
extension=php_mysql.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_odbc.dll
extension=php_sockets.dll
extension=php_xmlrpc.dll
exten

这段代码是ThinkPHP框架中的,感觉很常用,所以单独拎出来,大家共同学习一下。
 
function auto_charset($fContents,$from='''',$to='''')
{
    if( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){
        //如果编码相同或者非字符串标量则不转换
        return $fContents;
    }
    $from   =  strtoupper($from)==''UTF8''? ''utf-8'':$from;
    $to       =  strtoupper($to)==''UTF8''? ''utf-8'':$to;
    if(is_string($fContents) ) {
                if(function_exists(''mb_convert_encoding'')){
            return mb_convert_encoding ($fContents, $to, $from);
        }elseif(function_exists(''iconv'')){
            return iconv($from,$to,$fContents);
        }else{
            exit(''转换失败'');
            return $fContents;
        }
    }
    elseif(is_array($fContents)){
        foreach ( $fContents as $key => $val ) {
                        $_key =         auto_charset($key,$from,$to);
            $fContents[$_key] = auto_charset($val,$from,$to);
                        if($key != $_key ) {
                           &
[!--infotagslink--]

相关文章

  • Mysql效率优化定位较低sql的两种方式

    关于mysql效率优化一般通过以下两种方式定位执行效率较低的sql语句。通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_quer...2015-11-08
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • MySQL针对Discuz论坛程序的基本优化教程

    过了这么久,discuz论坛的问题还是困扰着很多网友,其实从各论坛里看到的问题总结出来,很关键的一点都是因为没有将数据表引擎转成InnoDB导致的,discuz在并发稍微高一点的环境下就表现的非常糟糕,产生大量的锁等待,这时候如果...2015-11-24
  • 101个MySQL的配置和优化以及备份的经验提示

    MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化 MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把...2013-09-11
  • 带你了解PHP7 性能翻倍的关键

    20岁老牌网页程序语言PHP,最快将在10月底释出PHP 7新版,这是十年来的首次大改版,最大特色是在性能上的大突破,能比前一版PHP 5快上一倍,PHP之父Rasmus Lerdorf表示,甚至能比HHVM虚拟机下的PHP程序性能更快。HHVM 是脸书为自...2015-11-24
  • Angular性能优化之第三方组件和懒加载技术

    这篇文章主要介绍了Angular性能优化之第三方组件和懒加载技术,对性能优化感兴趣的同学,可以参考下...2021-05-11
  • C#程序优化-有效减少CPU占用率

    本文给大家介绍的是C#程序优化的小技巧,通过此方法可以有效的降低CPU的占用率,十分的简单实用,有需要的小伙伴可以参考下。...2020-06-25
  • 利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)

    这篇文章主要介绍了利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化),本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-24
  • 网站广告怎么投放最好?首屏广告投放类型优化和广告位布局优化的案例

    网站广告怎么投放最好?一个网站中广告位置最好的是哪几个地方呢,许多的朋友都不知道如何让自己的网站广告收效最好了,今天我们就一起来看看吧。 在说到联盟优化前,...2016-10-10
  • 详解Vue开发网站seo优化方法

    这篇文章主要介绍了Vue开发网站seo优化方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-07
  • JavaScript提高网站性能优化的建议(二)

    这篇文章主要介绍了JavaScript提高网站性能优化的建议(二)的相关资料,需要的朋友可以参考下...2016-07-29
  • CocosCreator ScrollView优化系列之分帧加载

    这篇文章主要介绍了CocosCreator ScrollView的优化,从分帧加载进行了讲解,对性能优化感兴趣的同学,一定要看一下...2021-04-15
  • 提升jQuery的性能需要做好七件事

    这篇文章主要介绍了提升jQuery的性能需要做好的七件事,希望真的帮助大家提升jQuery性能,需要的朋友可以参考下...2016-01-14
  • js 正则学习小记之匹配字符串字面量优化篇

    昨天在《js 正则学习小记之匹配字符串字面量》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的...2021-05-07
  • php测试性能代码

    php测试性能代码 function microtime_float () { list ($usec, $sec) = explode(" ", microtime()); return ((float) $usec + (float) $sec); } functio...2016-11-25
  • 网站优化的好处是什么

    经过代码优化升级的文件下载与页面显示速度更快;内容能够被更多的用户所访问(包括残障人士等);当浏览器版本更新,或者出现新的网络交互设备时,确保所有应用能够继续正确...2017-07-06
  • 什么是INDEX, NOINDEX, FOLLOW和 NOFOLLOW及优化和特点

    什么是INDEX, NOINDEX, FOLLOW和 NOFOLLOW及优化和特点 The Robots META tag放于后台HTML源代码的标头区(HEAD区)中。   我举一个例子: <HTML>   <HEAD>...2017-07-06
  • Java优化for循环嵌套的高效率方法

    这篇文章主要介绍了Java优化for循环嵌套的高效率方法,帮助大家更好的提升java程序性能,感兴趣的朋友可以了解下...2020-09-14
  • MySQL分页优化

    这篇文章主要为大家详细介绍了MySQL分页优化,内容思路很详细,有意对MySQL分页优化的朋友可以参考一下...2016-04-22
  • 如何用Node.js编写内存效率高的应用程序

    这篇文章主要介绍了如何用Node.js编写内存效率高的应用程序,对Node.js感兴趣的同学,可以参考下...2021-05-01