万星星@豌豆荚 欢迎加入我们
一个吃软饭的男人!!!!!我只想写程序####
微博:http://weibo.com/wanlianwen
posts - 172,  comments - 1253,  trackbacks - 0
新的代码已经上传,请在 https://x-framework.googlecode.com/svn/trunk 更新

这一次的更新有些仓促,主要是有一些网友希望能早些看到chrome的tab页效果的具体实现,目前来讲还有一些没实现的地方,会导致一些bug,下载代码调试的时候,请忽视异常,勇敢的按下f5,不能正常退出请终止调试或者杀掉进程,任何崩溃不能退出的地方都有可能,仅故学习参考。

一些截图:






我认为chrome的架构在三个方面做的非常好:通知系统(线程模型/观察者模式)、preference系统和extension扩展系统,非常具有互联网客户端特征,大部分功能都可以重用。适合搭建互联网客户端平台,然而在中国能驾驭如此全面架构的互联网企业应该也不多,小步跑多迭代需要依赖可靠的平台。其多进程的架构模型,好处自然不用多说,然而需要的架构水平之高恐怕很难在实际开发中真正全部跑起来。

下面是所在团队使用chrome遇到问题时候,我做的一些研究分析,在分析前我对chrome内部的线程对象关系也很模糊,希望对他人有用。

chrome在线程和对象之间运作的一些基础技巧,总体来讲使用了三种设施,而不是一刀切,一个不规范的报告如下:

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
同一线程同一对象的方法异步调用     ScopedRunnableMethodFactory能保证对象自身异步方法调用的安全性

同一线程不同对象之间的通知       调用者派生NotificationObserver,通过NotificationRegistrar把自己注册到通知系统,通知源触发NotificationService          订阅模式,线程内同步调用,不存在对象生命周期的问题

MessageLoopProxy是线程安全的引用计数对象,内部封装了线程消息循环,MessageLoop销毁的时候会置空其MessageLoopProxy中的消息循环,支持线程安全的异步调用,适合在不同线程之间回调,回调过程是异步的,所以牵扯到的参数必须考虑对象生命周期以及对象方法调用的线程问题。我的想法就是回调的对象最好是生命周期跟application的一致的大对象,充当manager(这也正是一个管理者该做的事情),这样就能维持回调对象的合法性。

chrome推荐多使用非线程安全对象,也就是对象方法的执行都在对象创建的线程

Application<----------------------------------------------------------
   |--------|...                                                                        |
   V         V                                                                          |
UI线程    文件读写线程     数据库读写线程             网络线程 ...     |
UIMgr     FileIOMgr        DatabaseIOMgr           NetIOMgr       |
Obj...     Obj...                ...                             ...                |
Obj...     Obj...                ...                             ...                ---
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
在chrome中运用最多的是第二种技法,因为本身就没有那么多对象需要跨线程;其次是第三种,因为互联网客户端确实存在不少的多线程数据管理;最后是第一种技法,这种情况较为少见。

至于全面详尽的剖析,我没有精力或者暂时没有勇气去整理。后面代码的更新可能也会减缓,自己会考虑在如何使用这套框架做一些东西。
posted on 2011-09-14 23:45 万连文 阅读(7296) 评论(31)  编辑 收藏 引用 所属分类: 小作品

FeedBack:
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 02:32 | Enic
首先膜拜一下大神,,,

svn刚刚更新了代码,发现一点点小问题
file:examples\igantt\gantt_main.cpp
line:PathProvider(base::DIR_EXE, &res_dll);
编译器说不认识这货,,,


后来把这两货移动到 path_service.h, chrome编译通过
namespace base
{

bool PathProvider(int key, FilePath* result);
bool PathProviderWin(int key, FilePath* result);

}


再后来igantt在链接的时候连接器说不认识这货
_modp_b64_encode
估计要重新编译base lib,
正在编译ing
无效
搜索代码,好像这个函数确实没有。终于被我找到一个bug了,,,



××××××××××××××××××××××××××××××××××××××××
博客追了很久了,第一次冒泡。
说来惭愧,小弟道行不够,直接看chrome差点傻眼了,只能跟着大神的脚步了,,,希望跟得上,,,
再次谢过博主大神的无私奉献,,,
  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 08:22 | Async
