2 Commity 19ecd12b16 ... affcd72d29

Autor SHA1 Wiadomość Data
  aokunsang affcd72d29 Merge branch 'master' of http://git.platomix.net/aokunsang/platomix-gmetry-pdf 3 tygodni temu
  aokunsang 4f5e68ab44 修复水印问题,并且优化性能打印日志 3 tygodni temu

+ 1 - 3
pom.xml

@@ -9,7 +9,7 @@
 		<relativePath />
 	</parent>
 	<artifactId>platomix-gmetry-pdf</artifactId>
-	<version>1.0.0</version>
+	<version>1.0.1</version>
 
 	<dependencies>
 		<dependency>
@@ -48,7 +48,6 @@
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 			</plugin>
-			<!--
 			<plugin>
 				<groupId>io.fabric8</groupId>
 				<artifactId>docker-maven-plugin</artifactId>
@@ -63,7 +62,6 @@
 					</execution>
 				</executions>
 			</plugin>
-			 --> 
 		</plugins>
 	</build>
 	<repositories>

+ 25 - 10
src/main/java/org/springblade/handler/PlayWrightHandler.java

@@ -7,7 +7,9 @@ import java.io.File;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
+import cn.hutool.core.date.StopWatch;
 import org.springblade.config.PlaywrightProperties;
 import org.springblade.dto.ScreenShotParam;
 import org.springblade.dto.ScreenShotParam.Site;
@@ -46,14 +48,14 @@ public class PlayWrightHandler {
 	/**
 	 * 截图
 	 * 
-	 * @param url
-	 * @param token
-	 * @param waterMark
+	 * @param param
 	 * @return <id, fileUrl>
 	 */
 	public Kv screenshot(Site site, ScreenShotParam param) {
 		BrowserContext browserContext = null;
+		StopWatch stopWatch = new StopWatch("模拟请求页面的耗时情况");
 		try {
+			stopWatch.start("buildParams");
 			// 从池子中获取browserContext
 			browserContext = browserContextPool.borrowObject();
 			String id = site.getId();
@@ -68,15 +70,22 @@ public class PlayWrightHandler {
 			page.setViewportSize(site.width(), site.height());
 			String url = String.format("%s?watermark=%s&text=%s",
 					playwrightProperties.getWebsiteDomain() + site.getUrl(), param.getWatermark(), param.getText());
-			page.navigate(url, new NavigateOptions().setTimeout(0).setWaitUntil(WaitUntilState.NETWORKIDLE));
-			// page.waitForConsoleMessage(new WaitForConsoleMessageOptions().setPredicate(t
-			// -> t.text().equals("finished")), null);
-			//打印页面错误日志信息
-			page.onPageError(error -> log.info("[{}]页面出错了啊!!|website={},errorMsg={}", id, site.getUrl(), error));
+			page.onPageError(error -> log.info("[{}]页面出错了|{}", url, error));
+			page.onRequestFailed(request -> log.info("[{}]请求地址出错了|method={},error={}", request.url(), request.method(), request.failure()));
+			stopWatch.stop();
 
-			log.info("[{}]请求完成时间:{}s", id, (System.currentTimeMillis() - oneTime) / 1000.f);
-			log.info("[{}]开始截图", id);
+			stopWatch.start("navigate");
+			//跳转到URL,等待页面达到 networkidle 状态: 当没有网络连接活动时,即页面上所有的资源(如图片、脚本等)都已加载完毕,或者在一段时间内没有新的网络请求。
+			//最长等待6分钟
+			page.navigate(url, new NavigateOptions().setTimeout(360000).setWaitUntil(WaitUntilState.NETWORKIDLE));
+			stopWatch.stop();
 
+			stopWatch.start("wait10Secs");
+			//等待10s - 最后容忍10s
+			page.waitForTimeout(10000);
+			stopWatch.stop();
+
+			stopWatch.start("screenshot");
 			// 图片存储目录,按月份存储
 			String month = DateUtil.format(new Date(), "yyyyMM");
 			File dir = FileUtil.file(playwrightProperties.getScreenShotDir(), month);
@@ -91,6 +100,7 @@ public class PlayWrightHandler {
 					.setFullPage(true);
 			// 开始截图
 			page.screenshot(screenshotOptions);
+			stopWatch.stop();
 			// 开始截图
 //			byte[] screenshotBytes = page.screenshot(screenshotOptions);
 //			waterMark = StrUtil.isBlank(waterMark) ? "保密" : waterMark;
@@ -109,6 +119,11 @@ public class PlayWrightHandler {
 			return null;
 		} finally { // 使用完后,返回池子
 			browserContextPool.returnObject(browserContext);
+			if(stopWatch.isRunning()) {
+				stopWatch.stop();
+			}
+			//打印最终耗时
+			log.info(stopWatch.prettyPrint(TimeUnit.SECONDS));
 		}
 	}
 }