
背景
作为一名工作N年的前端攻城狮,一直在前端的围栏里面安全的待着。一直参与的是前后端分离的项目,跟后端协作一直也比较和谐,多次参加过后端的技术评审,一直有听过 拉数据 、刷数据。算是 虽没吃过猪肉,也算见识过猪跑。
当时每每听见PM对着server同学提出这些诉求时,server同学往往都是眉头一皱,当时我的心里只暗自觉得此非一件善事。
现在在一个全栈(此处的全栈包括:端内RN、H5,PC前端,PC后端,DB。。。)小组,心里早有预期要接触到这些数据的事儿。但仰仗着组内的小伙伴们都比较给力,加之PM的不给力,故入组2月,一直相安无事😅。
万般没想到,在一个月黑风高的大半夜(晚上10点+),被老板拉到一个小黑群,让我支援去拉下数据,非常紧急。当时脑子一头愣清。连命call了组内的的大神们,大神们非常友善,细心的指导了我该怎么做。(还好这两个月也开发过了组内的Api, RPC层的项目),于是就走马上任接手了这个紧急需求。
开发经过
大神指导思路是:
- 线上地址代理到本地前端项目
- 本地前端项目代理接口到本地API
- 本地API寻址到本地RPC
- RPC项目连着线上数据库
- 在API层修改前端的请求
- 前端是发送请求即触发跑数据

通完电话,感觉可行,于是开搞!(11点了😢还是太年轻,不知道轻重)
试了下大神告知我的,生成csv文件的方式,真的生成了,开心😄
fs.appendFileSync(`result-uid-detail-${timeR}.csv`, `A,B,C,D,E\n`);
for (const item of musicianMap) {
console.log('writing......');
fs.appendFileSync(`result-uid-detail-${timeR}.csv`, `${item.uid},${item.name},${item.fanCount},${item.passedSongCount},${item.songCount}\n`);
}
剩下的就是怎么获取最终数据的问题了,这个是业务逻辑,这个我知。遂开跑, 哼哧哼哧,2小时过去了。。。出来一份数据,结果,错误!❌ 👋
交给PM,PM半夜跟我沟通,表示数据不可信,此时我已两眼昏花🙅,。询问今晚就要吗? PM表示越快越好,PM的嘴🔪
实在太晚,眼中全是血丝,遂沟通第二天上班前给他。
------------------------我是休息♨️😴分割线 -------------------
翌日清晨早起,脑袋清醒了,重新理了下思路,重写了下脚本。于是开跑,眼看到10点上班,3份数据,就跑了2份,另一份数据就是跑不完。
遂先将2份给PM,沟通这一份可能要很久。一共 4706 * 20 次,近10W次。 冷静预估了下,1/6s一次,也要 4.3+ 小时,🐸
估算了一下时间后,跟PM沟通,调整了下条件限制,4706 * 3 次,预计 40 ~ 50分钟左右。
最终在完全不动电脑处理任何其他工作的情况下,跑了将近 30分钟。
终于可以交付了。😭
收获总结
终于吃上猪肉了!
名为拉数据,但开发的思路与其他需求形式是类似的。
- 接需求需谨慎,需求对清楚,用途和目的是什么(有时沟通下,可能会发现,PM的诉求可以有简单解法)
- 时间预估准确 (提前预估下PM要的时间节点,估算下跑数据需要的时间,可以适当沟通调整边界条件)
遇事莫方,多求帮助。⛽️