代码结构优化工作中的细节

简介: 咱们说到程序优化,立马想到的是什么内容呢?一般情况下我们想到的可能是 程序执行速度 页面载入时间 内存占用 网络流量消耗 牺牲空间来换取执行速度的提升 执行重复操作来换取内存消耗的优化 以及用各种办法减少对数据库的查询 今天我们主要说的是另种优化,那就是代码结构的优化,而这一点往往更

咱们说到程序优化,立马想到的是什么内容呢?一般情况下我们想到的可能是

  • 程序执行速度
  • 页面载入时间
  • 内存占用
  • 网络流量消耗
  • 牺牲空间来换取执行速度的提升
  • 执行重复操作来换取内存消耗的优化
  • 以及用各种办法减少对数据库的查询

今天我们主要说的是另种优化,那就是代码结构的优化,而这一点往往更加重要。

优化可读性以及可扩展性

  • 硬件足够,系统复杂的时代,让代码易于阅读和调试,易于维护和扩展更重要。才能更好的团队合作,才能适应需求变化。
  • 咱们的代码,写1次,调试5次,修改10次,阅读50次。
  • 连续不断的变化会削弱原设计的概念完整性,从而最终导致软件的死掉。
  • 我们读代码就是用肉眼和大脑编译执行代码。
  • 不要让“其他人”读不懂你的代码,“其他人”可能就是一周后的你。
  • 优化时难以兼顾各个方面,当致力于性能优化时,很可能让应用程序内存消耗增加,同时代码可读性也变差。

优化既对立又统一

优化时难以兼顾各个方面,当致力于性能优化时,很可能让应用程序内存消耗增加,同时代码可读性也变差。

代码结构的优化实战

一个函数只做一件事

/**
 * 一个函数或者方法只做一件事情
 * 下面是的函数的功能是发送短信,但是它却完成里用户电话号码的查询
 * 应该把取用户手机号的逻辑提出
 */
function sendSMS($uid, $msg)
{
    $sql = "select phone from user where uid =".intval($uid);
    $re = M('user')->query($sql);
    $param['OperID'] = 'xxx';
    $param['OperPass'] = 'xxx';
    $param['msg'] = $msg;
    $param['DesMobile'] = $re[0]['phone'];
    $api = 'http://xxxx/QxtSms/QxtFirewall?'.urldecode(http_build_query($param));
    //....调接口发短信
}
 
//改进,我们工作中是不是也经常忽略这样的问题呢?
 
function getPhoneByUid($uid)
{
    $sql = "select phone from user where uid =".intval($uid);
    $re = M('user')->query($sql);
    return $re[0]['phone'];
}
 
function sendSMS($uid, $msg)
{
 
    $param['OperID'] = 'xxx';
    $param['OperPass'] = 'xxx';
    $param['msg'] = $msg;
    $param['DesMobile'] = getPhoneByUid($uid);
    $api = 'http://xxxx/QxtSms/QxtFirewall?'.urldecode(http_build_query($param));
    //....调接口发短信
}

删掉死代码

//1:去除死代码
function deadcode()
{
    setRunLog();
    ;//下面是不知死活的代码。。。
}
 
function setRunLog()
{
    $tree = array_reverse(debug_backtrace());
    $log = '';
    foreach ($tree as $k => $t)
    {
        $log .= $k.": File ".$t['file']."  , function ".$t['function']." , line ".$t['line']." <br />";
    }
    echo date('Y-m-d H:i:s').':I am running by:  <br />'.$log;
}

自己定义周期,如果一直没运行,则可以删除了(也还是有风险)

同一个变量别存两种数据

function addCart($item_id , $count)  
{  
    if(!is_array($item_id))  
    {  
        $_SESSION['cart']['item_id'] = $count;  
    }  
    else  
    {  
        foreach($item_id as $i_id => $count)  
        {  
            $_SESSION['cart']['i_id'] = $count;  
        }  
    }  
}  
addCart( 'IPHONE3' , 2 );  
addCart( array('IPHONE3' => 2 , 'IPAD' => 5) ); 
 
//更提倡这么写
function addCartSingle($item_id , $count)
{
 
}
 
function addCartArr($arr )
{
 
}

去掉重复代码

这样的代码在项目中是非常常见的,因为多版本的迭代,多个人书写,肯定会重复的,当需要修改业务逻辑的时候,就会发现漏改了。

//解决重复性代码
function reg_user()
{
    //insert into user...
    ;//注册用户 ...
}
 
 
function user_reg()
{
    //insert into user...
    ;//用户注册 ...
}
 
//每次修改要改两处,不然出BUG
//不能贸然删除,有好多地方都调用了。
//改成这样,虽然不完美,至少好一些了
 
function user_reg()
{
    return reg_user();
}

不要写过于高明的代码

//不写过于高明的代码
//2B 程序员
function swap1()
{
    $a = 2;
    $b = 8;
    list($a, $b) = array($b, $a);
    echo "$a , $b <br />";
}
swap1();
 
//普通程序员
function swap2($a, $b)
{
    list($a, $b) = array($b, $a);
    echo "$a , $b <br />";
}
swap2(2, 8);
 
