求助大佬们,萌新公司写了三层 for 循环,如何优化

2021-07-02 09:52:15 +08:00
 zhengfan2016

如题,我感觉也就第二层数据库查询可以优化下,第三层的打印 api 是易联云,貌似只能一次打印一个。

3494 次点击
所在节点    问与答
13 条回复
sunjiayao
2021-07-02 10:20:07 +08:00
可以弄条动态 sql 吧第一个和第二个循环都搞定

说着玩的。代码有时候繁琐点没啥问题,对逻辑梳理有帮助。如果出现性能问题想要优化就得看具体啥场景了
JKeita
2021-07-02 10:21:16 +08:00
感觉没啥可优化的,还不如这样代码可读性强点。
chenluo0429
2021-07-02 10:32:23 +08:00
第一个没啥优化的,你本来就需要遍历时间和订单的。打印机可以用资源占用的形式去考虑,每次从可用列表里面 pop 一个来使用,使用完 push 回去,而不是每次去搜索可用的。
zhengfan2016
2021-07-02 10:51:33 +08:00
@chenluo0429 打印机是外卖小票的那种,不需要考虑占用问题,主要是下发订单给厨房的人。比如有人点了一个汉堡套餐,有一杯可乐,一个汉堡,一份薯条。那么就会给做汉堡的人,炸薯条的人,做饮料的人的打印机 分别打印这个订单,做汉堡的人得到需要做一个牛肉汉堡的需求,炸薯条的人得知需要炸一份中薯条,以此类推😂
jmc891205
2021-07-02 11:09:32 +08:00
提问,待查询的数据量有大到让你遇到性能瓶颈了吗?
MaMimi
2021-07-02 11:11:39 +08:00
我做法是先循环存 map, 然后取值, 不知道这样是否合适?
ChoateYao
2021-07-02 11:15:09 +08:00
嵌套循环,变成 3 个循环,代码层面只能这么优化。
finab
2021-07-02 11:23:23 +08:00
不要嵌套循环,分成多步
第一步,过滤,一层循环

第二步, 将过滤后的订单拼装查询参数,批量查询订单详情, 一层循环

第三步 ,循环订单,找到合适的打印机,打印订单,一层循环

为订单找打印机也不用循环去找,因为订单类型和打印机类型是固定数量的,可以预先定义一个 map,存放指定订单类型对应的打印机。
Leviathann
2021-07-02 11:57:40 +08:00
就 filter map foreach ?
还是我理解错了
cpstar
2021-07-02 12:04:31 +08:00
又不是 10*10*10——O(n^3),仅是 O(n)而已,无所谓的
jellybool
2021-07-02 12:54:13 +08:00
filter in each?
yehoshua
2021-07-02 12:58:53 +08:00
这样就可以了,看需求并不是多大数据量处理。无论如何都要遍历一遍的。
还不如从其他方面考虑,比如给每个订单加个打印标识符之类的,每次遍历一遍就可以了。
zhengfan2016
2021-07-03 17:34:34 +08:00
@jmc891205 没,一天 100 多订单,但是领导觉得有必要😂

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

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

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

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

© 2021 V2EX