屌炸天的内核来袭,史上最小chromium内核miniblink!

转载自:https://zhuanlan.zhihu.com/p/22611497?utm_source=tuicool&utm_medium=referral


一直忘记发一个miniblink的介绍了。

miniblink是什么?

Miniblink是一个全新的、追求极致小巧的浏览器内核项目,

其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blink。

Miniblink保持了10M左右的极简大小,是所有同类产品最小的体积,同时支持windows xp、npapi。

为什么要做miniblink?

市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit、cef、nwjs、electron。

cef:优点是由于集成的chromium内核,所以对H5支持的很全,同时因为使用的人也多,各种教程、示例,资源很多。但缺点很明显,太大了。最新的cef已经夸张到了100多M,还要带一堆的文件。同时新的cef已经不支持xp了(chromium对应版本是M49)。而且由于是多进程架构,对资源的消耗也很夸张。如果只是想做个小软件,一坨文件需要带上、超大的安装包,显然不能忍受。

nwjs,或者最近大火的electron:和cef内核类似,都是chromium内核。缺点和cef一模一样。优点是由于可以使用nodejs的资源,同时又自带了各种api的绑定,所以可以用的周边资源非常丰富;而基于js的开发方案,使得前端很容易上手。所以最近N多项目都是基于nwjs或electron来实现。例如vscode,atom等等。

原版webkit:现在官网还在更新windows port,但显然漫不在心,而且最新的webkit也很大了,超过20几M。最关键的是,周边资源很少,几乎没人再基于webkit来做开发。同时由于windows版的saferi已经停止开发了,所以用webkit就用不了他的dev tools了。这是个大遗憾。

WKE:这是个很老的webkit内核的裁剪版了。小是小,但bug太多了。

那么关键点来了,使用miniblink有啥好处呢??

首先,miniblink对大小要求非常严格。原版chromium、blink里对排版渲染没啥大用的如音视频全都被砍了,只专注于网页的排版和渲染。甚至为了裁剪大小,我不惜使用vc6的crt来跑mininblink(见我上篇文章)。这个也算前无古人后无来者了。

其次,miniblink紧跟最新chromium,这意味着chromium相关的资源都可以利用。在未来的规划里,我是打算把electron的接口也加上的,这样可以无缝替换electron。使用miniblink的话,开发调试时用原版electron,发布的时候再替换掉那些dll,直接可以无缝切换,非常方便。

miniblink如何使用?

Miniblink导出了CEF、WKE的接口,可以直接无缝替换现有的CEF、WKE项目。

同时,正在开发electron的接口,大家拭目以待。

目前miniblink放出了一个小demo,从demo里可以看到,brackct这个基于cef的开源编辑器,已经顺利由miniblink跑起来了。未来如果electron的接口做好,把vscode跑起来,那就屌炸天了。

miniblink如何裁剪到这么小?

这个比较复杂了。主要就是把blink从chromium抽离了出来,同时补上了cc层(硬件渲染层)。现在的blink,已经不是当年的那个webkit了,渲染部分全走cc层,复杂无比。我这大半年都在重写他那个蛋疼又复杂的cc层。

和webkit比,miniblink架构有什么优势

现在的webkit版本,已经比miniblink落后太多了。blink一直在加入各种极富创造力和想象力的功能、组件。例如,blink早就加入多线程解析html token、blink gc回收器、多线程录制回放渲染机制。这些能让blink的解析渲染速度极大提升。下一次,我会先开源出blink gc组件,这东西很有意思,在c++里硬是搞出了一个垃圾回收机制,能让你像写java一样写c++。

miniblink有计划开源吗?

正有此意。一个成熟的产品,需要更多人去测试和使用,虽然我完全不指望会有人给我提代码。。。。

但由于现在bug还比较多,感觉开源出去不负责。不过谁感兴趣的话,可以发邮件到weolar@qq.com和我索要。

miniblink还在开发中,目前只有内测版。 我会持续维护这个项目的,我相信,这个才是此项目最有价值的地方

更多动态可以关注我的博客: 炫酷的miniblink demo已上传,基于bracket


