重构为一个文件
分离 browser / os / device 的解析逻辑