Cef7 -- 启动慢的问题,增加loading

Cef内嵌在MFC应用程序中,去除标题栏,全屏显示,同时要保留任务栏。鼠标放到应用程序图标上(任务栏图标)显示标题。启动应用程序,从MFC应用初始化到CEF首页加载完成,大概需要6到8秒的时间,debug模式(会加载一些额外的符号信息)。针对以上需求,依次汇总一下解决办法(网上搜到的)。

  • Cef 启动慢

抛开技术问题,有几个设置会导致Cef启动慢。

  1. 局域网设置,【自动检测配置】;

Cef7 -- 启动慢的问题,增加loading

  1. Chrome高级设置,【使用网络服务帮助解决导航错误】;

Cef7 -- 启动慢的问题,增加loading

CSDN有BUG哈哈,数字序号不是连续操作,不能自动更新。所以上面会出现两个标题1。

  1. Cef内部不使用代理服务

    // Parse command-line arguments.
    CefRefPtr<CefCommandLine> command_line = CefCommandLine::CreateCommandLine();
    command_line->InitFromString(::GetCommandLineW());

    // 不使用代理,加载速度会变快
    command_line->AppendSwitch("no-proxy-server");

内嵌程序启动慢,这个需要写程序测试一下,好多性能优化的思路,第一步基本都是找到哪里耗时(哪里慢),也及时找到影响性能的关键所在。这里从MFC应用初始化到Cef首页加载完成,分段做多个时间统计,基本分为MFC启动部分,Cef启动部分。

操作起来很简单,也不需要绝对精确,毫秒级的用户体验也不会那么明显。这里用到C11。顺便提一句,C11的很多特性都很好用,对时间戳的支持,对线程的支持,新增的auto类型,lamda表达式,感觉C++有种越来越现代的感觉,简直爽的不要。以前C/C++给人的感觉就是低调有内涵,语言层面的支持,感觉一直变化不大,或者是我关注的太少。

正对CEF启动慢的问题,在MFC应用初始化和CEF首页加载完成OnLoadEnd之间加载一个gif文件。网上有个开源库,叫PictureEx,可以处理空间播放图片的问题(gif是一系列图片顺序播放的结果)。由于通过PictureEx加载gif可能会存在gif失真的情况(什么原因我不太清楚),所以改用opencv 来播放视频,这里确实有点儿大材小用了,其实主要也是借机,了解一下opencv,以后陆续会对opencv的使用,做点儿总结,顺便学习记录一下。

  • MFC部分特性

标题栏通过border属性可以控制,保留任务栏的全屏,需要获取任务栏以上屏幕大小,操作如下

// 任务栏点击最小化/最大化
    ModifyStyle(0, WS_SYSMENU | WS_MINIMIZEBOX);

    int cx = ::GetSystemMetrics(SM_CXFULLSCREEN);
    int cy = ::GetSystemMetrics(SM_CYFULLSCREEN);
    CRect rect;
    SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
    cy = rect.bottom;
    MoveWindow(0, 0, cx, cy);

设置窗口标题,开始以为无任务栏,无法显示标题(任务栏图标),原来是可以的

AfxGetMainWnd()->SetWindowText(str.c_str()); 

MFC消息发送,参数传递,异步消息需要保证参数的作用域,否则参数无法正确传递。 

MFC的问题没怎么详细说,其实也没必要,百度一下基本都有了。基本没有百度解决不了的MFC问题。今天就写到这儿。