写点什么

超级 App 手机百度移动搜索优化与平台化方案

  • 2015-07-06
  • 本文字数:4513 字

    阅读完需:约 15 分钟

2015 年 6 月 28 日下午,百度与 InfoQ 携手举办了手机百度“云和端技术实践”沙龙活动。这是手机百度首次公开超级 App 背后的技术知识。活动分云端和客户端技术两个会场同时进行,吸引了众多技术爱好者前来学习交流。现场人数爆满,气氛热烈。

手机百度产品总经理,百度副总监黎科峰出席沙龙并简要介绍了手机百度的业务状况和讲师团队成员。他谈到,手机百度作为百度在移动互联网时代的亿级用户流量入口,不仅支撑着百度内部产品,更希望打造一个开放平台,支撑众多第三方行业及应用的发展,从连接人与信息拓展到连接人与服务。比如打开手机百度就可以看到 9 块 9 上门推拿服务。手机百度的未来应用前景拥有很大的想像空间,在云端和移动客户端技术业务的实现上也积累了很多宝贵经验和创新实践!

下面是此次技术沙龙活动云端分会场的主题演讲概要总结:

主题一:移动客户端搜索速度优化(程逸凡)

搜索是手机百度核心业务,工程师对它的优化也做了很多工作,本主题主要分享了手机百度客户端速度优化上面的实践经验,分享针对 Android 平台,但同样适用于 iOS 平台。

主题首先介绍了手机百度中的移动搜索。在介绍技术方案之前,主题明确给出了百度移动搜索优化的目标,主题后续分享了很多独特的优化方案,让期待干货的听众感觉不虚此行。

接下来主题给出了移动客户端中常见的加载模式,一是本地 Native 界面切换,二是 Native 展现云端数据,三是加载 Web Content:

  • Native 的界面切换,它的优化重点是 UI 效率,数据库读取速度,启动的过程首先要给移动一个路口进入开始它的各种功能,它的优化里面还避免网络连接,因为网络连接在移动互联网上它的速度是非常不可控的,所以要通过数据缓存等等机制,在手机启动过程中减少一些非必要的运算来加速它的启动速度。
  • Native 展现云端数据。对这一类流程来说它的优点是,UI 生成与渲染,数据解析非常快,服务器响应快,优化它的时候通过一些数据缓存和优化网络通信。在搜索过程中会频繁出现 Native 上云端数据的情况,也就是搜索建议,相对来说这是一个比较简单的界面,所以对它来说系统优化方面并不会有很大的困难。
  • 加载 Web Content,WebView 加载一个网页内容,百度是一个非常庞大的系统,它仍然是以页面做展示。它就是用一个 WebView 去加载。对 Web Content 的优化是其中一个比较大的挑战,因为搜索流程里面有很大一块是用户等待,点击搜索之后等待看到结果,这是最难以忍受的一段时间,但是对于客户端来说它对于这个加载过程的控制力是比较弱的,对于 App 来说,WebView 加载的过程是一个黑盒,连接网络一般由 WebView 控制,渲染性能依赖于 WebView 的内核,页面优化来于前端实现。

在手机百度做性能优化的过程中,主要应用有两个指标,一是首屏时间,二是完成时间。首屏时间对应的是用户可见速度,它代表的是用户看到首屏界面,这个极大的影响到用户的感知,也是大多数用户认为界面加载速度的一个评价标准。可以通过一些技术方案,把这个时间提前。用户无法感知到,他也不需要知道,他一般是通过首屏时间来推测这个时间,然后他来感觉到速度和流畅度。首屏时间极大的影响用户感知,是最着重优化的一个点。完成时间影响到用户的使用体验,它是其次要保证的时间。

接下来主题介绍了几种优化方法如下:

  • 利用首屏后 300~600 毫秒的时间差,在 UI 线程上完成必要的初始化操作的优化方法,顺序是优先初始首屏可见界面,然后利用时间差完成必要的数据与逻辑,而对于独立功能则用到时再初始化。
  • 优化 WebView 加载速度,即加载过程中,让 WebView 专心的干活,复用 TCP 连接和设置预连接页面等。
  • Layout 优化,考虑到 Activity、Fragment 切换都有耗时,因此在速度敏感场景中应采用 View 组织界面,并自定义 Layout。

主题二:手机百度android平台平台化解决方案(张斌)

主题主要分三部分,分别介绍了手机百度的 APS(Advance Plugins System)、APS 技术方案和开发方式,正是这个插件系统撑起了手机百度的平台化方案。

主题先介绍了 APS 的由来和发展情况。手机百度是一个非常大的公司,有很多的事业部和产品线。如何把这些事业部、这些产品线所有人的资源能整合在一起,能很好的与微信、淘宝达到一个同等的竞争力,这是百度去年一直在做并且做成功的一件事情。目前安卓中已集成信息类如百度新闻、贴吧,生活服务类如百度钱包、糯米,工具类如视频播放器、小说阅读器、百度云等常用插件。

