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

    xiaoxiao2026-01-28  9

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

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

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

    优化可读性以及可扩展性

    硬件足够,系统复杂的时代,让代码易于阅读和调试,易于维护和扩展更重要。才能更好的团队合作,才能适应需求变化。咱们的代码,写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; } }

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

    最新回复(0)