艾伟:Remember: 我们是做产品的,不是搞学术研究的 & 用事实说话,不要臆断

简介: 近来发现,有很多同事在设计Asp.Net Application时,选择用字符串拼Html文本而不用GridView等控件,原因居然是“Asp.Net太慢”。看来有必要再次明确一个本质问题:我们是做产品的,不是搞学术研究的;同时要强调一个习惯:要用事实去证明你的猜测,而不要臆断。

近来发现,有很多同事在设计Asp.Net Application时,选择用字符串拼Html文本而不用GridView等控件,原因居然是“Asp.Net太慢”。看来有必要再次明确一个本质问题:我们是做产品的,不是搞学术研究的;同时要强调一个习惯:要用事实去证明你的猜测,而不要臆断。

一、Remember:我们是做产品的,不是搞学术研究的

直接贴一个前阵子的一封邮件,“全在邮件里面了”:

发件人: 
发送时间:
收件人:
主题: 答复: 关于WebService的性能损失


这个问题里面,缺少对用户场景的描述。

 
我认为,我们实际应该关心的并不是这两种方式的性能究竟差别有几倍,而是他们是否会对用户、对业务产生影响。

 
在这个例子里面,1500次的访问,WebService多出了5000毫秒,平均每次访问多出了3ms。那么我有以下几个问题:
1、当用户执行一次操作的时候,会调用几次Web Service,从而会多出多少毫秒?
2、多出的这些时间,是不是我们必须省下来,还是在允许接受的范围内、可以忽略不计?
3、如果用户的一次操作确实需要继续节省时间,是通过改接口方式更好更有效,还是通过其他方式(比如使用缓存、禁用ViewState、局部刷新等)更好更有效?

 
我觉得只有把这些用户场景描述出来,才好决策。 只要放在正确、合适的环境之中,任何一个方法都有可能是好的方法。 


我认为一个优秀的软件开发人员必须对程序的性能保持敏感。实际在.Net中,如果传递的数据量比较大,Web Service与Odbc方式的性能差距远不止3倍,另外使用反射与直接访问的方式相比性能差别可能超过百倍,使用属性与使用字段的方式相比性能也有几倍的差距。

但同时,我们不能局限在这些“倍数”中,要更多的关注这些差距所造成的最终影响,而不能单纯的从性能差距的倍数去判断是否使用某个技术。

就以差距明显的反射来说。如果是直接访问字段,只要执行几条cpu指令就够了;但如果使用反射,则可能需要执行几百条cpu指令。他们的性能差距很明显。但是,对于目前主频动辄几个G的cpu来说,这几百条指令是我们不能接受的么?即便用户的一次操作会触发成百上千次反射、一共多执行数万条cpu指令,转换成CPU时间也只是以微秒计。

反而是网络传输、磁盘IO这些影响性能的大头,也许将这些环节的性能提高10%,就会对用户或者业务产生明显的改善了。



发件人: 
发送时间:
收件人:
主题: 答复: 关于WebService的性能损失


请架构的同事一起评审一下吧


发件人:
发送时间:
收件人:
主题: 关于WebService的性能损失


写了个简单的测试,

访问同一个数据库表,访问1500次,一个直接通过Odbc访问,一个通过WebService封装转发一遍,

发现使用WebService后,花费的时间大约是直接访问的3倍左右

测试的数据如下,时间单位为ms


直接访问数据库时间:
2718.75
通过WebService访问数据库时间:
7750


直接访问数据库时间:
2656.25
通过WebService访问数据库时间:
7703.125


直接访问数据库时间:
2750
通过WebService访问数据库时间:
7656.25
 

鉴于这个性能损失比较大,ADS访问配置库时还是直接访问数据库吧,只是把对配置库的访问放到一个单独的DLL中,避免混到一起就是。

 

上面的这个例子很明显的说明了做产品与做学术研究的差别。可以说原来的同事在做决策的时候出发点没有放在业务上,过多的关注了性能的差距,而没有关注这些差距会对业务造成的影响。

二、Remember:要用事实去证明你的猜测,而不要臆断

这两天与另外一个Team的同事合作。某个页面上要求用表格显示一组统计数据。下面是一段对话:

:我们用GridView还是直接拼Html文本?

:(很疑惑,赶紧回顾了一下需求,发现没有比如嵌套表格之类的什么特殊格式)有现成的控件为什么还要拼Html文本呢?

:GridView很慢,会影响性能。

:#_#

 

类似的对话我听过不止一个人说过。

