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

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

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

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

优化可读性以及可扩展性

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

    }

}

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

时间: 2024-10-02 16:01:21

代码结构优化工作中的细节的相关文章

解读SEO优化过程中的细节优化

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 经常看到许多新手SEO从事人员说:"内容为王,外链为皇,用户体验为帝"来概括SEO优化技巧,张寿锦倒不是这么认为的.如果要做一个竞争大得热门词的话单靠这几个中心点去操作,却不一定能有好的排名!还需要进行网站结构的优化以及更细的优化,那么我们应该怎么样对网站的结构进行优化呢? 网站层次利于蜘蛛爬行抓取 为什么笔者要拿网站层次

SEO优化工作中必须注意的几个问题

广大站长都知道,做网站优化是一件很让人头痛的事,稍有风吹草动,就会干扰你的工作,甚至让你的努力付之东流.对于这个,我是深有体会的,就以我两个月前接的一个网站优化订单来说,就让我深深地感受到网站优化中不易. 做的网站是一个关于端子机的企业站,域名www.wb881.com,该站从我接受开始,我只花了一个月时间不到,就将其排名从看不到边做到了百度前三,可惜,好景不长,由于一些小小的意外,让一个本来很好的网站排名掉到前三之后,一直徘徊在百度5-6位之间,造成的直接后果就是,我没办法收取属于我的钱. 今

虚子雨:网站优化工作须做好阶段性总结

中介交易 SEO诊断 淘宝客 云主机 技术大厅 大家好,我是虚子雨.最近一直忙于一个医院的优化工作,优化也有一段时间了,一直看不到效果,内心很是着急,但是急也急不来,只能从自己的身上找找原因.我给网站做优化的时候一般都会做一个阶段性的总结,这样利于理清自己的思路,也利于回顾之前的一些不足以及需要在今后改进的地方.今天抽空给自己前段时间所做的一些工作做了一个总结,其中包括编辑的工作总结和优化的工作总结,希望大家能从我的这个简单的总结中学到一些东西. 一.编辑工作总结 一个网站离不开内容的填充,好的

iOS开发中常见的项目文件与MVC结构优化思路解析_IOS

常见的项目文件介绍 一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要用来放依赖的框架 3.test文件夹是用来做单元测试的 4.常用的文件夹(项目名称文件夹) (1)XXXinfo.plist文件(在该项目中为  01-常见文件-Info.plist) 1)简单说明 是配置文件,该文件对工程做一些运行期的配置,非常重要,不能删除. 在旧版本xcode创建的工程中,这个配置文件的名字就

总结归纳六大优化历程中我们容易忽略的细节

现如今我们到处都可以看到关于优化的培训课程或者资料,这一些信息往往给那一些刚踏入优化行业的人感觉到优化怎么这么简单,无非就是整天围绕着内容为王外链为皇那句话.其实这只是新手对于优化的看不透,笔者认为虽然从宏观开看,内容和外链着实是每一个站点的关键,但是如果你以微观的角度上看,其实有很多的细节需要我们去关注与改善.往往一两个排名的差别就是由于一个小小的细节.那么笔者今天在本文就分享几点我们在优化历程中容易忽略掉的小细节. 细节一:优化需要会记录 记录我们每一天的优化过程,然后才能制定更加准确的优化

嵌入式实时程序设计中C/C++代码的优化

1 引言 计算机技术和信息技术的高速发展的今天,计算机和计算机技术大量应用在人们的日常生活中,嵌入式计算机也得到了广泛的应用. 嵌入式计算机是指完成一种或多种特定功能的计算机系统,是软硬件的紧密结合体.具有软件代码小.高度自动化.响应速度快等特点. 特别适合于要求实时和多任务的应用体系.嵌入式实时系统是目前蓬勃发展的行业之一. 但是,实时嵌入式系统的特点使得其软件受时间和空间的严格限制,加上运行环境复杂,使得嵌入式系统软件的开发变得异常困难. 为了设计一个满足功能.性能和死线要求的系统,为了开发

SEO优化过程中经常被忽略的细节

很多新手SEOER在网站优化过程中,经常会忽略一些细节,而正是由于这些细节没有处理恰当,导致网站两三个月都没有排名.在长期的工作实践中,我总结出来主要有以下三点: 1.死链接的处理 死链接就是无效路径.如果死链接没有被处理过,那么当用户访问这条死链接的时候,网站就会显示默认的错误页面给用户,这个页面叫做404页面.默认未经设置的404页面对于用户而言是不友好的,会大大增加用户的跳出率.因此,我们有必要设置一个适合网站的404页面,该页面的功能是将用户引导回我们的网站.处理完影响用户体验的404页

分享站长seo优化过程中容易犯的细节错误

互联网进入人们生活后,网络营销已经成为企业主要的营销方式,seo优化的技术也被各大企业所重视,鉴于搜索引擎算法的不断更新,站长们在优化过程中可能会犯一些细节错误,笔者给大家总结了些常见的seo优化错误,分享给大家共同学习,也欢迎大家补充交流. 一.百度快照不代表关键词排名 百度快照是百度蜘蛛对当前页面抓取返回的存档,很多站长的优化观点中存在:快照日期越新,网站权重值越高,关键词排名越好,反之越低.事实可证明肯定的说,快照与排名关系不大,网站快照的更新频率与权重并不存在任何直接的关系. 二.黑帽s

实例分析在URL结构优化中两个常见的误区

站点的收录排名关系到一个站点的能否在竞争如此激烈的web行业中生存下去.而关系到站点收录于排名的一个内在因素就是站点的URL结构.昨日阅读到一篇关于url错误结构的文章,文章名为:实例分析URL结构规划中常见的三种错误.读后体会到原来一个简单的URL结构竟有如此多的可以影响到站点SEO的细节.而笔者在分析之后也发现了在优化过程中我们容易出现的两个URL结构优化误解,笔者将在本文中分析这两个误解. 误解以:URL结构需要统一入口 笔者看到很多前辈的文章,很多人都认为我们在站点的URL地址管理上应该