[Swift]xclogparser性能优化记录

660 阅读4分钟

背景

  • 使用xclogparser解析大型工程的xcactivitylog速度过慢耗时,达到分钟级别。经过一系列优化在linux上解析时间减少60%左右。mac上解析时间减少50%左右。另外还增加了utf-8中文支持。代码仓库xclogparser

性能瓶颈和解决方式

使用instrument time profile来查找瓶颈后发现主要有以下几个瓶颈

耗时的常量初始化多次代码如下

let hexChars = "abcdef0123456789"
while scanner.scanCharacters(from: CharacterSet(charactersIn: hexChars), into: &char)

改成初始化一次

收益解析时间减少15%左右

Scanner检索string token速度太慢

在词法分析的过程中,xclogparser使用Scanner这个类来解析string token。 其中这个方法在while中频繁调用总耗时很高

while scanner.scanCharacters(from: charSet, into: &char)

解决方法是使用OC和Swfit(给linux用)重写这个方法。

收益解析时间减少15%左右

apple的json序列化速度encode速度比较慢

更换三方库swift-extras-json

收益解析时间减少8%左右,损失了一些浮点数精度,0.0和0的区别。影响不大

while循环消息转发相对耗时较多

还是这个方法

while scanner.scanCharacters(from: CharacterSet(charactersIn: hexChars), into: &char)

使用IMP直接调用减少消息转发时间

收益解析时间减少4%左右

其他优化

给所有类的成员变量和方法尽可能的设置成final类,设置成final后编译器会优化成直接通过地址调用函数。否则是通过vtable动态调用。

收益1%~2% 也可能是误差

其他

在查找瓶颈的过程中发现从swift Substring创建一个String的时候会有一个copy过程。占总运行时间的12%左右。并且该过程可以放到子线程中执行,尝试使用CGD和SwiftNIO放到子线程。结果反而变得更慢了。

关于App-Infra DevOps 团队

App-Infra DevOps团队作为公司的移动研发中台,致力于优化公司各业务的研发和交付过程中的质量、成本、安全、效率和体验。到目前为止我们已经有超过上百个业务接入,1万+人日常使用;平均每天支撑 3000+研发任务顺利交付;建设了业界领先且可能是国内最大的构建集群,每天运行20万+次构建任务。

我们期待更多有热情和创造力的同学加入字节跳动,为字节打造业界最领先,最高效的生产工具。

我们的工作内容主要包括:

  • 提供任务管理,工程管理,开发调试,交付流程支持的一站式同开发平台。同时提供Native版及Web版,目标成为下一代端云协同的研发基础设施。
  • 客户端 IDE 云化的探索性项目,目的是提供一整套线上编码、调试环境,让用户打开浏览器就可以进行代码开发,满足不同场景的需要,提升研发效率。

加入我们

北京-高级iOS开发工程师 — 终端技术 job.toutiao.com/s/2YHxkXW

职位描述

1、负责公司产品的通用技术研发和性能优化,完成高质量编码和测试工作 2、框架维护,通用工具开发等 3、设计良好的代码结构,不断迭代重构; 4、前沿技术研究,承担重点、难点的技术攻坚

职位要求

1、本科及以上学历,计算机、通信等相关专业 2、具有扎实的编程功底,良好的设计能力和编程习惯 3、熟练掌握Objective-C,C++,熟悉Swift的优先 4、熟悉bash/python/ruby/js的优先

上海-高级iOS开发工程师 — 基础技术 job.toutiao.com/s/2YHm8a7

职位描述

  1. 负责公司客户端产品的通用基础技术研发,完成高质量编码和测试工作
  2. 通用研发工具开发、通用框架开发等
  3. 设计良好的代码结构,不断迭代重构
  4. 前沿技术研究,承担重点、难点的技术攻坚

职位要求

  1. 本科及以上学历,计算机、通信等相关专业
  2. 具有扎实的编程功底,良好的设计能力和编程习惯
  3. 熟练掌握Objective-C,C++,熟悉Swift的优先
  4. 熟悉前后端相关和跨平台技术、熟悉bash/python/ruby/js等语言和相关框架的优先

杭州-高级iOS开发工程师 — 基础技术 job.toutiao.com/s/2YHdPAE

职位描述

  1. 负责公司跨平台相关技术研发,完成高质量编码和测试工作
  2. 负责通用跨端框架及周边工具开发等
  3. 设计良好的代码结构,不断迭代重构
  4. 前沿技术研究,承担重点、难点的技术攻坚

职位要求

  1. 本科及以上学历,计算机、通信等相关专业
  2. 具有扎实的编程功底,良好的设计能力和编程习惯
  3. 熟练掌握Objective-C,C++,熟悉Swift的优先
  4. 熟悉前后端相关和跨平台技术,熟悉bash/python/ruby/js等语言和相关框架的优先