基于用户类型调起不同类型浏览器窗口的一种方案

来源:互联网 发布:上海财经大学 网络教育 编辑:程序博客网 时间:2024/06/06 04:11

基于用户类型调起不同类型浏览器窗口的一种方案

根据近期的卖家模式一个需求,做一个小总结。

背景

标题有点绕,让我慢慢道来。先把需求大概说一下。
当用户千牛或者旺旺外链调起窗口的时候,根据用户的身份打开不同的窗口。如果是卖家就打开卖家窗口,否则打开普通窗口。
旺旺或者千牛外链打开网页,若用户为淘宝或者阿里卖家则在卖家窗口中打开网页,否则就在普通窗口中打开网页。

用户类型有哪些?这里把用户分为两类,一类是淘宝、1688卖家,另一类是其他用户。

不同类型的浏览器窗口指的是什么?对于UC浏览器PC版而言,不同类型浏览器窗口指的是普通窗口以及卖家窗口。

所有外链调起都这样做吗?仅仅是千牛以及旺旺外链。

方案

千牛外链直接调起卖家窗口的逻辑

首先看一下如果不区分用户,千牛外链直接调起卖家窗口的逻辑

通过类StartupBrowserCreatorImpl中的方法ProcessLaunchURLs()创建出一个browser,并初始化。
而类ProfilePartitionLauncher则选择外链所对应的browser。StartupBrowserCreatorImpl创建一个ProfilePartitionLauncher对象,
这个对象绑定到合适的browser中。

StartupBrowserCreatorImpl在ProcessLaunchURLs里解析待打开的URL,它依赖ProfilePartitionLauncher来完成外链或者快捷方式的解析工作。解析完标识数据之后,流程分成两步:

1、从Local State文件中查询并补全小号的标识信息,这部分逻辑由PartitionSession封装。
2、解析已存储的小号详细信息,比如上次未关闭的标签页,这部分逻辑由ProfilePartitionResolver封装,而且是异步的过程。

这里解释一下分两步走的必要性,启动流程是非常影响开启速度的部分,任何耗时的操作都会恶化用户体验,这里步骤1从Local State文件里查询小号的标识信息,虽然是同步的,但是数据量很小,而且是在Local State文件加载之后的流程,性能影响姑且可忽略。至于步骤2,解析小号存储的详细信息,目前只存储了上次未关闭的标签页,这部分数据量就已经偏大,而且随着以后功能的增加,还需要存储别的数据(比如书签),因此,这里有必要做成异步的。

基于用户类型调起不同类型窗口的逻辑

在千牛外链打开卖家窗口的基础上,这里加上了使用千牛外链的用户的身份判断。若用户为卖家则打开卖家窗口,否则打开普通窗口。

ProfilePartitionLauncher来完成外链或者快捷方式的解析工作,并将解析的结果交由对象PartitionAccountInfoProvider来判断用户身份,进而打开窗口。

相比于千牛外链直接打开卖家窗口,此处做了以下处理:

1、ProfilePartitionLauncher对外链进行解析后,将是否为千牛外链调起反馈给StartupBrowserCreatorImpl的ProcessLaunchURLs方法。如果不是千牛外链则按照原有逻辑打开窗口。
由于数据量较小,这块判断对性能影响较小。
2、如果ProfilePartitionLauncher对外链解析为千牛外链调起,则延后browser启动,在ProfilePartitionLauncher中打开窗口。需求决定打开窗口与用户类型相关,从而先通过PartitionAccountInfoProvider来判断用户身份,而StartupBrowserCreatorImpl生命周期较短,必须回调到ProfilePartitionLauncher打开相应的窗口。由于不能过分的延时加载,在PartitionAccountInfoProvider中设定时间阈值,如果超时默认打开普通窗口。

总结

基于用户类型打开窗口实际上对浏览器打开窗口逻辑改动较大,对其性能影响也较大。后续需要改进的点实际上有很多。

1、基于用户类型打开窗口,需要在打开窗口前查询用户类型,这实际上大大的延长了打开窗口的时延。可以将用户类型存在本地,第一次需要查询接口,以后就直接查询本地的数据得到用户身份信息。

2、可以在配置上加上这个功能的开关,如果线上反应不好可以很快的关掉这个功能,而不是通过发客户端版本解决。

0 0
原创粉丝点击