做个网站做什么呢/湖南seo优化推荐
咱们说到程序优化,立马想到的是什么内容呢?一般情况下我们想到的可能是
- 程序执行速度
- 页面载入时间
- 内存占用
- 网络流量消耗
- 牺牲空间来换取执行速度的提升
- 执行重复操作来换取内存消耗的优化
- 以及用各种办法减少对数据库的查询
今天我们主要说的是另种优化,那就是代码结构的优化,而这一点往往更加重要。
优化可读性以及可扩展性
- 硬件足够,系统复杂的时代,让代码易于阅读和调试,易于维护和扩展更重要。才能更好的团队合作,才能适应需求变化。
- 咱们的代码,写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;}}
今天的经验分享就到这里啦。