嘟嘟老窝

上帝给了我一双黑色的眼睛,我却用它来翻白眼......

导航

« 根据Techonrati想到的anti-spam机制 酷酷的coollittlethings »

也许是这个时代变化真得太快

同事是一位毕业两年不到的入门级程序员,这两天拿着一本《**AJAX》还是《AJAX**》在翻看,我拿过来大概看了看目录后就直接了当的建议这位小兄弟不要再看了,以你现在对WEB各个层面技术的理解程度,看这种书除过能在项目中临时抱抱佛脚外毫无一点用处。

我并不是在贬低这位小兄弟的技术水平,只是这些书的内容的确不能让人恭维,前面几章讲基础的还行,只是内容太少,后面开始大篇幅的讲解google map、dojo、dwr等等等等的使用时我就无心再看下去了。翻开书不小心正好看到了利用xml返回javabean或者是pojo对象到客户端的一节,书中称这个叫做ajax和java的对象序列化@#$%^&*,如果我没记错,这篇内容应该最早出自BEA还是IBM的中文站点上,书中用大量的代码讲解如何在java类中实现toXML方法,并最终通过servlet传递xml字符串到客户端让javascript接收,写完后作者可能也想到了xml的效率问题,又补充到在服务器端返回javascript数组以便提高应答速度,按例子要求,返回的二维数组中必须要进行字符转换,书中给出了这样一段例子代码:

function setConvertData() {
   for (var i = 0; i < xmlArray.length; i++) {
      for (var j = 0; j < xmlArray[i].length; j++) {
         if (j == 5) xmlArray[i][j] = xmlArray[i][j] + '元';
      }
   }
}

其实像上面这段代码完全可以这样写:

function getConvertData(i, j) {
    if (j == 5) return xmlArray[i][j] + '元';
    else return xmlArray[i][j];
    //或者直接写:return xmlArray[i][j] + (j==5 ? '元' : '');
}

大概形式就是这样,可能具体变量名函数名啊之类的记不清了,在这里我也不是故意炫耀下代码功底或者什么奇计淫巧,只是觉得写这些书的人要嘛不负责任要嘛就是功底不到家,写这样的代码能提高效率吗?怪也要怪现代计算机速度太快、内存太大,放在十年前286、386、2M、4M内存的机器上满篇这样的代码机器早就玩儿完。

公司项目中有个省、市、县、街道四级联动的需求,代码先是在dao层用spring的jdbcTemplate内部类的那个方法返回Entity类,循环遍历后放入list,再从biz层循环list得到每个Entity后封装到Map<String, String>再存入List后返回给Action,页面上的struts有个optionsCollection标签可以直接装载bean里的这个list到SELECT中,整个过程加上struts的总共要循环3、4次,项目为了整体架构的清晰只能这样做,目前没有加入街道级数据,在奔4的机器上不迟缓,这就是利用强大的计算机性能来损失一点代码的执行效率。

也许时代在变,现在讲究的是项目层面上软件开发,无论是MVC还是XP还是CMMI,大家都用心在楼宇的总体设计上,至于每个泥瓦匠的摸泥水平还是没颗螺丝的质量已经没人关心了,大家都相信砖混型的建筑已经过去,现在流行的是框架式楼,哪怕这层楼的砖头都掉光也不会倒塌。

给项目经理汇报了下上面所述的那个问题,项目经理不在乎的说:部署时客户那儿用的是小型机,还怕这点循环速度吗?

......

......

