当前位置: 首页 > news >正文

人才招聘网站开发怎么做线上推广

人才招聘网站开发,怎么做线上推广,杭州餐饮团购网站建设,惠州最专业的网站建设公司iOS App卡顿监控(Freezing/Lag) 笔记(写在前面): 关于应用的性能监控,需要从多方面进行综合考虑,此处仅从其中一个方面,进行学习研究。 如何判断主线程卡顿: 监测NSRunLoop耗时情况。 NSRunLoop的调用主要在kCFRunLoop…

iOS App卡顿监控(Freezing/Lag)

笔记(写在前面):
关于应用的性能监控,需要从多方面进行综合考虑,此处仅从其中一个方面,进行学习研究。

如何判断主线程卡顿:

监测NSRunLoop耗时情况。

NSRunLoop的调用主要在kCFRunLoopBeforeSourceskCFRunLoopBeforeWaiting之间,以及kCFRunLoopAfterWaiting之后。因此,若是发现这个两个时间内耗时过长,就可以判定此时主线程出现卡顿情况。

一、监控NSRunLoop状态变化

使用CFRunLoopObserverRef,实时获得这些状态值的变化,如下:

/// RunLoop状态观察回调
static void runLoopObserverCallBack(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info)
{<#MyClass#> *object = (__bridge <#MyClass#>*)info;// 记录状态值object->activity = activity;
}
/// 注册RunLoop状态观察
- (void)registerRunLoopObserver {CFRunLoopObserverContext context = {0,(__bridge void*)self,NULL,NULL};CFRunLoopObserverRef observer = CFRunLoopObserverCreate(kCFAllocatorDefault,kCFRunLoopAllActivities,YES,0,&runLoopObserverCallBack,&context);CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);
}

二、RunLoop耗时计算

另外开启一个线程,实时计算两个状态区域之间的耗时,是否达到阈值。

dispatch_semaphore_t让子线程更及时地获知主线程NSRunLoop状态变化

卡顿覆盖范围:多次连续小卡顿单次长时间卡顿

添加计算逻辑,如下:

/// RunLoop状态观察回调
static void runLoopObserverCallBack(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void *info)
{<#MyClass#> *object = (__bridge <#MyClass#>*)info;// 记录状态值object->activity = activity;// 发送信号dispatch_semaphore_t semaphore = object->semaphore;dispatch_semaphore_signal(semaphore);
}
/// 注册RunLoop状态观察,并计算是否卡顿
- (void) registerRunLoopObserver {CFRunLoopObserverContext context = {0,(__bridge void*)self,NULL,NULL};CFRunLoopObserverRef observer = CFRunLoopObserverCreate(kCFAllocatorDefault,kCFRunLoopAllActivities,YES,0,&runLoopObserverCallBack,&context);CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);// 创建信号semaphore = dispatch_semaphore_create(0);// 在子线程监控时长dispatch_async(dispatch_get_global_queue(0, 0), ^{while (YES) {// 假定连续5次超时50ms认为卡顿(当然也包含了单次超时250ms)long st = dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, 50*NSEC_PER_MSEC));if (st != 0) {if (activity==kCFRunLoopBeforeSources || activity==kCFRunLoopAfterWaiting) {if (++timeoutCount < 5) {continue;}// 发现卡顿NSLog(@"卡、卡、卡、顿、顿、了");}}timeoutCount = 0;}});
}

三、记录卡顿的函数调用

目击卡顿现场,记录此时的调用函数信息,作为卡顿证据。

此处,使用第三方Crash收集组件PLCrashReporter,它不仅可以收集Crash信息,也可用于实时获取各线程的调用堆栈,使用示例如下:

PLCrashReporterConfig *config = [[PLCrashReporterConfig alloc] initWithSignalHandlerType:PLCrashReporterSignalHandlerTypeBSDsymbolicationStrategy:PLCrashReporterSymbolicationStrategyAll];
PLCrashReporter *crashReporter = [[PLCrashReporter alloc] initWithConfiguration:config];
NSData *data = [crashReporter generateLiveReport];
PLCrashReport *reporter = [[PLCrashReport alloc] initWithData:data error:NULL];
NSString *report = [PLCrashReportTextFormatter stringValueForCrashReport:reporterwithTextFormat:PLCrashReportTextFormatiOS];
NSLog(@"------------\n%@\n------------", report);

特别注意:

PLCrashReporter虽然能提供较为准确的堆栈信息,用于定位问题,特别是使用符号化策略PLCrashReporterSymbolicationStrategyAll时,能够对堆栈信息进行符号化,但会消耗大量资源,需要占用较多时间,导致卡死现象(自测时,耗时超过7s,层多次到10s以上)。

不使用符号化策略PLCrashReporterSymbolicationStrategyNone,测试时,平均耗时也接近3s。

因此,加入该信息采集,需要特别注意,建议仅在开发调试阶段使用。

为了投入线上使用,还需要再想想如何解决该问题。

四、上报服务器

检测到卡顿,获取到调用堆栈信息,客户端再根据实际情况进行一定程度的过滤处理,将有价值的信息上报服务器。

后续对服务器收集到的数据进行分析,定位需要优化的功能逻辑。

http://www.lbrq.cn/news/2466991.html

相关文章:

  • 做响应式网站对设计图的要求长春网站制作设计
  • 做漫画在线观看网站seo软件工具箱
  • 浙江省建设银行网站首页地推网
  • 旅游网站前端建设毕业论文搜索引擎优化网站排名
  • 中企动力是什么公司荆州网站seo
  • 网站播放大视频如何做今日国际重大新闻事件
  • 十大导航软件网络舆情优化公司
  • 自己建设网站用哪个全网搜索软件下载
  • 免费自助建站网站seo诊断技巧
  • 自己建设网站步骤百度app下载安装 官方
  • 邢台移动网站建设费用自己怎么优化网站
  • 电子商务公司设计网站建设惠州seo网站管理
  • 如何建议一个网站竞价排名点击器
  • seo是东莞企业网站排seo河南网站建设报价
  • wordpress做小说网站吗搜索引擎主要包括三个部分
  • 网站建设怎样上传程序长春刚刚最新消息今天
  • 哈尔滨站建站时间朔州seo
  • 手机移动网站模板百度app安装免费下载
  • 网站建设渠道网站seo优化网站
  • 舟山网站建设推荐网站制作企业
  • 桂林北站改造优化师培训
  • 网站建设公司 优势百度网页链接
  • 网站建设 职位如皋网站制作
  • 南昌旅游网站建设方案手机怎么建自己的网站
  • h5做网站什么软件头条新闻最新消息
  • 汽车网站策划西安网站seo技术
  • 同性做视频网站网站功能开发
  • 江苏网站建设价格全渠道营销
  • 河南省建设工程一体化平台哈尔滨网络seo公司
  • 哪个网站做批发的新站整站快速排名
  • 初探HashMap中的HashCode方法
  • 门店管理智能体,为连锁运营开出健康“处方” 智睿视界
  • 100条常用SQL语句大全
  • Leetcode 07 java
  • Windows 10 远程桌面(RDP)防暴力破解脚本
  • Qt基本控件使用:按钮、标签、文本框等