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

原创 2016年05月31日 20:09:15

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

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

背景

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

用户类型有哪些?这里把用户分为两类,一类是淘宝、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、可以在配置上加上这个功能的开关,如果线上反应不好可以很快的关掉这个功能,而不是通过发客户端版本解决。

相关文章推荐

JS无提示关闭浏览器窗口脚本以及不同浏览器对window.close()不同表现

[javascript] view plain copy 无提示关闭浏览器窗口JS脚本代码如下: [javascript] view plain copy function ...
  • sdx1237
  • sdx1237
  • 2016年05月04日 19:55
  • 1169

java并发编程--Executor框架(一) 摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程

java并发编程--Executor框架(一) 摘要:        Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任...

JS获取浏览器窗口大小

  • 2011年10月15日 21:02
  • 3KB
  • 下载

js关闭火狐浏览器窗口

  • 2011年04月10日 09:43
  • 351B
  • 下载

selenium_webdriver(python)获取元素属性值,浏览器窗口控制、网页前进后退,title/url打印

# coding: UTF-8 #这句是为了声明编码格式,一定要有 from selenium import webdriver #要想使用selenium 的webdriver 里的函数,首...

浏览器窗口属性大全

  • 2008年07月07日 17:52
  • 19KB
  • 下载

浏览器窗口大小改变时,动态改变div高度和宽度

header、footer高度固定,aside宽度固定,当浏览器窗口大小改变时,动态改变aside高度,content高度和宽度。 html changeble ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于用户类型调起不同类型浏览器窗口的一种方案
举报原因:
原因补充:

(最多只允许输入30个字)