APS 平台分为云端和客户端,在云端可以一键接入多个平台,开发非常简单,病能够提供非常友好的 NA 搜索体验。这样一来,用户获得了更好的体验,生态的转化率得到了提升,而手机百度本身的开发效率和灵活度也得到了极大的改变。值得一提的是,APS 使得应用提供方无需再费力推广安装自己的 apk,用户通过点击插件即可使用。APS 的优点在设计之初便有所体现,如平台化、接口化方面的二进制插件,独立开发方面的独立性,分散测试,自主升级方面的可配置,独立下载方面的动态下发等。

主题第二个介绍了 APS 的技术方案。整个 APS 系统分为客户端部分、合作开发者、服务的前端和后端、业务线的接入。应用提供方关注业务服务器,APS 后端和业务线服务器是一个非常标准的协议,业务服务器将会通过具体业务的特点再去对协议的字段进行扩充。合作开发者会接入到 APS 的前端,APS 前端是一个非常复杂的网站,在这个前端中它包括了开发者中心,这里有开发者帐号、开发者一些审核和申请相关的功能。手机百度的产品经理可以根据插件的准入情况,比如说完全经过准入之后,就可以通过这个平台针对于手机百度的某一个版本进行下发,同时在控制平台中可以根据它监控系统发现的问题,对某个插件进行云端的接入,完全可以通过云端去控制。还有质量保证系统,当开发者进行插件准入的时候,会走准入系统,准入系统有一个标准的工作流,插件测试通过后就提交到系统中去了,质量保证系统会做全自动化的系统扫描,质量保证系统会自动生成一个质量保证报告,如果发现问题的话,会打还给开发者,开发者进行修改之后,再重新去走这个平台。当质量保证系统这边准入通过之后,插件包就会接入到 APS 后端的存储模块;当产品经理在控制平台中进行配置的时候,后端会通过控制模块、存储模块取消标准包,下发给请求的业务线。

同时在后端有一个数据模块和测试模块,数据模块主要是针对于客户端,客户端很注重安全性和稳定性,稳定性也是根据客户端实时监控插件的运行状态,产生正常数据和异常数据的时候会及时上报给数据模块,可以看到一个完整的可视化数据,当数据出现异常的时候,就会通过这个控制平台去控制模块,去进行一些相关的处理。APS 客户端由几大部分组成,有 APS 内核,控制模块,监控模块,沙盘模块、破壳模块、安全管理模块、插件中心等。

主题最后介绍一下 APS 的开发方式。产品层面、UI 都定好之后进入开发,开发者先开发一个独立的 apk,这个 apk 可以在安卓里运行,但是需要替换掉 sdk,放在插件容器中运行。apk 里面所有集成的组件的基类都替换成 sdk 里面的基类。内核里面是有一个运行内核。联调接口。最后通过开发者中心的 APS 准入,以及各种 PK,质量的 PK 等等。

主题三:手机百度iOS平台平台化解决方案(王聪)

主题主要介绍了在开发中遇到的问题,以及如何分析这些问题,最终给出一个解决方案以及现在这些方案的效果。

主题首先提出了联调开发中的成本问题,主要来自 RD 联调、QA 联调和定位及修复 Bug 带来的频繁打包,解决这些问题的办法是通过平台化,通过构建接口平台、开发平台和准入平台等手段,尽量降低开发成本。具体来讲,接口平台化,把所有对外提供的能力以及插件对我们以外的能力,所有接口进行整合,把这个接口包装成一个品牌对外提供,所有插件可以很方便的去进行插件的接口开发。开发平台,做一个 APP,做一个功能,大家都离不开发,如何让一个插件的开发者能很有效的基于现有的环境去进行一个开发以及发布他们的插件,这是平台化最重要的。准入平台,准入平台主要是给插件开发者准入其插件,把插件准入流程可以系统流程的规范化,不用进行人员之间的沟通,就能得到一个流程规范的平台。

接下来,主题给出了百度手机平台的架构图如下,具体内容在 Android 主题中已做介绍:

这里 iOS 主题补充一下关于手机百度客户端平台化的三个核心概念的说明。客户端平台化的核心方案有三个重要概念,这三个概念组成了最终的平台化方案的最终版,一是壳工程,二是破壳系统,三是插件自身。壳工程是一个可运行的最终的一个工程,这个工程包含了手百所有的工程配置,包含了手百自身的资源文件,以及手百主体代码打包后的库文件,这个工程可以直接运行,插件方不做任何改动的情况下可以拿这个壳工程运行,可以得到最新版手机百度的 APP,然后壳工程中会有自己的安全机制,对各种用户隐私进行保护。然后是破壳系统,破壳系统是插件方唯一能看到的一个系统,它提供了插件调用端能力接够,包含插件管理以及插件入口的自动生成,插件入口的自动生成也是整个项目的核心,这一点保证了对所有插件开发者开放的都是一个同一个壳工程。插件方,为了适配平台,它除了自己的插件主体之外,还需要提供额外两个东西,这两个东西保证系统可以运行起来,插件方提供插件主体之后,需要提供指定协议实现类以及数文件,这个协议实现类是所有插件功能的主入口,它的描述文件描述了所有插件的 ID 版本信息以及插件的描述信息,可以通过这个描述文件得到插件所有的功能入口。

