常见的低效率之源—代码大全

近来在看代码大全这本书,写写摘要和读后感,希望能与看官共分享


常见的低效率之源大概有这样几个

一 输入输出操作

     按照作者的话来说就是,如果你可以选择在内存中处理文件,就不要费力的通过磁盘,数据库,或是跨网络访问相同的文件,除非程序对内存占用非常敏感,否则数据都应该放在内存中。

     由此,我想到很多大型互联网公司都在采用memcached,vanish等机制,去把热点数据放进内存中,从而减少了对数据库的访问,对用户来说,访问更快,体验性更好,对web的后端服务器来说,也减轻了很多压力

二 分页

     举个例子,一个程序员写了一个初始化循环,这段程序在一个内存页面大小为4k的系统上将产生很多缺页中断

    for ( $column = 0 ; $colum < MAX_COLUMS ; $column++ )
    {
for ($row = 0 ; $row < MAX_ROWS ; $row++ )
{
$table[$row][$colunm] = blankTableElement();
}
    }

         乍一看,代码没什么错误,问题在哪?问题出在table中每一个元素都有大约4000字节长,如果该table的行太多,那么每一次程序访问不同的行元素的时候,操作系统都要进行页交换,按照这样的组织方式,每一次的数组访问都需要切换所读取的行,这就意味着每一次的数组访问都会造成磁盘和内存之间的页面交换

        如果我们将内外层的for循环条件进行切换,虽然运行时仍然会引起缺页中断,但是只会发生MAX_ROWS次,而不是原来的MAX_ROWS * MAX_COLOUMS次了,在一台内存较少的机器上,改进后的代码很有可能比第一段快上1000倍

 三 系统调用

      这一部分可总结为,不要轻易去系统调用,能自己写就自己写吧

四 解释型语言

     我们比较一下编程语言的相对执行时间

     一般来说,编译型语言的执行速度比较快,当今比较流行的混合型语言开发,php适合开发web服务,后端的一些处理服务,如果需要高效的话,会使用c或者phthoy或者shell编写

五 错误 

    常见的错误有,忘了去掉调试代码,没释放内存,数据库表设计失误,轮询 不存在的设备等等

     写到这,我要提醒自己,明天上班把数据库表的索引加上


最后,总结一下最近检查代码发现的两个性能瓶颈

一是防止XSS攻击的代码

它为神马成了瓶颈,因为我的项目里,有很多与用户交互的操作,需要服务端对表单数据进行过滤,每一个元素都要进行一通循环,去除标签,去除关键字,替换特殊符号等等,在网上找的某个著名函数RemoveXSS经测试,耗时巨大,后替换成html purifier,经测试,比原来快20,000微秒,进步是有,但并不大

二是curl请求耗时

这个比较头疼,想优化,没有方向


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章