• PHP 性能优化一


    PHP性能优化?对于这个问题,我们首先要知道影响PHP的性能的原因是什么?

    1.什么情况下会出现PHP性能问题?

      1)PHP语法使用 不当(包括某些业务可以使用PHP本身自带的函数来处理)

      2)使用PHP语言做了它不擅长的事情

      3)用PHP连接数据库或者服务武器不当

      4)PHP自身的短板

    2.PHP性能问题简介之PHP的性能问题的解决方向

      从困难由浅入深可分为

      1:PHP语言级的性能优化

      2:PHP周边问题的优化(比如说MYSQL Nginx/Apache)

      3:PHP语言资深分析,优化(PS主要指的是底层的C代码)

    PHP的执行过程参看http://blog.csdn.net/risingsun001/article/details/22888861

    下面针对php语言级的性能优化做实例讨论,对标题里面说的内容进行一个测试,接下来要书写两个文件 bad.php, goods.php

    我们要测试的是合并两个数组的操作

    bad.php

    思路:

    先将数组1逐个加入到目标数组中;

    之后,遍历数组2,对比数组2的元素是否在数组1中出现,如果没有则插入到目标数组,否则忽略

     1 <span style="font-size:14px;"><?php  
     2 //准备两个内容随机的数组  
     3 $arr1 = $arr2 = $arr_merged = array();  
     4 //接下来随机给两个数组赋值  
     5 for ( $i=0; $i<rand(1000,2000); $i++) {  
     6     $arr1[] = rand();  
     7 }  
     8   
     9 for ( $i=0; $i<rand(1000,2000); $i++) {  
    10     $arr2[] = rand();  
    11 }  
    12   
    13 //开始循环比较  
    14 foreach ( $arr1 as $v ) {  
    15     $arr_merged[]  = $v;  
    16 }  
    17   
    18 foreach ( $arr2 as $v ) {  
    19     if(!in_array($v, $arr_merged)){  
    20         $arr_merged[]  = $v;  
    21     }  
    22 }  
    23   
    24 var_dump($arr_merged);</span> 

    goods.php

    思路:

    随机生成两个数组,在打乱顺序

    之后,使用array_merge 合并

     1 <span style="font-size:14px;"><?php  
     2 //准备两个内容随机的数组  
     3 $arr1 = $arr2 = range(1000, 2000);  
     4 $arr_merged = array();  
     5 //接下来随机给两个数组赋值  
     6 shuffle($arr1);  
     7 shuffle($arr2);  
     8   
     9 $arr_merged = array_merge($arr1, $arr2);  
    10   
    11 var_dump($arr_merged);  
    12 </span>  

    该程序的性能测试比较如下:http://blog.csdn.net/wjc19911118/article/details/41735659

    3. 总结

    优化点:少写代码,多用PHP自身提供的能力

    性能问题:自己写的代码冗余较多,可读性不好,并且性能低

    为什么性能低?php代码需要编译解析为底层语言, 这一过程每次请求都会 处理一遍,开销大。

    好方法:多使用php内置变量,常量, 函数(spl 可以带给您好像好用的功能)

  • 相关阅读:
    C# 全局热键
    Frida hook 初识
    xposed hook 复杂函数参数问题
    C# http post 中文乱码问题
    Fiddler 抓包https 问题
    C# HttpWebRequest 多线程超时问题
    Android Studio 无 Generate signed apk 菜单选项问题
    c#调用c++ dll const char* String类型转换问题。传值,与接收返回值问题
    C++中GB2312字符串和UTF-8之间的转换
    The underlying connection was closed: An unexpected error occurred on a send
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/7451968.html
Copyright © 2020-2023  润新知