主题最后还介绍介绍了一下开发过程中遇到的实际问题和具体解决办法:

问题一:第三方库冲突的问题。现在很多大公司开放的库,它都会存在这个问题。手百的原则是所有第三方库统一由手百方进行接管,插件方在打包时将第三方库剥离。插件方打包的时候需要做一些编译选项控制,保证这些所谓的第三方库不被打包到最终的库文件之中,然后才能去集成他们的这样一个插件。

问题二:保证壳工程安全性。安全性可以说是移动互联网的生命线,所有的APP 必须把安全放在首位它才能良好的活下去。在壳工程方案之中它存在着几大风险点,一是壳工程如何避免插件方直接编译。二是由于iOS 的沙盒环境,没有办法做到根本性去限制某个插件有访问的内容限制。解决方案是,一是时间限制,超过这个时间之后,壳工程就不可用了。再就是BundlelD 验证,要进行登陆的时候,会判断一下BundleID 与现在的工程BundlelD 是不是一样,如果不一样就会有限制。重要功能会进行密钥保护,通过这些步骤就保证了壳工程的安全性。

问题三:端能力接口升级。这一点也是开发到后来的时候才发现这是一个有极大影响的绊脚石,手百方自己的业务在不停升级,而这些升级可能对插件方来说是无意义的,升级之后,就需要去改变这些接口,给接口增加参数或者减少参数,这就会经常出现莫名其妙的问题。针对这一点,现在破壳系统是实际端能力接口的封装,保持不变,能力升级时修改实际端能力接口,破壳接口不变。这样在端能力接口进行升级的时候就不


感谢 Raymond Zhao 对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-07-06 07:204208
用户头像

发布了 268 篇内容, 共 122.4 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

论监控中事件管理的艺术

穿过生命散发芬芳

事件管理 9月月更

【微信小程序】常用组件及基本使用详解

陈橘又青

小程序开发 9月月更

编译器优化:何为别名分析

华为云开发者联盟

开发 编译器 企业号九月金秋榜

力扣151 - 反转字符串中的单词【双指针与字符串的火花】

Fire_Shield

双指针 LeetCode 9月月更

阿里云视觉智能开放平台离线人脸识别SDK开启邀测啦

夏夜许游

人工智能 AI 人脸识别 离线包

PSYNC 命令的实现

急需上岸的小谢

9月月更

奇点云数据云平台发布DataSimba R3.8长期支持版

奇点云

奇点云

一招教你如何高效批量导入与更新数据

华为云开发者联盟

数据库 sql 后端 企业号九月金秋榜

TiDB部署----openEuler2203/2003 单机部署TiDB 6.1.1

TiDB 社区干货传送门

安装 & 部署

MODBUS RTU 485 协议简要说明

矜辰所致

Modbus RS485 9月月更

送你5个MindSpore算子使用经验

华为云开发者联盟

人工智能 算子 企业号九月金秋榜

压测平台在全链路大促压测中的实践

得物技术

中间件 全链路压测 QPS 企业号九月金秋榜

mysql 查询执行过程

急需上岸的小谢

9月月更

一步步搞懂MySQL元数据锁(MDL)

京东科技开发者

MySQL 数据库 元数据 数据库锁 mdl

跨链自动化中心 OAK Network,构建安全高效 Web3 基础设施

One Block Community

Substrate defi 跨链 区块链、

iofod - Echart 图表全支持

iofod jude

Java 前端 低代码

活动报名| MongoDB 核心功能及其原理分析

MongoDB中文社区

mongodb

2022-09微软漏洞通告

火绒安全

microsoft 安全 终端安全 安全漏洞

依据TIdb执行计划的sql调优案例分享

TiDB 社区干货传送门

性能调优 管理与运维 HTAP 场景实践 大数据场景实践

TiDB生命周期

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 数据库架构设计

住宅代理IP在网络攻击中的作用

郑州埃文科技

代理IP 安全检测 撞库攻击

数据库发展史2--数据仓库

数据库 数据仓库 叶正盛 玖章

FreeRTOS记录(十、FreeRTOS实现带 I2C 通讯的 ModbusRTU 协议从机实例)

矜辰所致

FreeRTOS 9月月更 ModbusRTU

Redis复制的实现

急需上岸的小谢

9月月更

PhotoView——支持图片缩放、平移、旋转的一个优雅的三方组件

OpenHarmony开发者

Open Harmony

荣耀帐号服务,让用户获取变得更简单

荣耀开发者服务平台

手机 物联网 安卓 移动开发 honor

【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大

Java快了!

资源使用率提高25%,成本降低90%,云函数是怎么做到的?

最新动态

Pipy + Sentinel 实现 Redis 的高可用

Flomesh

Service Mesh 服务网格

实操指南:如何为 SAST 工具设置误报基准?

SEAL安全

应用安全 静态应用安全测试 SAST 应用安全测试 软件供应链安全

TiDB分布式事务—写写冲突

TiDB 社区干货传送门

故障排查/诊断

超级 App 手机百度移动搜索优化与平台化方案_百度_张天雷_InfoQ精选文章