重写 支持库说明: 本次更新完全使用C语言重写 ,相比易语言, 稳定性提升 ,速度提升 , C语言原生调用,带来原汁原味的快感。 【C语言支持库的好处】         原生调用,方法、函数、类型等即得即用,无需转换xx类型及读写内存。        指针、内存、回调统统搞定        cdcel与stdcall直接调用,无需自己实现转换,稳定性+100%        使用易语言官方提供的、有保障的头文件,错误率<0.1%直接编译生成动态库 fne,静态库lib,无需转换,安全稳定        超过数千行的源代码,完整重构        对原支持库的逻辑和结构进行优化 总结起来三个字: 稳     快     好 -------------------------------------------------------------------- miniblink内核dll更新迭代次数: 20次以上(距离上次易语言正式版支持库发布) 累计BUG修复 约:110+项 累计功能性改进约:170+项 再次感谢 miniblink作者的更新维护。 【性能提升】         启动速度提升:30%以上,xx经过打开到加载完毕时间统计获得。         操作响应速度提升明显。  在不特别复杂的网页逻辑下,响应速度提升明显。         动画速度与显示效果提升,使效果更加平滑。  具体可以参考组合框、颜色选择器等组件。 ------------------分割线 ---------------- 【更新日志】 【正式版】2020年11月25日 版本号: 1.6.1125 更新说明:         修复:                 *新窗口无法弹出的问题                 *ajax失效问题                 *修复新窗口无法挂接事件的问题                 *获取所有Cookie() 会崩溃的问题                 *修复新窗口创建失败的问题         新增:                 *新增一个事件, #浏览器事件_绘画事件, 浏览器发生重画时触发, 使用 挂接事件() 进行挂接         删除:                 *弃用支持库里所有对cookie进行二次封装的命令 , 所有cookie相关的命令都是原封调用node.dll                         设置cookie请调用 设置cookie_CURL(), 该命令原封调用node.dll的wkeSetCookie接口                         支持库所有cookie相关的命令都是原封调用node.dll, 不会做任何修改 【正式版】2020年11月24日 更新说明: 修复:                 *优化程序稳定性                 *修复几处已知的内存泄漏问题                 *修复 特殊功能.取post数据() 可能会崩溃的问题                 *修复WKE_填表 已知问题, 类内的方法基本都重写了                 *修复部分网页打开会崩溃问题                 *修复WKE_填表.post() url数据类型问题                 *获取HTTP头字段信息(), 参数key类型改为文本型                 *获取响应HTTP头字段信息(), 参数key类型改为文本型                 *调用DevTool(), 参数3不在内部进行编码, 传递的文本必须先转换成utf8在传递进去                 *优化启动速度                 *修复ajax.post 数据过长崩溃问题                 *修复取框架文本错误问题, 取网页源码支持获取指定框架了         新增:                 事件:                         *打开文件对话框, 全局事件, 只有第一个精易web浏览器组件收到此消息                         *保存文件对话框, 全局事件, 只有第一个精易web浏览器组件收到此消息                         *网页图标改变                 命令:                         *wke_消息循环, 此方法会屏蔽易语言自带的消息循环, 使得精易web浏览器组件能使用tab键切换焦点                         *wke
前言 本程序基于精易Web浏览器支持库(miniblink内核) 请在打开本代码前保证安装了“精易Web浏览器支持库”,否则会导致无法打开等极度严重的Bug 【一些问题】摘自帖子精易Web浏览器支持库(miniblink内核) Q. 为什么提示找不到dll命令? A. 请将"node.dll" 这个文件放到易语言 根目录,易语言/lib 目录下,调试时会从这两个文件夹里寻找"node.dll"文件,"这两个目录必须要要node.dll"如果是编译的版本,请将"node.dll" 存放到你编译好的程序的目录下 这里是程序中使用的Dll或Exe的查毒:截图.exe exdui.dll 程序特点(下面是部分介绍和截图): 1.首先程序使用了多标签(多Tabs)构架,对于很多人来说,这个构架并不是很新颖。但是,本浏览器(下称“MiniBlink浏览器”)使用的是多进程操纵,即一个浏览器便是一个进程,这样有什么好处呢? 1.由于Miniblink的特性,在统一进程下,如果创建多个浏览框窗口,如果修改单个的Cookie目录或者缓存目录,则本进程下的全部浏览框的Cookie目录或者缓存目录都会被修改,那么,如果采用多进程构架的话,就不存在这个问题,所以“MiniBlink浏览器”经过您简单的修改,每个浏览框都可以独立Cookie缓存,何乐而不为呢? 2.众所周知,Miniblink浏览框采用单线程渲染界面,那么假如你在窗口中创建过多的浏览框且都处于访问状态的话,实际访问速度就会大大的下降,而“MiniBlink浏览器”使用多进程,平均访问速度更加快。 原理介绍:多进程之间怎么进行很好的控制呢?其实就是一件简单的进程通信在主进程中,程序保留了对于子进程的信息记录,标识保留在“高级选择夹_Ex”中的“子夹图标”这一函数中!!(这里要提出一个警告,“高级选择夹_Ex”中的“子夹图标”保留的为当前浏览框的标识,而不是真正是图标句柄,因为开始没有考虑图标的问题,后来也懒得改了,“SetImg”才是真正设置图标的命令!!) 2.主程序全局使用“Ex_DirectUI” 包含的Ex组件 介绍 构造 小按钮_Ex 创建一个图片小按钮 其实是一个简单的图像绘制的按钮 高级选择夹_Ex 本组件是一个模拟高级选择夹的组件 State拼凑组合而成 书签夹_Ex 创建一个书签 State拼凑组合而成 3.0模块中包含的部分组件 图片框,编辑框什么的 无 - 在代码中,其实“Ex_DirectUI”部分的代码是非常简洁易懂的,您可以直接看代码,上方的表格仅供参考 3.书签夹 书签夹相当于是很多图像的集合,而文件夹和书签夹的完美结合又和收藏夹有关系了,“MiniBlink浏览器”中很多代码是互相使用,互相联系的(其实是一个Ex_DirectUI菜单处理) 4.收藏夹 收藏夹对应的目录是“Database”,程序读取收藏夹中URL的方法是递归,注:“集_书签_保留菜单”是处理“书签夹”中的文件夹菜单。菜单一览: 收藏夹管理部分(这部分我觉得我还是做得很上心的): 5.高级选择夹 这么重要的东西我差点忘了说了:这里的图标和按钮位置是经过我严(粗)格(心)的计算得出来的: 同时为了达到和主流浏览器一样的选择夹效果,我还专(才)门(怪)计算了选择夹应该有的宽度和位置。 6.百度搜索框 好像比较鸡肋: 7.下载 现在还是在使用“_ download tool.exe” 8.更多功能更多功能可以自行探索哦!!!毕竟这里面还有不少功能呢!“MiniBlink浏览器”已经完善了大部分人定制浏览器的大部分功能 PS 使用前请将“浏览器 - 附加.e”编译为“NewProcess.exe”(子浏览框),将“文件_下载.e”编译为“_ download tool.exe”!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值