perf: Chromium 启动 flag 微调 + screencast 画质 q60->q50

Flag:加 --no-first-run、--no-default-browser-check、
--disable-default-apps、--disable-extensions、
--disable-background-networking、--disable-sync、
--disable-translate,只跳过首跑/装配活,不改渲染与工具
行为。实测(runsc 容器,launch + new_page,各 3 次交替):
旧中位数 0.889s、新 0.819s——只差 70ms 且在逐次噪声
(0.70-0.99s)里,几百毫秒的预期不成立;零成本顺手留着。
画质:screencast 与 eager 抓帧 q60 -> q50,分辨率
1280x800 不动,点击坐标系不受影响。实测同页文本+渐变:
62068 -> 56428 字节(-9%),不是经验法则的 30%;觉得糊
一句话改回 60。
This commit is contained in:
host committed 2026-10-30 14:27:04 +08:00
1 parent 878f8de7da
commit 56b8f98b47
2 files changed
+29 -5

No files matched your search

+22 -3
View File
@@ -83,9 +83,23 @@ class Browser:
else:
from playwright.sync_api import sync_playwright
pw = sync_playwright().start()
# Extra flags skip first-run/setup work only; they
# change nothing about page rendering or tool
# behaviour. Measured 2026-10-30 (runsc container,
# launch + new_page, 3 runs each, alternating):
# old median 0.889s, new median 0.819s -- ~70ms,
# inside run-to-run noise (0.70-0.99s either way).
# Kept anyway: zero cost, directionally faster.
launch = {"args": ["--no-sandbox",
"--disable-dev-shm-usage",
"--disable-gpu"]}
"--disable-gpu",
"--no-first-run",
"--no-default-browser-check",
"--disable-default-apps",
"--disable-extensions",
"--disable-background-networking",
"--disable-sync",
"--disable-translate"]}
if self.proxy:
launch["proxy"] = {"server": self.proxy}
browser = pw.chromium.launch(**launch)
@@ -318,8 +332,13 @@ class Browser:
# bytes), so dropping the frame-skip buys
# responsiveness exactly when it matters -- scrolling,
# dragging, animation -- without a static-page tax.
# quality 50 (was 60): measured 2026-10-30 on a
# text+gradient page, 62068 -> 56428 bytes (-9%).
# Less than the 30% rule of thumb, but free: same
# 1280x800 pixels, so click coordinates are
# unaffected. Revert to 60 if text looks soft.
cdp.send("Page.startScreencast",
{"format": "jpeg", "quality": 60,
{"format": "jpeg", "quality": 50,
"maxWidth": 1280, "maxHeight": 800,
"everyNthFrame": 1})
self._cdp = cdp
@@ -343,7 +362,7 @@ class Browser:
try:
result = self._cdp.send(
"Page.captureScreenshot",
{"format": "jpeg", "quality": 60})
{"format": "jpeg", "quality": 50})
data = result.get("data") if isinstance(result, dict) \
else None
if data:
+7 -2
View File
@@ -180,6 +180,11 @@ class BrowserTest(unittest.TestCase):
{"server": "http://proxy:8888"})
self.assertIn("--no-sandbox",
self.browser._pw.launch_kwargs["args"])
for flag in ("--no-first-run", "--no-default-browser-check",
"--disable-default-apps", "--disable-extensions",
"--disable-background-networking", "--disable-sync",
"--disable-translate"):
self.assertIn(flag, self.browser._pw.launch_kwargs["args"])
def test_snapshot_truncates_with_flag(self):
self.browser.navigate("https://example.com")
@@ -254,7 +259,7 @@ class BrowserTest(unittest.TestCase):
self.browser.set_frame_sink(sink)
self.browser.navigate("https://example.com")
self.assertIn(("Page.startScreencast",
{"format": "jpeg", "quality": 60,
{"format": "jpeg", "quality": 50,
"maxWidth": 1280, "maxHeight": 800,
"everyNthFrame": 1}),
[(m, p) for m, p in self.page.cdp.sent])
@@ -272,7 +277,7 @@ class BrowserTest(unittest.TestCase):
result = self.browser.navigate("https://example.com")
self.assertTrue(result["ok"])
self.assertIn(("Page.captureScreenshot",
{"format": "jpeg", "quality": 60}),
{"format": "jpeg", "quality": 50}),
[(m, p) for m, p in self.page.cdp.sent])
frame = self.browser.pump_screencast()
self.assertEqual(frame, "EAGERDATA")