feat: 添加性能优化和架构文档,更新依赖和核心模块
refactor(browser_manager): 实现页面池机制以提升性能 refactor(image_manager): 添加模板缓存并集成页面池 refactor(bili_parser): 迁移到异步HTTP请求并实现会话复用 docs: 新增性能优化、架构设计和最佳实践文档 chore: 更新requirements.txt添加新依赖
This commit is contained in:
@@ -29,6 +29,8 @@ class ImageManager:
|
||||
# core/managers/image_manager.py -> core/managers -> core -> core/data/temp
|
||||
self.temp_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "temp")
|
||||
os.makedirs(self.temp_dir, exist_ok=True)
|
||||
# 模板缓存
|
||||
self._template_cache: Dict[str, Template] = {}
|
||||
|
||||
async def render_template(self, template_name: str, data: Dict[str, Any], output_name: str = "output.png", quality: int = 80, image_type: str = "png") -> Optional[str]:
|
||||
"""
|
||||
@@ -50,15 +52,20 @@ class ImageManager:
|
||||
return None
|
||||
|
||||
try:
|
||||
# 1. 渲染 HTML
|
||||
with open(template_path, "r", encoding="utf-8") as f:
|
||||
template_str = f.read()
|
||||
# 1. 渲染 HTML (使用缓存)
|
||||
if template_name in self._template_cache:
|
||||
template = self._template_cache[template_name]
|
||||
else:
|
||||
with open(template_path, "r", encoding="utf-8") as f:
|
||||
template_str = f.read()
|
||||
template = Template(template_str)
|
||||
self._template_cache[template_name] = template
|
||||
|
||||
template = Template(template_str)
|
||||
html_content = template.render(**data)
|
||||
|
||||
# 2. 使用浏览器截图
|
||||
page = await browser_manager.get_new_page()
|
||||
# 改为从池中获取页面
|
||||
page = await browser_manager.get_page()
|
||||
if not page:
|
||||
logger.error("无法获取浏览器页面")
|
||||
return None
|
||||
@@ -76,10 +83,11 @@ class ImageManager:
|
||||
if image_type == 'jpeg':
|
||||
screenshot_args['quality'] = quality
|
||||
|
||||
screenshot_bytes = await page.screenshot(**screenshot_args)
|
||||
screenshot_bytes = await page.screenshot(**screenshot_args) # type: ignore
|
||||
|
||||
finally:
|
||||
await page.close()
|
||||
# 归还页面到池中,而不是直接关闭
|
||||
await browser_manager.release_page(page)
|
||||
|
||||
# 3. 保存文件
|
||||
output_path = os.path.join(self.temp_dir, output_name)
|
||||
|
||||
Reference in New Issue
Block a user