效率真高,注意休息。罗马非一日之功  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)[未登录]
2011-09-15 08:45 | jacky_zz
真快啊!  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 10:41 | 万连文
@Enic
未维护工程的编译问题已经fix并提交了  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 12:20 | Skill
PathProvider找不到标识符 请问楼主是怎么解决?  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 12:43 | Skill
加上PathProvider的定义,又出现Base64Encode无法解析错误 是不是跟我的VS2010版本有关系啊  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 12:55 | 万连文
@Skill
请更新svn工程,我已经fix了  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 13:40 | ces
gfx::Size contents_size(contents_split_->GetMinimumSize());
运行时在这句出错.  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 13:43 | 小闵
gfx::Size contents_size(contents_split_->GetMinimumSize());
恩,一样,这里报错  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 14:34 | 万连文
@ces
@小闵
已经fix了空指针错误,请更新。因为砍掉了一些功能,所以有些地方没有屏蔽彻底。  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-15 16:27 | synthetic feather hair extensions
小第是佩服的五体投地啊,chromw的代码真的很精髓,速度不是一般的快。。  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-16 10:26 | ces
提点建议:最好保留chromium原来目录结构,文件名,命名,自己改或新建的加些注释,一来便于找bug,二来便于升级,否则改动量比较大  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-16 10:30 | ces
要是demos和chrome两个工程结合起来就好了.  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-16 10:43 | 万连文
@ces
其实我不打算去实现一个chrome或者一个qq之类,从我自己来讲对于升级已经了如指掌,真正想要依赖chrom的库可以以这个项目为学习目的,然后直接拿chrome的库编译使用在自己的工程中。不过您的建议非常好。  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)[未登录]
2011-09-16 10:51 | jacky_zz
提个建议啊,能把bin下的那个wmv换掉吗??太大了!!!!  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-16 10:57 | ces
哈,是能改就很厉害了,比如chromium改了base_tab.h,直接覆盖的话,就要改#ifndef CHROME_BROWSER_UI_VIEWS_TABS_BASE_TAB_H_
#define CHROME_BROWSER_UI_VIEWS_TABS_BASE_TAB_H_
为#ifndef __base_tab_h__
#define __base_tab_h__,另外所有的views都要改为view。个人觉得比较麻烦,哈哈,只是建议。多谢你的工作!  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-16 12:29 | 万连文
@jacky_zz
已经修改  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-09-21 13:53 | cac
是否有gridlayout的说明呢?
布局的这个不怎么看的懂  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-10-03 19:42 | nomane
这种研究大型代码的方式,特别是ui,我觉得还不如自己去实现来的有意义。  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-10-13 16:57 | ces
哈,好久没更新了!  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2011-12-14 20:21 |
长时间不更新了哦  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)[未登录]
2012-01-04 09:25 | lgh
我用chromium改了个ie内核的 浏览器,去掉webkit和一些工程后不到4m,还是大了点,ie.zhe2.com里下载
指教下,qq:44516189  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2012-02-05 22:37 | jiang.j.q
真的非常好。Demo里好像没有Tree控件,其他下次更新中给出一个。  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2012-04-20 17:02 | wow gold
现在chrome的发展趋势是很惊人  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2013-08-14 08:01 | BUG
WebBrowser 无法运行,点击导航会直接卡死,找了几天不知道原因,其他的flash点击播放也会卡死,WINXP VS2010,不知道为何?  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2013-08-14 22:19 | 无悔
果真大神啊,当我把chrome的源码编译通过的时候,一看代码,我就迷失了!!!  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2013-09-29 10:57 | 路过
拜读大神文章获益良多。上柱香。。  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2013-11-08 14:18 | 神灵舞
万大哥,可以大体说一下tab拖拽部分具体是哪几个类实现吗,还有类关系,谢谢啦  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2014-02-27 22:14 | 游客~
大哥看你博客名字 你是做过豌豆荚吗???  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)[未登录]
2014-03-05 23:23 | 万连文
@游客~

是的  回复  更多评论
  
# re: 基于Chrome开源提取的界面开发框架 三(.3)
2015-10-12 22:42 | mmocake
豌豆荚非常不错的应用  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


简历下载
联系我

<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(66)

随笔分类

随笔档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