type
Post
status
Published
date
Aug 27, 2025
slug
perftiming
summary
代码分析:分析项目代码中的性能记录模块的运作方式
tags
思考
技术
category
知识搬运
icon
password
fullWidth

TPerfEntry接口

所有的记录分成两类:markmeasure,都具有方法名Name、调用栈路径Path和时间戳Timestamp
  • IPerfMarkEntry具有是否为临时创建的属性IsTemp
  • IPerfMeasureEntry具有方法占用时长属性Duration

PerfRecorder类

PerfRecorder是一个性能记录器,用于测量代码执行时间,代码易懂就不再赘述:

perfTiming属性装饰器

🐈‍⬛
PropertyDescriptor是JavaScript/TypeScript中的一个内置接口,用于描述和操作对象属性的特性:
在TypeScript中,方法装饰器的参数是固定的格式(方法所属的类的原型对象、方法名和方法的属性描述符),可以在官方文档中找到:
关于TypeScript装饰器的知识,可以参考:
perfTiming是一个方法装饰器,自动为类方法添加性能监控:

CallerLocation获取调用位置

创建一个错误对象Error,利用JavaScript堆栈追踪机制得到错误堆栈,传入的stackIndex要加1,因为getCallerLocation为异常发生堆栈,要略过:
EndMeasure()里调用Measure(),调用栈深度callbackDepth默认为2,因为:
而在装饰器函数中调用EndMeasure(),调用栈深度callbackDepth应该改为3,因为:
 
【TypeScript】基于抽象语法树的自定义代码检查实现方案【TypeScript】浅析TypeScript中的装饰器(旧语法)
Loading...