V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhengfan2016
V2EX  ›  问与答

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

  •  
  •   zhengfan2016 · 2021-07-02 09:52:15 +08:00 · 3590 次点击
    这是一个创建于 1247 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    13 条回复    2021-07-03 17:34:34 +08:00
    sunjiayao
        1
    sunjiayao  
       2021-07-02 10:20:07 +08:00   ❤️ 1
    可以弄条动态 sql 吧第一个和第二个循环都搞定

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

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

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

    为订单找打印机也不用循环去找,因为订单类型和打印机类型是固定数量的,可以预先定义一个 map,存放指定订单类型对应的打印机。
    Leviathann
        9
    Leviathann  
       2021-07-02 11:57:40 +08:00 via iPhone   ❤️ 1
    就 filter map foreach ?
    还是我理解错了
    cpstar
        10
    cpstar  
       2021-07-02 12:04:31 +08:00   ❤️ 1
    又不是 10*10*10——O(n^3),仅是 O(n)而已,无所谓的
    jellybool
        11
    jellybool  
       2021-07-02 12:54:13 +08:00   ❤️ 1
    filter in each?
    yehoshua
        12
    yehoshua  
       2021-07-02 12:58:53 +08:00 via Android   ❤️ 1
    这样就可以了,看需求并不是多大数据量处理。无论如何都要遍历一遍的。
    还不如从其他方面考虑,比如给每个订单加个打印标识符之类的,每次遍历一遍就可以了。
    zhengfan2016
        13
    zhengfan2016  
    OP
       2021-07-03 17:34:34 +08:00
    @jmc891205 没,一天 100 多订单,但是领导觉得有必要😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 187ms · UTC 04:10 · PVG 12:10 · LAX 20:10 · JFK 23:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.