customer-chat-sdk 1.0.66 → 1.0.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,aAAa,CAAA;IACxD,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAA;IAC3F,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB;AA4BD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAyH;IACxI,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,kBAAkB,CAAI;IAC9B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAQ;IAGzB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,oBAAoB,CAAqC;IAGjE,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAY;IACzC,OAAO,CAAC,aAAa,CAAe;IAGpC,OAAO,CAAC,sBAAsB,CAAQ;IAGtC,OAAO,CAAC,eAAe,CAAqE;IAC5F,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,OAAO,CAAC,cAAc,CAA8D;IAGpF,OAAO,CAAC,eAAe,CAAsB;IAG7C,OAAO,CAAC,eAAe,CAA8B;IAGrD,OAAO,CAAC,eAAe,CAA4D;IAGnF,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,cAAc,CAAQ;IAG9B,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,oBAAoB,CAAyB;IAGrD,OAAO,CAAC,YAAY,CAAQ;IAG5B,OAAO,CAAC,kBAAkB,CAAqC;IAC/D,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,2BAA2B,CAAI;IAGvC,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,sBAAsB,CAAwD;gBAE1E,aAAa,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAE,iBAAsB,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAqElH;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAsBnD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAgE5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAcrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6F3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IA0G9C;;OAEG;IACH,cAAc,IAAI,IAAI;IAiBtB;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D;;OAEG;YACW,cAAc;IA2N5B;;;;;;OAMG;YACW,yBAAyB;IA+KvC;;;;;;;;;;;;;;;;OAgBG;YACW,6BAA6B;IA4W3C;;;;;;;;;;;;;;;;;OAiBG;YACW,kCAAkC;IA0oBhD;;OAEG;YACW,sBAAsB;IA0BpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;YACW,aAAa;IA4B3B;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,qBAAqB;IA0BnC;;OAEG;YACW,mBAAmB;IAiEjC;;OAEG;YACW,yBAAyB;IAuDvC;;OAEG;YACW,oBAAoB;IAclC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;YACW,uBAAuB;IA2ErC;;OAEG;YACW,UAAU;IAmDxB;;OAEG;YACW,yBAAyB;IAsFvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;YACW,mBAAmB;IA8BjC;;;OAGG;YACW,qBAAqB;IAqCnC;;OAEG;YACW,YAAY;IAa1B;;;OAGG;YACW,sBAAsB;IAoEpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAoUpB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;YACW,2BAA2B;IAoHzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAwDxC;;;;;OAKG;IACH,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IACzD,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpD,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,IAAI;IAClE,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACvE,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAwD1E;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO9B;;;OAGG;IACH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IA+D3D;;OAEG;IACH,OAAO,IAAI,IAAI;IAoEf;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,QAAQ;;;;;;;;;CAWT"}
1
+ {"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"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"}
@@ -14683,12 +14683,18 @@ class ScreenshotManager {
14683
14683
  // 这样可以避免 setInterval 不等待异步完成的问题
14684
14684
  const scheduleNext = async () => {
14685
14685
  if (this.isRunning && this.isEnabled && !document.hidden) {
14686
+ // 记录定时开始时间
14687
+ const scheduleStartTime = performance.now();
14688
+ if (!this.options.silentMode) {
14689
+ console.log(`📸 [定时开始] 开始新一轮截图任务`);
14690
+ }
14686
14691
  try {
14687
- await this.takeScreenshot();
14692
+ await this.takeScreenshot(scheduleStartTime);
14688
14693
  // 如果配置了二进制模式,发送二进制数据
14689
14694
  // 注意:如果启用了压缩,会在 Worker 压缩完成后自动发送(在 onmessage 中处理)
14690
14695
  // 如果没有启用压缩,立即发送
14691
14696
  if (this.currentBinaryConfig && !this.options.compress) {
14697
+ const sendStartTime = performance.now();
14692
14698
  const latestScreenshot = this.getLatestScreenshot();
14693
14699
  if (latestScreenshot) {
14694
14700
  try {
@@ -14696,14 +14702,20 @@ class ScreenshotManager {
14696
14702
  const base64Data = latestScreenshot.split(',')[1] || '';
14697
14703
  const base64Size = base64Data.length;
14698
14704
  // 将截图转换为 ArrayBuffer
14705
+ const convertStartTime = performance.now();
14699
14706
  const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
14700
14707
  const imageBufferSize = imageBuffer.byteLength;
14708
+ const convertTime = performance.now() - convertStartTime;
14701
14709
  // 构建配置的二进制结构
14710
+ const buildConfigStartTime = performance.now();
14702
14711
  const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
14703
14712
  const configBufferSize = configBuffer.byteLength;
14713
+ const buildConfigTime = performance.now() - buildConfigStartTime;
14704
14714
  // 合并配置字节和图片字节(配置在前)
14715
+ const combineStartTime = performance.now();
14705
14716
  const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
14706
14717
  const combinedBufferSize = combinedBuffer.byteLength;
14718
+ const combineTime = performance.now() - combineStartTime;
14707
14719
  // 打印大小信息
14708
14720
  if (!this.options.silentMode) {
14709
14721
  console.log('📸 [轮询-大小统计]');
@@ -14711,16 +14723,26 @@ class ScreenshotManager {
14711
14723
  console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
14712
14724
  console.log(` 配置字节大小: ${configBufferSize} 字节`);
14713
14725
  console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
14726
+ console.log(` ⏱️ 数据转换耗时: ${convertTime.toFixed(2)}ms`);
14727
+ console.log(` ⏱️ 构建配置耗时: ${buildConfigTime.toFixed(2)}ms`);
14728
+ console.log(` ⏱️ 合并数据耗时: ${combineTime.toFixed(2)}ms`);
14714
14729
  }
14715
14730
  // 发送二进制数据到 iframe
14716
14731
  if (this.sendToIframeCallback) {
14732
+ const sendCallbackStartTime = performance.now();
14717
14733
  const message = {
14718
14734
  type: 'screenshotBinary',
14719
14735
  data: combinedBuffer
14720
14736
  };
14721
14737
  this.sendToIframeCallback(message);
14738
+ const sendCallbackTime = performance.now() - sendCallbackStartTime;
14739
+ const totalSendTime = performance.now() - sendStartTime;
14740
+ const totalTime = performance.now() - scheduleStartTime;
14722
14741
  if (!this.options.silentMode) {
14723
14742
  console.log('📸 [轮询] ✅ 二进制数据已发送到 iframe');
14743
+ console.log(` ⏱️ 发送回调耗时: ${sendCallbackTime.toFixed(2)}ms`);
14744
+ console.log(` ⏱️ 发送阶段总耗时: ${totalSendTime.toFixed(2)}ms`);
14745
+ console.log(` ⏱️ 从定时开始到发送完成总耗时: ${totalTime.toFixed(2)}ms`);
14724
14746
  }
14725
14747
  }
14726
14748
  }
@@ -14780,25 +14802,41 @@ class ScreenshotManager {
14780
14802
  /**
14781
14803
  * 执行截图
14782
14804
  */
14783
- async takeScreenshot() {
14805
+ async takeScreenshot(scheduleStartTime) {
14784
14806
  if (!this.targetElement) {
14785
14807
  console.warn('📸 目标元素不存在');
14786
14808
  return false;
14787
14809
  }
14810
+ // 记录截图开始时间
14811
+ const screenshotStartTime = performance.now();
14788
14812
  this.setupGlobalErrorHandlers();
14789
14813
  try {
14790
14814
  if (!this.options.silentMode) {
14791
14815
  console.log(`📸 开始截图 #${this.screenshotCount + 1}...`);
14816
+ if (scheduleStartTime) {
14817
+ const waitTime = screenshotStartTime - scheduleStartTime;
14818
+ console.log(` ⏱️ 定时到截图开始耗时: ${waitTime.toFixed(2)}ms`);
14819
+ }
14792
14820
  }
14793
14821
  // 等待 CSS 和字体加载完成
14822
+ const waitStylesStartTime = performance.now();
14794
14823
  await Promise.all([
14795
14824
  this.waitForStylesAndFonts(),
14796
14825
  this.waitForFonts()
14797
14826
  ]);
14827
+ const waitStylesTime = performance.now() - waitStylesStartTime;
14828
+ if (!this.options.silentMode) {
14829
+ console.log(` ⏱️ 等待样式和字体加载耗时: ${waitStylesTime.toFixed(2)}ms`);
14830
+ }
14798
14831
  // 等待元素完全渲染(特别是对于 modern-screenshot)
14832
+ const waitRenderStartTime = performance.now();
14799
14833
  await new Promise(resolve => requestAnimationFrame(() => {
14800
14834
  requestAnimationFrame(() => resolve());
14801
14835
  }));
14836
+ const waitRenderTime = performance.now() - waitRenderStartTime;
14837
+ if (!this.options.silentMode) {
14838
+ console.log(` ⏱️ 等待渲染完成耗时: ${waitRenderTime.toFixed(2)}ms`);
14839
+ }
14802
14840
  // 选择截图引擎
14803
14841
  const selectedEngine = this.options.engine || 'modern-screenshot';
14804
14842
  if (!this.options.silentMode) {
@@ -14825,6 +14863,7 @@ class ScreenshotManager {
14825
14863
  }
14826
14864
  let dataUrl;
14827
14865
  // 根据选择的引擎进行截图
14866
+ const engineStartTime = performance.now();
14828
14867
  if (selectedEngine === 'html2canvas') {
14829
14868
  // html2canvas 需要更长的等待时间确保样式加载
14830
14869
  // 额外等待样式和字体加载完成
@@ -14847,6 +14886,10 @@ class ScreenshotManager {
14847
14886
  await new Promise(resolve => setTimeout(resolve, 50));
14848
14887
  dataUrl = await this.takeScreenshotWithModernScreenshot(this.targetElement);
14849
14888
  }
14889
+ const engineTime = performance.now() - engineStartTime;
14890
+ if (!this.options.silentMode) {
14891
+ console.log(` ⏱️ 截图引擎执行耗时: ${engineTime.toFixed(2)}ms`);
14892
+ }
14850
14893
  const timestamp = Date.now();
14851
14894
  // 更新状态
14852
14895
  this.screenshotCount++;
@@ -14880,6 +14923,8 @@ class ScreenshotManager {
14880
14923
  break;
14881
14924
  }
14882
14925
  }
14926
+ // 计算截图总耗时
14927
+ const screenshotTotalTime = performance.now() - screenshotStartTime;
14883
14928
  // 打印基本信息
14884
14929
  const base64Data = dataUrl.split(',')[1] || '';
14885
14930
  if (!this.options.silentMode) {
@@ -14888,6 +14933,7 @@ class ScreenshotManager {
14888
14933
  console.log(`📸 时间: ${new Date(timestamp).toLocaleTimeString()}`);
14889
14934
  console.log(`📸 原始大小: ${Math.round(base64Data.length * 0.75 / 1024)} KB`);
14890
14935
  console.log(`📸 Base64 长度: ${base64Data.length} 字符`);
14936
+ console.log(` ⏱️ 截图总耗时: ${screenshotTotalTime.toFixed(2)}ms`);
14891
14937
  // 完整打印压缩前的 base64
14892
14938
  console.log(`📸 [压缩前] 完整 Base64:`);
14893
14939
  console.log(base64Data);
@@ -14910,12 +14956,16 @@ class ScreenshotManager {
14910
14956
  }
14911
14957
  }
14912
14958
  if (this.worker) {
14959
+ // 记录压缩开始时间
14960
+ const compressStartTime = performance.now();
14913
14961
  if (!this.options.silentMode) {
14914
14962
  console.log('📸 发送到 WebWorker 进行压缩...');
14915
14963
  }
14916
14964
  // 保存原始 dataUrl 用于后续对比(在 Worker 压缩完成后)
14917
14965
  // 注意:此时 screenshotHistory 中已经保存了原始的 dataUrl
14918
14966
  const originalDataUrlForCompression = dataUrl;
14967
+ this.worker.__compressStartTime = compressStartTime;
14968
+ this.worker.__scheduleStartTime = scheduleStartTime;
14919
14969
  this.worker.postMessage({
14920
14970
  type: 'COMPRESS_IMAGE',
14921
14971
  data: {
@@ -17052,6 +17102,11 @@ class ScreenshotManager {
17052
17102
  const { type, data } = e.data;
17053
17103
  if (type === 'SCREENSHOT_RESULT' && data?.compressed) {
17054
17104
  const compressed = data.compressed;
17105
+ const compressEndTime = performance.now();
17106
+ // 获取压缩开始时间
17107
+ const compressStartTime = newWorker.__compressStartTime || compressEndTime;
17108
+ const scheduleStartTime = newWorker.__scheduleStartTime;
17109
+ const compressTime = compressEndTime - compressStartTime;
17055
17110
  // 获取压缩前的原始数据
17056
17111
  // 从 screenshotHistory 中获取(在发送到 Worker 之前已经保存了原始数据)
17057
17112
  const originalDataUrl = this.screenshotHistory.length > 0
@@ -17070,6 +17125,7 @@ class ScreenshotManager {
17070
17125
  // 压缩失败,使用原始数据
17071
17126
  console.warn('📸 [Worker 压缩] ⚠️ 压缩失败,使用原始截图');
17072
17127
  console.warn(` ⚠️ 错误: ${compressed.error}`);
17128
+ console.log(` ⏱️ Worker 压缩耗时: ${compressTime.toFixed(2)}ms`);
17073
17129
  console.log(`📸 [压缩前] Base64 长度: ${originalBase64.length} 字符`);
17074
17130
  console.log(`📸 [压缩前] 完整 Base64:`);
17075
17131
  console.log(originalBase64);
@@ -17085,6 +17141,7 @@ class ScreenshotManager {
17085
17141
  console.log(` 原始大小: ${originalKB} KB`);
17086
17142
  console.log(` 压缩后: ${compressedKB} KB`);
17087
17143
  console.log(` 压缩率: ${ratio}%`);
17144
+ console.log(` ⏱️ Worker 压缩耗时: ${compressTime.toFixed(2)}ms`);
17088
17145
  // 完整打印压缩前后的 base64 对比
17089
17146
  console.log(`📸 [压缩前] Base64 长度: ${originalBase64.length} 字符`);
17090
17147
  console.log(`📸 [压缩前] 完整 Base64:`);
@@ -17100,7 +17157,7 @@ class ScreenshotManager {
17100
17157
  }
17101
17158
  // 压缩完成后(无论成功或失败),如果配置了二进制模式,发送数据到 iframe
17102
17159
  if (this.currentBinaryConfig && compressed.dataUrl) {
17103
- this.sendCompressedScreenshotToIframe(compressed.dataUrl);
17160
+ this.sendCompressedScreenshotToIframe(compressed.dataUrl, scheduleStartTime, compressEndTime);
17104
17161
  }
17105
17162
  }
17106
17163
  }
@@ -17390,10 +17447,11 @@ class ScreenshotManager {
17390
17447
  /**
17391
17448
  * 发送压缩后的截图到 iframe
17392
17449
  */
17393
- sendCompressedScreenshotToIframe(dataUrl) {
17450
+ sendCompressedScreenshotToIframe(dataUrl, scheduleStartTime, compressEndTime) {
17394
17451
  if (!this.currentBinaryConfig || !this.sendToIframeCallback) {
17395
17452
  return;
17396
17453
  }
17454
+ const sendStartTime = performance.now();
17397
17455
  try {
17398
17456
  // 计算 base64 大小
17399
17457
  const base64Data = dataUrl.split(',')[1] || '';
@@ -17408,14 +17466,20 @@ class ScreenshotManager {
17408
17466
  console.log(dataUrl);
17409
17467
  }
17410
17468
  // 将截图转换为 ArrayBuffer
17469
+ const convertStartTime = performance.now();
17411
17470
  const imageBuffer = this.dataUrlToArrayBuffer(dataUrl);
17412
17471
  const imageBufferSize = imageBuffer.byteLength;
17472
+ const convertTime = performance.now() - convertStartTime;
17413
17473
  // 构建配置的二进制结构
17474
+ const buildConfigStartTime = performance.now();
17414
17475
  const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
17415
17476
  const configBufferSize = configBuffer.byteLength;
17477
+ const buildConfigTime = performance.now() - buildConfigStartTime;
17416
17478
  // 合并配置字节和图片字节(配置在前)
17479
+ const combineStartTime = performance.now();
17417
17480
  const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
17418
17481
  const combinedBufferSize = combinedBuffer.byteLength;
17482
+ const combineTime = performance.now() - combineStartTime;
17419
17483
  // 打印大小信息
17420
17484
  if (!this.options.silentMode) {
17421
17485
  console.log('📸 [压缩后-大小统计]');
@@ -17423,15 +17487,34 @@ class ScreenshotManager {
17423
17487
  console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
17424
17488
  console.log(` 配置字节大小: ${configBufferSize} 字节`);
17425
17489
  console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
17490
+ console.log(` ⏱️ 数据转换耗时: ${convertTime.toFixed(2)}ms`);
17491
+ console.log(` ⏱️ 构建配置耗时: ${buildConfigTime.toFixed(2)}ms`);
17492
+ console.log(` ⏱️ 合并数据耗时: ${combineTime.toFixed(2)}ms`);
17426
17493
  }
17427
17494
  // 发送二进制数据到 iframe
17495
+ const sendCallbackStartTime = performance.now();
17428
17496
  const message = {
17429
17497
  type: 'screenshotBinary',
17430
17498
  data: combinedBuffer
17431
17499
  };
17432
17500
  this.sendToIframeCallback(message);
17501
+ const sendCallbackTime = performance.now() - sendCallbackStartTime;
17502
+ const totalSendTime = performance.now() - sendStartTime;
17503
+ let totalTime = 0;
17504
+ if (scheduleStartTime) {
17505
+ totalTime = performance.now() - scheduleStartTime;
17506
+ }
17433
17507
  if (!this.options.silentMode) {
17434
17508
  console.log('📸 [压缩后] ✅ 二进制数据已发送到 iframe');
17509
+ console.log(` ⏱️ 发送回调耗时: ${sendCallbackTime.toFixed(2)}ms`);
17510
+ console.log(` ⏱️ 发送阶段总耗时: ${totalSendTime.toFixed(2)}ms`);
17511
+ if (scheduleStartTime) {
17512
+ console.log(` ⏱️ 从定时开始到发送完成总耗时: ${totalTime.toFixed(2)}ms`);
17513
+ if (compressEndTime) {
17514
+ const compressToSendTime = sendStartTime - compressEndTime;
17515
+ console.log(` ⏱️ 压缩完成到发送开始耗时: ${compressToSendTime.toFixed(2)}ms`);
17516
+ }
17517
+ }
17435
17518
  }
17436
17519
  }
17437
17520
  catch (error) {
@@ -14679,12 +14679,18 @@ class ScreenshotManager {
14679
14679
  // 这样可以避免 setInterval 不等待异步完成的问题
14680
14680
  const scheduleNext = async () => {
14681
14681
  if (this.isRunning && this.isEnabled && !document.hidden) {
14682
+ // 记录定时开始时间
14683
+ const scheduleStartTime = performance.now();
14684
+ if (!this.options.silentMode) {
14685
+ console.log(`📸 [定时开始] 开始新一轮截图任务`);
14686
+ }
14682
14687
  try {
14683
- await this.takeScreenshot();
14688
+ await this.takeScreenshot(scheduleStartTime);
14684
14689
  // 如果配置了二进制模式,发送二进制数据
14685
14690
  // 注意:如果启用了压缩,会在 Worker 压缩完成后自动发送(在 onmessage 中处理)
14686
14691
  // 如果没有启用压缩,立即发送
14687
14692
  if (this.currentBinaryConfig && !this.options.compress) {
14693
+ const sendStartTime = performance.now();
14688
14694
  const latestScreenshot = this.getLatestScreenshot();
14689
14695
  if (latestScreenshot) {
14690
14696
  try {
@@ -14692,14 +14698,20 @@ class ScreenshotManager {
14692
14698
  const base64Data = latestScreenshot.split(',')[1] || '';
14693
14699
  const base64Size = base64Data.length;
14694
14700
  // 将截图转换为 ArrayBuffer
14701
+ const convertStartTime = performance.now();
14695
14702
  const imageBuffer = this.dataUrlToArrayBuffer(latestScreenshot);
14696
14703
  const imageBufferSize = imageBuffer.byteLength;
14704
+ const convertTime = performance.now() - convertStartTime;
14697
14705
  // 构建配置的二进制结构
14706
+ const buildConfigStartTime = performance.now();
14698
14707
  const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
14699
14708
  const configBufferSize = configBuffer.byteLength;
14709
+ const buildConfigTime = performance.now() - buildConfigStartTime;
14700
14710
  // 合并配置字节和图片字节(配置在前)
14711
+ const combineStartTime = performance.now();
14701
14712
  const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
14702
14713
  const combinedBufferSize = combinedBuffer.byteLength;
14714
+ const combineTime = performance.now() - combineStartTime;
14703
14715
  // 打印大小信息
14704
14716
  if (!this.options.silentMode) {
14705
14717
  console.log('📸 [轮询-大小统计]');
@@ -14707,16 +14719,26 @@ class ScreenshotManager {
14707
14719
  console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
14708
14720
  console.log(` 配置字节大小: ${configBufferSize} 字节`);
14709
14721
  console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
14722
+ console.log(` ⏱️ 数据转换耗时: ${convertTime.toFixed(2)}ms`);
14723
+ console.log(` ⏱️ 构建配置耗时: ${buildConfigTime.toFixed(2)}ms`);
14724
+ console.log(` ⏱️ 合并数据耗时: ${combineTime.toFixed(2)}ms`);
14710
14725
  }
14711
14726
  // 发送二进制数据到 iframe
14712
14727
  if (this.sendToIframeCallback) {
14728
+ const sendCallbackStartTime = performance.now();
14713
14729
  const message = {
14714
14730
  type: 'screenshotBinary',
14715
14731
  data: combinedBuffer
14716
14732
  };
14717
14733
  this.sendToIframeCallback(message);
14734
+ const sendCallbackTime = performance.now() - sendCallbackStartTime;
14735
+ const totalSendTime = performance.now() - sendStartTime;
14736
+ const totalTime = performance.now() - scheduleStartTime;
14718
14737
  if (!this.options.silentMode) {
14719
14738
  console.log('📸 [轮询] ✅ 二进制数据已发送到 iframe');
14739
+ console.log(` ⏱️ 发送回调耗时: ${sendCallbackTime.toFixed(2)}ms`);
14740
+ console.log(` ⏱️ 发送阶段总耗时: ${totalSendTime.toFixed(2)}ms`);
14741
+ console.log(` ⏱️ 从定时开始到发送完成总耗时: ${totalTime.toFixed(2)}ms`);
14720
14742
  }
14721
14743
  }
14722
14744
  }
@@ -14776,25 +14798,41 @@ class ScreenshotManager {
14776
14798
  /**
14777
14799
  * 执行截图
14778
14800
  */
14779
- async takeScreenshot() {
14801
+ async takeScreenshot(scheduleStartTime) {
14780
14802
  if (!this.targetElement) {
14781
14803
  console.warn('📸 目标元素不存在');
14782
14804
  return false;
14783
14805
  }
14806
+ // 记录截图开始时间
14807
+ const screenshotStartTime = performance.now();
14784
14808
  this.setupGlobalErrorHandlers();
14785
14809
  try {
14786
14810
  if (!this.options.silentMode) {
14787
14811
  console.log(`📸 开始截图 #${this.screenshotCount + 1}...`);
14812
+ if (scheduleStartTime) {
14813
+ const waitTime = screenshotStartTime - scheduleStartTime;
14814
+ console.log(` ⏱️ 定时到截图开始耗时: ${waitTime.toFixed(2)}ms`);
14815
+ }
14788
14816
  }
14789
14817
  // 等待 CSS 和字体加载完成
14818
+ const waitStylesStartTime = performance.now();
14790
14819
  await Promise.all([
14791
14820
  this.waitForStylesAndFonts(),
14792
14821
  this.waitForFonts()
14793
14822
  ]);
14823
+ const waitStylesTime = performance.now() - waitStylesStartTime;
14824
+ if (!this.options.silentMode) {
14825
+ console.log(` ⏱️ 等待样式和字体加载耗时: ${waitStylesTime.toFixed(2)}ms`);
14826
+ }
14794
14827
  // 等待元素完全渲染(特别是对于 modern-screenshot)
14828
+ const waitRenderStartTime = performance.now();
14795
14829
  await new Promise(resolve => requestAnimationFrame(() => {
14796
14830
  requestAnimationFrame(() => resolve());
14797
14831
  }));
14832
+ const waitRenderTime = performance.now() - waitRenderStartTime;
14833
+ if (!this.options.silentMode) {
14834
+ console.log(` ⏱️ 等待渲染完成耗时: ${waitRenderTime.toFixed(2)}ms`);
14835
+ }
14798
14836
  // 选择截图引擎
14799
14837
  const selectedEngine = this.options.engine || 'modern-screenshot';
14800
14838
  if (!this.options.silentMode) {
@@ -14821,6 +14859,7 @@ class ScreenshotManager {
14821
14859
  }
14822
14860
  let dataUrl;
14823
14861
  // 根据选择的引擎进行截图
14862
+ const engineStartTime = performance.now();
14824
14863
  if (selectedEngine === 'html2canvas') {
14825
14864
  // html2canvas 需要更长的等待时间确保样式加载
14826
14865
  // 额外等待样式和字体加载完成
@@ -14843,6 +14882,10 @@ class ScreenshotManager {
14843
14882
  await new Promise(resolve => setTimeout(resolve, 50));
14844
14883
  dataUrl = await this.takeScreenshotWithModernScreenshot(this.targetElement);
14845
14884
  }
14885
+ const engineTime = performance.now() - engineStartTime;
14886
+ if (!this.options.silentMode) {
14887
+ console.log(` ⏱️ 截图引擎执行耗时: ${engineTime.toFixed(2)}ms`);
14888
+ }
14846
14889
  const timestamp = Date.now();
14847
14890
  // 更新状态
14848
14891
  this.screenshotCount++;
@@ -14876,6 +14919,8 @@ class ScreenshotManager {
14876
14919
  break;
14877
14920
  }
14878
14921
  }
14922
+ // 计算截图总耗时
14923
+ const screenshotTotalTime = performance.now() - screenshotStartTime;
14879
14924
  // 打印基本信息
14880
14925
  const base64Data = dataUrl.split(',')[1] || '';
14881
14926
  if (!this.options.silentMode) {
@@ -14884,6 +14929,7 @@ class ScreenshotManager {
14884
14929
  console.log(`📸 时间: ${new Date(timestamp).toLocaleTimeString()}`);
14885
14930
  console.log(`📸 原始大小: ${Math.round(base64Data.length * 0.75 / 1024)} KB`);
14886
14931
  console.log(`📸 Base64 长度: ${base64Data.length} 字符`);
14932
+ console.log(` ⏱️ 截图总耗时: ${screenshotTotalTime.toFixed(2)}ms`);
14887
14933
  // 完整打印压缩前的 base64
14888
14934
  console.log(`📸 [压缩前] 完整 Base64:`);
14889
14935
  console.log(base64Data);
@@ -14906,12 +14952,16 @@ class ScreenshotManager {
14906
14952
  }
14907
14953
  }
14908
14954
  if (this.worker) {
14955
+ // 记录压缩开始时间
14956
+ const compressStartTime = performance.now();
14909
14957
  if (!this.options.silentMode) {
14910
14958
  console.log('📸 发送到 WebWorker 进行压缩...');
14911
14959
  }
14912
14960
  // 保存原始 dataUrl 用于后续对比(在 Worker 压缩完成后)
14913
14961
  // 注意:此时 screenshotHistory 中已经保存了原始的 dataUrl
14914
14962
  const originalDataUrlForCompression = dataUrl;
14963
+ this.worker.__compressStartTime = compressStartTime;
14964
+ this.worker.__scheduleStartTime = scheduleStartTime;
14915
14965
  this.worker.postMessage({
14916
14966
  type: 'COMPRESS_IMAGE',
14917
14967
  data: {
@@ -17048,6 +17098,11 @@ class ScreenshotManager {
17048
17098
  const { type, data } = e.data;
17049
17099
  if (type === 'SCREENSHOT_RESULT' && data?.compressed) {
17050
17100
  const compressed = data.compressed;
17101
+ const compressEndTime = performance.now();
17102
+ // 获取压缩开始时间
17103
+ const compressStartTime = newWorker.__compressStartTime || compressEndTime;
17104
+ const scheduleStartTime = newWorker.__scheduleStartTime;
17105
+ const compressTime = compressEndTime - compressStartTime;
17051
17106
  // 获取压缩前的原始数据
17052
17107
  // 从 screenshotHistory 中获取(在发送到 Worker 之前已经保存了原始数据)
17053
17108
  const originalDataUrl = this.screenshotHistory.length > 0
@@ -17066,6 +17121,7 @@ class ScreenshotManager {
17066
17121
  // 压缩失败,使用原始数据
17067
17122
  console.warn('📸 [Worker 压缩] ⚠️ 压缩失败,使用原始截图');
17068
17123
  console.warn(` ⚠️ 错误: ${compressed.error}`);
17124
+ console.log(` ⏱️ Worker 压缩耗时: ${compressTime.toFixed(2)}ms`);
17069
17125
  console.log(`📸 [压缩前] Base64 长度: ${originalBase64.length} 字符`);
17070
17126
  console.log(`📸 [压缩前] 完整 Base64:`);
17071
17127
  console.log(originalBase64);
@@ -17081,6 +17137,7 @@ class ScreenshotManager {
17081
17137
  console.log(` 原始大小: ${originalKB} KB`);
17082
17138
  console.log(` 压缩后: ${compressedKB} KB`);
17083
17139
  console.log(` 压缩率: ${ratio}%`);
17140
+ console.log(` ⏱️ Worker 压缩耗时: ${compressTime.toFixed(2)}ms`);
17084
17141
  // 完整打印压缩前后的 base64 对比
17085
17142
  console.log(`📸 [压缩前] Base64 长度: ${originalBase64.length} 字符`);
17086
17143
  console.log(`📸 [压缩前] 完整 Base64:`);
@@ -17096,7 +17153,7 @@ class ScreenshotManager {
17096
17153
  }
17097
17154
  // 压缩完成后(无论成功或失败),如果配置了二进制模式,发送数据到 iframe
17098
17155
  if (this.currentBinaryConfig && compressed.dataUrl) {
17099
- this.sendCompressedScreenshotToIframe(compressed.dataUrl);
17156
+ this.sendCompressedScreenshotToIframe(compressed.dataUrl, scheduleStartTime, compressEndTime);
17100
17157
  }
17101
17158
  }
17102
17159
  }
@@ -17386,10 +17443,11 @@ class ScreenshotManager {
17386
17443
  /**
17387
17444
  * 发送压缩后的截图到 iframe
17388
17445
  */
17389
- sendCompressedScreenshotToIframe(dataUrl) {
17446
+ sendCompressedScreenshotToIframe(dataUrl, scheduleStartTime, compressEndTime) {
17390
17447
  if (!this.currentBinaryConfig || !this.sendToIframeCallback) {
17391
17448
  return;
17392
17449
  }
17450
+ const sendStartTime = performance.now();
17393
17451
  try {
17394
17452
  // 计算 base64 大小
17395
17453
  const base64Data = dataUrl.split(',')[1] || '';
@@ -17404,14 +17462,20 @@ class ScreenshotManager {
17404
17462
  console.log(dataUrl);
17405
17463
  }
17406
17464
  // 将截图转换为 ArrayBuffer
17465
+ const convertStartTime = performance.now();
17407
17466
  const imageBuffer = this.dataUrlToArrayBuffer(dataUrl);
17408
17467
  const imageBufferSize = imageBuffer.byteLength;
17468
+ const convertTime = performance.now() - convertStartTime;
17409
17469
  // 构建配置的二进制结构
17470
+ const buildConfigStartTime = performance.now();
17410
17471
  const configBuffer = this.buildBinaryConfig(this.currentBinaryConfig);
17411
17472
  const configBufferSize = configBuffer.byteLength;
17473
+ const buildConfigTime = performance.now() - buildConfigStartTime;
17412
17474
  // 合并配置字节和图片字节(配置在前)
17475
+ const combineStartTime = performance.now();
17413
17476
  const combinedBuffer = this.combineBinaryData(configBuffer, imageBuffer);
17414
17477
  const combinedBufferSize = combinedBuffer.byteLength;
17478
+ const combineTime = performance.now() - combineStartTime;
17415
17479
  // 打印大小信息
17416
17480
  if (!this.options.silentMode) {
17417
17481
  console.log('📸 [压缩后-大小统计]');
@@ -17419,15 +17483,34 @@ class ScreenshotManager {
17419
17483
  console.log(` 图片字节大小: ${(imageBufferSize / 1024).toFixed(2)} KB (${imageBufferSize} 字节)`);
17420
17484
  console.log(` 配置字节大小: ${configBufferSize} 字节`);
17421
17485
  console.log(` 拼接后总大小: ${(combinedBufferSize / 1024).toFixed(2)} KB (${combinedBufferSize} 字节)`);
17486
+ console.log(` ⏱️ 数据转换耗时: ${convertTime.toFixed(2)}ms`);
17487
+ console.log(` ⏱️ 构建配置耗时: ${buildConfigTime.toFixed(2)}ms`);
17488
+ console.log(` ⏱️ 合并数据耗时: ${combineTime.toFixed(2)}ms`);
17422
17489
  }
17423
17490
  // 发送二进制数据到 iframe
17491
+ const sendCallbackStartTime = performance.now();
17424
17492
  const message = {
17425
17493
  type: 'screenshotBinary',
17426
17494
  data: combinedBuffer
17427
17495
  };
17428
17496
  this.sendToIframeCallback(message);
17497
+ const sendCallbackTime = performance.now() - sendCallbackStartTime;
17498
+ const totalSendTime = performance.now() - sendStartTime;
17499
+ let totalTime = 0;
17500
+ if (scheduleStartTime) {
17501
+ totalTime = performance.now() - scheduleStartTime;
17502
+ }
17429
17503
  if (!this.options.silentMode) {
17430
17504
  console.log('📸 [压缩后] ✅ 二进制数据已发送到 iframe');
17505
+ console.log(` ⏱️ 发送回调耗时: ${sendCallbackTime.toFixed(2)}ms`);
17506
+ console.log(` ⏱️ 发送阶段总耗时: ${totalSendTime.toFixed(2)}ms`);
17507
+ if (scheduleStartTime) {
17508
+ console.log(` ⏱️ 从定时开始到发送完成总耗时: ${totalTime.toFixed(2)}ms`);
17509
+ if (compressEndTime) {
17510
+ const compressToSendTime = sendStartTime - compressEndTime;
17511
+ console.log(` ⏱️ 压缩完成到发送开始耗时: ${compressToSendTime.toFixed(2)}ms`);
17512
+ }
17513
+ }
17431
17514
  }
17432
17515
  }
17433
17516
  catch (error) {