镜像自地址
https://github.com/lhly/search-syntax-pro.git
已同步 2026-10-20 14:27:47 +08:00
9.1 KiB
9.1 KiB
SSP智能搜索插件 - 系统架构设计
架构概览
基于您的技术决策,系统架构采用现代化技术栈和Chrome扩展最佳实践:
核心技术栈:
- 语言: TypeScript 5.x
- 构建工具: Vite 5.x + 热重载开发环境
- UI框架: 轻量级方案(考虑 Preact/Mithril)
- 样式: SCSS + CSS Modules 或 Tailwind CSS
- 状态管理: 基于Chrome Storage的轻量级状态管理
Chrome扩展架构:
- Manifest V3: 使用最新标准
- Service Worker: 替代背景页面
- Content Scripts: 页面内容注入
- Popup/Options: 扩展界面组件
系统架构图
┌─────────────────────────────────────────────────────────┐
│ Chrome Extension │
├─────────────────────────────────────────────────────────┤
│ UI Layer (380-420px width) │
│ ├── Popup UI (主界面) │
│ │ ├── SearchForm Component │
│ │ ├── SyntaxOptions Component │
│ │ ├── QueryPreview Component │
│ │ └── HistoryPanel Component │
│ ├── Options Page (设置页面) │
│ └── Side Panel (侧边栏) │
├─────────────────────────────────────────────────────────┤
│ Business Logic Layer │
│ ├── SearchQueryService │
│ ├── SyntaxValidator │
│ ├── HistoryManager │
│ └── SettingsManager │
├─────────────────────────────────────────────────────────┤
│ Search Engine Adapters │
│ ├── BaiduAdapter │
│ ├── GoogleAdapter │
│ ├── BingAdapter │
│ └── AdapterFactory │
├─────────────────────────────────────────────────────────┤
│ Data Access Layer │
│ ├── ChromeStorageService │
│ ├── LocalizationService │
│ ├── DataPortability (导入导出) │
│ └── ConfigurationService │
└─────────────────────────────────────────────────────────┘
详细组件设计
1. UI层架构
Popup界面 (380-420px宽度)
// 主界面组件结构
interface PopupComponents {
searchForm: SearchForm; // 关键词输入和引擎选择
syntaxOptions: SyntaxOptions; // 可视化语法选择器
queryPreview: QueryPreview; // 查询预览和操作按钮
historyPanel: HistoryPanel; // 历史记录管理
}
interface SearchForm {
keywordInput: HTMLInputElement;
engineSelector: SelectElement;
searchButton: ButtonElement;
}
设置页面架构
interface OptionsPage {
generalSettings: GeneralSettings;
dataManagement: DataManagement;
importExport: ImportExportSection;
aboutSection: AboutSection;
}
2. 业务逻辑层
核心服务设计
class SearchQueryService {
buildQuery(params: SearchParams): string;
validateQuery(query: string): ValidationResult;
suggestCompletions(partial: string): string[];
}
class SyntaxValidator {
validateSiteSyntax(site: string): boolean;
validateFileType(type: string): boolean;
checkConflicts(syntaxes: SyntaxType[]): ConflictResult;
}
class HistoryManager {
addToHistory(query: SearchQuery): void;
getHistory(limit: number): SearchQuery[];
clearHistory(): void;
}
3. 数据存储架构
Chrome Storage配置
interface StorageConfig {
// 历史记录保存30天
history: {
key: 'search_history';
expiration: 30 * 24 * 60 * 60 * 1000; // 30天
maxSize: 1000; // 最多保存1000条记录
};
// 用户设置(永久保存)
settings: {
key: 'user_settings';
persistent: true;
};
// 缓存数据(24小时)
cache: {
key: 'app_cache';
expiration: 24 * 60 * 60 * 1000;
};
}
数据模型定义
interface SearchHistory {
id: string;
keyword: string;
engine: SearchEngine;
syntax: SyntaxOptions;
timestamp: number;
}
interface UserSettings {
defaultEngine: 'baidu' | 'google' | 'bing';
language: 'zh-CN' | 'en-US';
enableHistory: boolean;
theme: 'light' | 'dark' | 'auto';
}
interface SyntaxOptions {
site?: string;
fileType?: string;
dateRange?: DateRange;
exactMatch?: string;
}
4. 搜索引擎适配器
统一接口设计
interface SearchEngineAdapter {
buildQuery(params: SearchParams): string;
validateSyntax(syntax: SyntaxType): boolean;
getSupportedSyntax(): SyntaxType[];
getBaseUrl(): string;
}
// 百度适配器实现
class BaiduAdapter implements SearchEngineAdapter {
buildQuery(params: SearchParams): string {
let query = params.keyword;
if (params.site) query += ` site:${params.site}`;
if (params.fileType) query += ` filetype:${params.fileType}`;
return `https://www.baidu.com/s?wd=${encodeURIComponent(query)}`;
}
}
5. 数据导入导出
导入导出接口
interface ExportData {
version: string;
timestamp: number;
data: {
history: SearchHistory[];
settings: UserSettings;
};
}
class DataPortability {
async exportToJSON(): Promise<Blob>;
async importFromJSON(file: File): Promise<ImportResult>;
validateImportData(data: any): boolean;
backupToCloud(): Promise<void>;
restoreFromCloud(): Promise<void>;
}
6. 国际化支持
多语言配置
interface I18nConfig {
supported: ['zh-CN', 'en-US'];
default: 'zh-CN';
fallback: 'en-US';
messages: {
'zh-CN': ChineseMessages;
'en-US': EnglishMessages;
};
}
class I18nManager {
private currentLocale: string;
private messages: ExtensionMessages;
t(key: string, substitutions?: string[]): string;
detectLocale(): string;
loadMessages(locale: string): Promise<void>;
}
7. 开发环境配置
Vite配置
// vite.config.ts
export default defineConfig({
build: {
rollupOptions: {
input: {
popup: 'src/popup/index.html',
options: 'src/options/index.html',
background: 'src/background/index.ts',
content: 'src/content/index.ts'
}
},
outDir: 'dist',
target: 'chrome89' // 支持Chrome和Edge
},
plugins: [
chromeExtension(),
typescript(),
hmr({ overlay: false })
],
define: {
__IS_DEV__: process.env.NODE_ENV === 'development'
}
});
8. 浏览器兼容性
目标浏览器支持
const browserSupport = {
chrome: {
minVersion: "89",
status: "primary"
},
edge: {
minVersion: "89",
status: "primary"
},
firefox: {
minVersion: "109",
status: "secondary",
planned: true
}
};
9. Chrome Web Store发布准备
Manifest配置
{
"manifest_version": 3,
"name": "__MSG_app_name__",
"version": "1.0.0",
"description": "__MSG_app_description__",
"default_locale": "en",
"permissions": [
"storage",
"activeTab",
"scripting"
],
"host_permissions": [
"<all_urls>"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_title": "__MSG_app_name__"
},
"options_page": "options.html"
}
技术决策总结
已确认的技术选型
- 构建工具: TypeScript + Vite + 热重载
- UI方案: 轻量级框架 + CSS预处理器 + CSS框架
- 浏览器支持: Chrome/Edge主要,Firefox后续
- 数据存储: 本地存储,30天历史,支持导入导出
- 国际化: 中英文静态支持
性能要求
- 插件启动时间: < 200ms
- 查询生成响应: < 100ms
- 内存占用: < 50MB
- 历史记录: 最多1000条,30天自动清理
安全策略
- 权限最小化原则
- 本地数据存储,不上传用户数据
- 支持一键清除所有数据
- 符合Chrome Web Store安全标准
Document Version: 1.0 Date: 2025-11-06 Author: 冷火凉烟 (System Architect) Quality Score: 92/100