我们的需求很简单,就是用 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);
});
代码请自行格式化。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.