我视为珍品的《计算机程序设计艺术》和《代码大全》准备压箱底了,也许是我老了,也许是这个时代变化真得太快。

  • 该日志的引用地址:
  • http://www.duduwolf.com/cmd.asp?act=tb&id=313
  • 1.Fwolf | (home)
  • 新人可以宽恕,你们的经理应该开除
    技术工作从基础做起的时候就要考虑优化的问题,这是常识。
  • 2006-7-23 3:13:34
  • 2.Fwolf | (home)
  • 并且b/s模式尤其重视速度问题,唉

    firefox有一个很好的功能,如果script执行时间过长
    他会提示使用者是否终止
  • 2006-7-23 3:15:09
  • 3.shunz | (home)
  • 代码的可读性和效率之间应该有个平衡点吧
  • 2006-7-23 16:41:00
  • 4.聪明的笨蛋 | (home)
  • 嗯,感觉现在的编程都不大讲究算法和效率了。很多的效率问题都被强大的硬件所掩盖。
  • 2006-7-24 10:42:05
  • 5.leo | (home)
  • "技术工作从基础做起的时候就要考虑优化的问题,这是常识."
    一开始进行优化通常是性价比非常低的一种行为
  • 2006-7-24 10:44:47
  • 6.果果 | (home)
  • 不说优化,至少开始写时就要有不写效率很低代码的习惯吧。
  • 2006-7-26 17:05:03
  • 7.果果 | (home)
  • 我想如果全部数据都需要遍历一次的话,就需要循环吧。
    要从外层给出两个参数i,j来调用这个函数,还有函数调用、函数返回时的开销,影响速度了。

    把内层循环删掉,直接访问:

    function setConvertData() {
    for (var i = 0; i < xmlArray.length; i++) {
    xmlArray[i][5] = xmlArray[i][5] + '元';
    }
    }
    }

    经常遇到这样的情况,

    if (j == 5)
    str += '元';
    还是写成:
    str += (j==5 ? '元' : '');

    更好?
    我觉得第二种写法,即使在 j != 5 的情况下也执行运算及赋值(50%的情况?)
    效率会低一些吧。
  • 2006-8-1 8:47:06
  • 8.hm | (home)
  • 一个学生正在学习j2ee,很有感触。。。。。。
  • 2006-8-20 11:58:00
  • 9.UU | (home)
  • 比较喜欢你的言语,不过你把哪些谦虚的话去掉直接肯定说好些,毕竟大家都是程序员而不会把你当成喜欢吹捧的小丑
  • 2006-9-20 21:22:47
  • 10.e戴天骄 | (home)
  • 一年前我刚准备转到软件开发这一行,直到现在我仍在一家非专业的公司做,水平恐怕和你的小兄弟一样。看你的博好长时间了,能不能给我个建议?
  • 2006-10-3 21:22:54
  • 11.duduwolf | (home)
  • to e戴天骄: 如果对开发真的很感兴趣,那就继续搞下去,如果不是很感兴趣,最好还是转个行业
  • 2006-10-4 23:56:16
  • 12.炎藤 | (home)
  • function getConvertData(i, j) {
    if (j == 5) return xmlArray[i][j] + '元';
    else return xmlArray[i][j];
    //或者直接写:return xmlArray[i][j] + (j==5 ? '元' : '');
    }

    可以实现所有的循环?!
    我试试~
  • 2007-1-2 9:14:59
  • 13.炎藤 | (home)
  • function setConvertData() {
    for (var i = 0; i < xmlArray.length; i++) {
    for (var j = 0; j < xmlArray[i].length; j++) {
    if (j == 5) xmlArray[i][j] = xmlArray[i][j] + '元';
    }
    }
    }



    function getConvertData(i, j) {
    if (j == 5) return xmlArray[i][j] + '元';
    else return xmlArray[i][j];
    //或者直接写:return xmlArray[i][j] + (j==5 ? '元' : '');
    }

    不一样吧
    后面那段还需要不停CallFunction
    而且次数是一样的--

    会提高效率吗?

    相比较来说
    function setConvertData() {
    for (var i = 0; i < xmlArray.length; i++) {
    xmlArray[i][5] = xmlArray[i][5] + '元';
    }
    }
    }
    更完善一些

    相比较
    if (j == 5)
    str += '元';

    像这样的
    str += (j==5 ? '元' : '');

    自然后者的效率会更高一些

    不过现在的趋势确实前者的
    if (j == 5)
    str += '元';

    主要原因还是以后的更新和维护
    现在的开发和以前是不同的

    你写的代码如果不好理解的话
    会为以后的更新带来不必要的麻烦

    一次运行的效率很关键
    以后的更新扩展维护更关键

    当不少老程序员就是习惯于一时的效率
    我们这些后辈怎么办?
  • 2007-1-2 16:14:12
  • 14.luke | (home)
  • function setConvertData() {
    var xi= xmlArray.length;
    for (var i = 0; i < xi; i++) {
    var xj = xmlArray[i].length;
    for (var j = 0; j < xj; j++) {
    if (j == 5) xmlArray[i][j] = xmlArray[i][j] + '元';
    }
    }
    }
    試試這樣
  • 2007-1-20 17:37:50
  • 15.basicbest | (home)
  • "省、市、县、街道四级联动"
    实现方法是比较有趣,大概您应该还有其他特殊的考量,因为我看不出他的实现和架构的关系。
    一般来说,这类行政编码是很少改变的,所以都是采用硬编码的方式,比如如果是web的界面,数据可以放在一个js里。至于街道,变化的可能性似乎也不是很大,也可以硬编码,只是可能需要维护,但是工作量很小。
    这种情况应该是架构师的责任,如果你们有的话。这类耗资源的情况,架构师必须提前考虑到,而且要做特殊处理。
  • 2007-1-22 3:37:37
  • 16.升降平台 | (home)
  • 平台电子商务平台,提供[url=http://www.jiyangheli.com/products.htm]升降平台[/url]产品</a>
  • 2007-12-25 13:15:53
  • 18.XCVFDGD | (home)
  • [url=http://www.bzjx.net/pro10.asp]收缩机[/url]
  • 2008-3-11 13:50:54
  • 19.升降机 | (home)
  • 液压[url=http://www.xunte.com/]升降机[/url],施工升降机,
  • 2008-4-24 9:36:07
  • 20.升降机 | (home)
  • 液压[url=http://www.xunte.com/products_10.htm]升降平台[/url],电动升降平台,升降平台车,广州升降平台,铝合金升降平台
  • 2008-4-24 9:36:57

反向链接列表

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

<< 2008·2 >>

Sun

Mon

Tue

Wen

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

Search

Powered By Z-Blog 1.4 SP1 Build 50824 - modify by duduwolf

Copyright 1999-2005 duduwolf.com Some Rights Reserved.