//文艺程序员
function swap3($a,$b)
{
    $a=$a^$b;
    $b=$a^$b;
    $a=$a^$b;
    echo "$a , $b <br />";
}
swap3(2, 8);

提取出需要注释的逻辑不清代码

//提出需要注释的逻辑不清的代码
function loadHostConfig()
{
    //这里是取的当前URL的二级域名
    $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
    $arr = explode('.', $host);
    $subdomain = strtolower($arr[0]);
    
    $client_arr = array(
        'edu' => 5,
    );
    if (isset($client_arr[$subdomain]))
    {
        define('UCAI_CLIENT_ID', $client_arr[$subdomain]);
        include_once SITE_PATH.'/config/'.$subdomain.'.class.php';
    }
    else
    {
        include_once SITE_PATH.'/config/www.class.php';
    }
}
 
//果断提出
//根据函数的意图命名——以它“做什么”命名,而不是以它“怎样做”命名。
function getSubdomain()
{
    $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
    $arr = explode('.', $host);
    $subdomain = strtolower($arr[0]);
    return $subdomain;
}
 
function loadHostConfig()
{
    //这里是取的当前URL的二级域名
    
    $subdomain = getSubdomain();
    
    $client_arr = array(
        'edu' => 5,
    );
    if (isset($client_arr[$subdomain]))
    {
        define('UCAI_CLIENT_ID', $client_arr[$subdomain]);
        include_once SITE_PATH.'/config/'.$subdomain.'.class.php';
    }
    else
    {
        include_once SITE_PATH.'/config/www.class.php';
    }
}

返回值一致 单点返回 类型统一

class OneReturn
{

    public function bad($condition)
    {

        if ($condition == 1) {
            return 'one';
        }

        if ($condition == 2) {
            return 2;
        }

        return array(
            'value' => 3,
        );

    }

    public function good($condition)
    {

        $return = array('value' => 0);

        if ($condition == 1) {
            $return['value'] = 1;
        }

        if ($condition == 2) {
            $return['value'] = 1;
        }

        return $return;

    }
    
}

今天的经验分享就到这里啦。

目录
相关文章
|
5月前
|
自然语言处理 Java 机器人
从细节出发:提高你的代码可读性
在编程的世界中,我们总是不断追求更高的性能,更优雅的设计,以及更复杂的特性。然而,我们不应忽视一个基本且重要的原则——代码的可读性。那么究竟何谓代码的可读性?顾名思义,代码可读性是指代码可理解的程度,是代码作者通过代码这个媒介,将需要表达的信息输出到读者脑中的能力。所以有的人说好的代码必然有清晰完整的注释,也有人说代码即注释,是代码简洁之道的最高境界,后者的观点飞哥持保留意见,毕竟真正能够做到代码即注释的有几人呢?
|
8月前
|
Java 编译器 应用服务中间件
代码开发优化细节
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。
188 2
代码开发优化细节
|
10月前
|
程序员 测试技术
《重构2》第十章-简化条件逻辑
《重构2》第十章-简化条件逻辑
305 0
|
11月前
|
设计模式 JSON 缓存
如何“好好利用多态”写出又臭又长又难以维护的代码?| Feeds 流重构方案
如何“好好利用多态”写出又臭又长又难以维护的代码?| Feeds 流重构方案
58 0
|
11月前
一道细节优化的题
一道细节优化的题
59 0
|
开发者
重构的核心-让代码保持整洁
很久之前团队师兄向我推荐了《重构:改善既有代码的设计》这本书,粗略翻阅看到很多重构的细节技巧,但当时还处于未接触过工程代码,只关注代码功能,不太考虑后期维护的阶段,读起来觉得枯燥无味,几乎没有共鸣,一直没有细细阅读。在工作一年后,终于在师兄的督促下,利用一个月左右的早起时光读完了这本书,收获很多,感谢师兄的督促,感谢这本书陪伴我找回了阅读习惯。把这本书推荐给已经接触了工程代码、工作一年左右的新同学,相信有了一定的经验积累,再结合日常项目实践中遇到的问题,对这本书的内容会有很多自己的思考感悟
40560 4
重构的核心-让代码保持整洁
|
设计模式 Java 测试技术
关于代码设计的几点思考
这篇文章主要总结一下自己在平时编码中遇到一些问题的思考。很多时候,代码设计很难十全十美,我们面对的往往是选择题,如何在多个选择之间权衡取舍,并不是一件简单的事情。
171 0
|
数据库
高质量代码优化!谈谈重构项目中if-else代码的几点建议
本篇文章探讨了代码的重构以及优化,主要针对代码中大量的条件判断if-else语句问题提出了具体的优化建议。介绍了优化if-else语句的几种有效的方法,包括switch,接口interface以及数据库实现对条件语句进行的优化。
141 0
高质量代码优化!谈谈重构项目中if-else代码的几点建议
|
程序员
《重构:改善既有代码的设计》-学习笔记二(+实战解析)
《重构:改善既有代码的设计》-学习笔记二(+实战解析)
523 0
《重构:改善既有代码的设计》-学习笔记二(+实战解析)