老实讲,能推断出这个理论的,一般都不是那种一只脚刚踏进Asp.Net大门的新手,估计他们已经明白了Asp.Net是怎样将aspx页面及对应的代码最终变成发往客户端的Html文本的。

但可惜的是,他们缺少了一个很重要的精神:就是上面邮件中那位同事“用事实去检验推论”的习惯。上面邮件中的同事用事实去验证了自己的推断,而提出GridView会影响性能的同学估计绝大多数都没有动手去写一段代码测试一下,虽然测试的代码很简单。

当然,我们都没有那么死板,考虑到验证结论所需要额外消耗时间,我们需要用“投入产出比”去判断我们所下的推论到底要不要动手去验证一下。如果是一个影响很小的推论,不去验证也就算了,让经验决定;但如果是大的决定,比如上面邮件中的问题涉及到了系统架构,以及上面对话中如果抛弃Gridview,系统中众多的表格需求将会消耗很多额外的时间,这些问题就必须慎重,一定不能仅仅靠猜测就去下一个如此重要的结论。

事实上,从性能上来讲使用GridView并不会增加多少Cpu耗时。一般的表格使用GridView与直接拼Html几乎没有性能差别。需要注意的是,当GridView绑定的数据很多,比如几百上千行,页面可能会慢。但必须了解这是因为http协议在传输文本时导致的页面慢,而不是因为使用了WebControl而没有直接拼Html。

 

总之,作为一个优秀的开发人员,必须对性能保持敏感,但同时更重要的是:一定要弄清楚并关注这些性能问题对业务、对产品所可能造成的影响。

目录
相关文章
|
5月前
|
敏捷开发 前端开发 开发者
想要成为软件开发中的王者,需要明白的 21 条准则
想要成为软件开发中的王者,需要明白的 21 条准则
|
2月前
|
机器人 程序员 C++
Scratch3.0——助力新进程序员理解程序(案例一十六、男人就下100层)
Scratch3.0——助力新进程序员理解程序(案例一十六、男人就下100层)
37 0
|
11月前
|
存储 自然语言处理 数据可视化
受ChatGPT启发,10天完成能和数据聊天APP,回答问题不输本科生
受ChatGPT启发,10天完成能和数据聊天APP,回答问题不输本科生
|
存储 测试技术 Go
10秒改struct性能直接提升15%,产品姐姐都夸我好棒
如果您以前写过 Golang ,那您很可能见过或者写过 Struct 结构体。但是,您可能不知道,通过简单地重新排序结构体中的字段,您可以极大地提高 Go 程序的速度和内存使用率!
89 0
|
机器学习/深度学习 存储 人工智能
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
1828 0
程序员饭碗不保了?GPT-3 最强应用发布,动动手指就自动写代码的神器来了!...
|
SQL JavaScript 前端开发
#你会担心掌握的技术语言过时吗?#一入编程深似海,从此妹子是路人
我掌握的技术语言有C、C++、ActionScript、JavaScript、TypeScript、Flex、Java、SQL、Scala、CAD,当然,这还不算一些具有特殊语言的技术框架,如Vue.js、Angular、Spark、Android、HarmonyOS、Node.js等,如果算上就更多了。
211 0
|
数据可视化 前端开发 vr&ar
3D 真的很难吗,瞧瞧支付宝怎么做?
阿里妹导读:图像作为人类感知世界的视觉基础,是我们在这个信息化时代获取信息、表达信息及传递信息的重要手段,而生成图像最高效准确的方式就是由计算机生成、显示、绘制,这些技术又统称计算机图形技术。计算机图形技术已经是许多产业的技术基础,比如动画、影视特效、游戏、设计、广告、AR、VR、数据可视化等等。
5264 0
|
数据可视化 数据挖掘
业界 | 尴尬了,数据故事讲不好,模型再酷炫都没用
数据科学风靡了几年,已经完成了从普及到应用的商业落地,越来越多的公司都已经同意数据驱动战略的重要性,但雇几个数据科学家和有一个数据团队,并不等同于公司就能坐享数据科学的果实。
1235 0
|
前端开发 程序员
不管你信不信,这就是程序员996的真实内幕!
7月,越来越热的天气 ,似乎让每一个码农内心越来越烦躁,因为996的加班让他们无法享受夏日凉凉的夜啤。更别提落日的激动(落日意味着下班啦!) 一直很想深度剖析一下国内互联网996盛行的原因,总是借口忙、忙、忙而始终没有迈出第一步。
1708 0

热门文章

最新文章