搜索架构之道:App中的搜索系统设计与优化实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 结果页场景及技术实现

以文本搜索为例,当用户输入关键字确认搜索后,客户端将加载与关键字对应的结果页并将其展现给用户。也就是说,客户端需要具备展现结果页的能力,还需要支持用户浏览及选择某个结果条目进入落地页。

典型的结果页加载及浏览过程主要分为4个步骤,包括记录历史,拼装搜索关键字,加载结果页和浏览结果页。其中前3个步骤在App中实现,最后一个步骤由用户触发。

如图2-5所示,用户发起搜索时,客户端会保存搜索记录即记录历史,并将搜索关键字拼装到URL中传给搜索服务器。之后客户端切换到结果页场景,创建浏览内核及结果页相关功能模块,调用浏览内核向服务器请求加载携带搜索关键字的URL。服务器接收到请求后,提取URL中的关键字进行搜索,并生成结果页及相关资源。然后,服务器会将结果页主文档返回给客户端加载。浏览内核收到服务器的响应后,解析结果页内容。

如图2-6所示,通常情况下,结果页需要加载的资源可能有多个,因此浏览内核会依次向服务器提交请求,下载相关资源,并在下载完成后渲染结果页,直到整个页面加载完成。页面加载完成后,用户可通过上下滑动来浏览页面。当用户点击页面中的结果条目时,会加载落地页。

图2-5 结果页加载及浏览过程示例

图2-6 结果页相关资源加载

在页面加载过程中,有时会出现各种异常,这些异常可能源于网络问题或服务器、客户端传递的参数格式错误等。因此,需要在客户端对这些异常进行处理。

部分浏览器会在页面加载过程中显示进度条,提示用户当前页面加载的进度,让用户对页面当前加载状态有所感知。这些状态通常来自浏览内核API的通知,也可主动调用API获取。一般来说,系统提供的原生API具备获取基本页面状态和事件通知的能力。关于浏览内核的使用及扩展,将在第5章介绍。