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":"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
|
|
1
|
+
{"version":3,"file":"ScreenshotManager.d.ts","sourceRoot":"","sources":["../../src/core/ScreenshotManager.ts"],"names":[],"mappings":"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"}
|
package/dist/customer-sdk.cjs.js
CHANGED
|
@@ -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) {
|
package/dist/customer-sdk.esm.js
CHANGED
|
@@ -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) {
|