iOS 使用MQTT做弹幕功能性能优化问题_IOS_编程问答

iOS 使用MQTT做弹幕功能性能优化问题

来源:互联网  时间:2018/1/25 13:31:24

关于网友提出的“ iOS 使用MQTT做弹幕功能性能优化问题”问题疑问,本网通过在网上对“ iOS 使用MQTT做弹幕功能性能优化问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: iOS 使用MQTT做弹幕功能性能优化问题
描述:

由于没有做数据过滤,所以App会收到大量数据,造成app 页面卡死,数据大概每秒300个数据左右,现在感觉下来的数据用ObjectMapper 转model 消耗很大,还有就是我去操作tableView的时候也很大,所以请大家给提些建议优化下,感谢!!!
代码如下:

    //处理服务端返回的弹幕消息
    func handleMessage(_ data: Data!) {
        let json = JSON(data)
        if json["userName"].string != nil && json["message"].string != nil {

                if let d = json.dictionaryObject {
                    if let entity = Mapper<DTDanmuMessageEntity>().map(JSON: d) {
                        self.tableView?.addNewDanmu(entity)
                        self.danmu_List.append(entity)
       
                    }
                }
        }
    }
    
    
    
    
     func addNewDanmu(_ danmu: [DTDanmuMessageEntity])  {
        
        self.danmu += danmu
        let indexPath = NSIndexPath(row: self.danmu.count - 1, section: 0)
         self.beginUpdates()
        self.insertRows(at: [indexPath as IndexPath], with: .bottom)
        self.endUpdates()
        

        
        if self.contentSize.height < self.frame.size.height {
            return
        }
        //滚动到最底部
        self.scrollToRow(at: indexPath as IndexPath, at: .bottom, animated: true)
        
      
      
        }

解决方案1:

1.字典转模型确保放在子线程
2.弹幕的处理可以参考OCBarrage

可以研究下他是怎么处理的
3.如果还有性能问题,你就应该先找的性能的瓶颈在哪里,然后再想解决的办法。

解决方案2:

  1. 模型转换等等的数据处理都放到副线程去,self.tableView?.addNewDanmu(entity)我看你这没切线程,应该都是在主线程搞的。
  2. 没做过弹幕的功能,但觉得用tableView并不是一个好的选择,一个cell的更新会牵扯到其他的cell的位移。弹幕在竖直方向每行是独立的,每行里每个弹幕也是独立的,可以直接单个单个view的控制,给每个弹幕view标记速度,然后用计时器或者DisplayLink刷新位置。每个弹幕可以循环使用,离开屏幕进入一个缓冲池,消耗的内存也就是当前显示的那些而已。

上一篇提交App Store的时候报错javalangreflectInvocationTargetException
下一篇Mac中用which python查询python位置时,如何能让系统首先查找的是自己安装的位置?
明星图片
相关文章
《 iOS 使用MQTT做弹幕功能性能优化问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)