大家都是互联网公司的,那么我来分享下企业开发中的黑暗吧

2016-06-17 11:22:39 +08:00
 murmur

我们的需求很简单,就是用 phantom 映射 pc 端的页面到手机端操作,考虑到目标系统是 IE5+兼容,而且大量的垃圾代码,以及一点都没有的 ajax 操作,所以这个设计也是没什么,毕竟日访问量也就万级别,而且内网+私有机房,资源都不是问题。

我们假设某个审批有 3 步:

A 、打开单子,看一眼有什么内容,当然作为脚本这里需要检查一下某些标志元素是否出现,来判断是不是这个人的审批步骤

B 、选择下一步的流程,这在手机上是一个新页面

C 、选择下一步谁来审批,这在手机上是新页面,在 PC 端也是新页面不过是 B 步的一个弹窗罢了

如果整个架构是有状态的,手机端最多也执行三步就够了,但是实际上这个做架构的不知道当时脑袋进水了还是什么问题,做了一个无状态的设计,这个设计把 A+B+C 变成了 A+A+B+A+B+C 六步,具体是这样

1 、打开单子,向用户返回单据详情,输入审批意见,这个时候后台把审批意见存到临时数据里

2 、用户在手机上单击“审批”按钮,此时服务器请求上面的 B 步骤,并填入 1 中的审批意见

3 、用户在手机上选择流程,下一步也存到临时数据里

4 、服务器扔掉 1 的状态,重新开启一个 A 的页面,输入审批意见,模拟用户进入流程页面,填入流程,并打开选人页面,返回所有可选的人

5 、用户在手机上选人,下一位审批者也存入临时数据

6 、服务器扔掉 4 的状态,重新开启 A 的页面,输入意见、下一步流程、审批人、点击确定

7 、手机端收到成功信息

那么现在做这个架构的人在深圳某著名互联网公司,我一般很少在背后议论人,但是你作为负责人,搞出这么一个脑残的东西来,实在是忍无可忍,如果这个操作有五步,那么服务器要执行 1+2+3+4+5=15 步,一下就是三倍的负载开销,别说骂了,干死的心都有。那么多资源干嘛用的,用户在操作的时候在后台给他保存一个 phantom 的进程又能浪费多少资源。。。非要搞无状态。

至于代码,我们来分享一下不涉及秘密的纯功能函数,这个需求很简单,有一个字符串

AAA ( BBB ) YYYY-MM-DD hh:mm:ss ,其中 AAA 和 BBB 表示纯中英文不含符号的字符串, BBB 的括号是全角括号,后面是一个时间,假设这个格式为 F ,给定字符串:

F1->F2->F3->F4

希望得到[{AAA,BBB,H},{AAA,BBB,H}].length=4 ,其中 json 为简写,那么他们是怎么做的呢?

var lzgc=[];
var all = $('#sometextbox').text();
$($('#sometextbox').text().split('->>')).each(function(i){
//alert('split '+i);
var a=all.split('->>')[i];
var lz = {};
if(a.indexOf(')') > 0){
var temp = a.split('(')[0];
if(temp.indexOf('/') > 0){
lz.who = temp.split('/')[0];
}else{
lz.who = temp;
}
lz.what = a.split('(')[1].split(')')[0];
var time = a.split(')')[1];
lz.when = time.split(':')[0] + ':'+time.split(':')[1];
//lz.when = time.split(' ')[0];
lz.when = lz.when.replace('(','').replace(')','');
lzgc[i]=lz;
}
//alert(i+' fenkai '+a);
});

代码请自行格式化。。。

8208 次点击
所在节点    程序员
36 条回复
ryd994
2016-06-17 23:41:17 +08:00
惨了,这样的需求,我下意识觉得不用 regex 做不出来
mengzhuo
2016-06-17 23:44:31 +08:00
深圳某著名……难道是我厂……
ZhaiSoul
2016-06-18 00:25:48 +08:00
重点……不是 IE5+兼容吗……
coolair
2016-06-18 00:32:32 +08:00
企业?审批?太极?东软?浪潮?
afxcn
2016-06-18 00:39:59 +08:00
做自己能做的,改变自己能改变的。
msg7086
2016-06-18 05:41:31 +08:00
@xiamx lol 公司里的 bug 不是你想 fix 就能 fix 。
我这 git branch 里堆了二十多个 fix/refactor/optimize ,然而 supervisor 不批你就不能 merge 。
murmur
2016-06-18 07:26:54 +08:00
@ZhaiSoul 其实 IE5+没想象中的那么难,就是丑而已,所有需要复杂样式的东西都用图片做(反正企业应用就不缺带宽),稍微复杂一点的功能直接下发策略把网站加白名单,调用各种 script object/activex 就可以了,排版大量的表格,也就是退回 div 之前那个年代
visonme
2016-06-18 09:56:43 +08:00
多少能理解楼主看到这种系统设计后的心情。
曾经的喔也有改变世界的想法,后来发现做好自己的事情就可以了
renzhn
2016-06-18 10:07:09 +08:00
让我想起以前给学校正方教务系统做移动端 API 时也是这么做的,比如我需要给移动端提供查选课的接口,服务端需要模拟登录教务系统=>点击选课=>选择课程=>选择老师。我提供的所有接口都是无状态的,甚至客户端每次要提交教务系统的账号和密码。为什么要这样?因为 It just works! 在服务端重用会话的确能减少开销,但是服务端和客户端会话并不同步,还会带来别的问题。这种模拟登录的方式本来就很低效,不指望对性能有很高的要求,能用就好
xbb7766
2016-06-18 11:27:21 +08:00
能想出这种流程的也是国宝级了😱估计是多年累积的代码,懒得重构,反正可以用,谁重构谁就可能背锅。这就是为毛某些贵的要死的商业软件会那么慢。

重点是: IE5+!!!比尔盖子简直要感动到泪崩了。
daysv
2016-06-18 11:32:12 +08:00
选择做产品的好处就体现出来了
zaishanfeng
2016-06-18 11:48:28 +08:00
呵呵 ie5+你还呆在那干嘛 自己约的炮 含泪也要打玩
murmur
2016-06-18 15:35:04 +08:00
@zaishanfeng ...看我补充,这是对接外部系统,我们自己开发的系统是 IE8+兼容就可以
ncwhale
2016-06-18 16:56:54 +08:00
哦,好强大的系统喵~完全看不懂在干嘛喵~反正服务器资源有,就随便用好了喵~
tinyproxy
2016-06-19 08:45:53 +08:00
就没人提,一个好的产品经理很重要么
Tim007
2016-06-19 20:27:13 +08:00
@samael 你这个图很好,我必须要顶一下!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/286408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX