• 用了半年chromium,说说心得


    前一段参与了一个项目,项目内部使用了chromium作为基础库,这也是我第一次接触chromium,到现在差不多半年时间,这里说说使用心得。

    优点

    先进的多线程任务处理理念:少用共享内存,少用锁,多用任务分发,特定的task放在固定的sequence中。具体可以看这篇文章:

    多线程开发中,多用消息传递,少用锁

    跨平台,且功能强大,比如网络通信、进程间通信、如何启动进程并传递参数等,都有比较好用的封装。

    有自己的一套编译构建规则GN,这貌似不能算作一个优点,毕竟学习成本高,但是它和bazel类似,你会感觉很熟悉。配置了很严格的编译参数,确保代码的健壮性。很多在其它地方(-Wall -Werror等)可以编译通过的代码,在chromium里都编译不通过,具体为啥我还没来得及深入研究。

    内部集成了很多检测机制,编译时检查和运行时检查,可以检查某个操作是否在特定的sequence中,如果不在的话,debug模式时会触发断言。这样可以确保很多操作是线程安全的,进一步增强代码的健壮性。

    具体可以看看这篇文章:https://aijishu.com/a/1060000000091082#item-2-1

    缺点

    整个chromium太大了,我自己本地看了下,除去.git,大概有60G左右,配置它的环境非常麻烦,需要翻墙,拉取它所有的依赖库也特别耗时。

    因为项目特别大,编译时间特别长,特别是全量编译。

    项目大,其实不适合做普通项目的基础库,普通项目用不到chromium的大多数功能,还要忍受它占用空间大,配置环境麻烦,编译时间长的缺点。而且编出来的可执行文件体积很大,特别是做SDK,如果对体积有要求的话,估计不能满足要求。

    不能引用其他的第三方C++动态链接库或者静态链接库,因为它内部集成了一套自己魔改的C++源码,使用的这套C++源码做的编译,和外部的三方库不兼容。比如一个std::string,正常库中的符号应该是std::basic_string,而在chromium中,它却是std::__1::basic_string,导致和其他库不兼容,集成时候会报找不到相关符号。

    因为它内部集成了一套自己魔改的C++源码,所以裁剪时也不太方便,其中的base、sql等模块裁剪还挺容易。

    而有些模块需要强依赖这套内部的C++源码才能编译成功,无法裁剪,最近我也是在裁剪这块踩了好多坑。

    google还提供了一个mini-chromium project,其实就是base的子集,就是给那些想用base作为基础库的项目使用的,但是这个project功能太少,用处不大。

    遇到了问题在网上找答案不是很方便,毕竟用的人少。

    建议

    貌似edge浏览器就是在chromium的基础上开发的,但小项目建议就别用它了,太麻烦,个人看法,单纯从基础库的角度来说,不如boost方便。

    不知道大家对chromium怎么看,可以留言聊聊。

  • 相关阅读:
    【MySQL】MySQL数据库锁使用与InnoDB加锁的原理解析(MySQL专栏启动)
    处理Blob打印Excel
    【目标检测】目标检测的评价指标(七个)
    Wlan三层组网+三层漫游
    @Transient注解
    测试面经 | 从测试螺丝钉到大厂测试开发,三点成长心得和面试经验
    golang 库之「依赖注入」
    JAVA calendar
    计算机视觉概述
    信息学奥赛一本通 2075:【21CSPJ普及组】插入排序(sort) | 洛谷 P7910 [CSP-J 2021] 插入排序
  • 原文地址:https://blog.csdn.net/qq_29426201/article/details/126493458