基于用户类型调起不同类型浏览器窗口的一种方案
来源:互联网 发布:上海财经大学 网络教育 编辑:程序博客网 时间: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、可以在配置上加上这个功能的开关,如果线上反应不好可以很快的关掉这个功能,而不是通过发客户端版本解决。
- 基于用户类型调起不同类型浏览器窗口的一种方案
- Mac OC调起用户可选择保存目录的窗口
- 一种基于浏览器的自动小票机打印实现方案(js版)
- 在线用户列表实现的一种方案
- 一种基于OpenCV的三维重建实现方案
- C2Call是一种基于浏览器的网络电话
- 创建不同类型的用户参数
- Udp打洞,判断Nat网络类型-一种基于UDP协议实现P2P智能穿越NAT的方案
- 使用Acegi实现多种用户登录的一种方案
- 一种基于 SOA 的应用程序的动态实现框架方案
- HAProxy的三种不同类型配置方案
- HAProxy的三种不同类型配置方案
- HAProxy的三种不同类型配置方案
- JS判断用户使用的浏览器类型
- 一种基于Lucene的实时搜索方案|淘宝技术部
- 一种基于主板BIOS的身份认证方案及实现
- 基于clang插件的一种iOS包大小瘦身方案
- 一种基于redis的购物车实现方案(php)
- 非二进制字符串数据:CHAR,VARCHAR,TEXT
- 二叉排序树节点的删除(C++,算法导论),前中后序遍历(递归/非递归,栈实现),按层次遍历(队列实现)
- 大数据量报表导出相关的设置问题解决
- 正确率、召回率和F值
- Middle-题目118:210. Course Schedule II
- 基于用户类型调起不同类型浏览器窗口的一种方案
- 点击按两次返回键退出
- 步进电机———丢步
- jQuery EasyUI IE8 兼容性问题
- 关于vs2015+qt5.x+vtk的配置
- 集成环信实现聊天
- linux搭建zookeeper集群
- echo(),print(),print_r()的区别
- 记住Decode