第二篇|腾讯开源项目盘点:ncnn、xLua、libco等

开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来。

腾讯开源了个很多非常有价值的项目,下面我们看看第二篇腾讯开源项目盘点。

****1、为手机端极致优化的高性能神经网络前向计算框架   ncnn   star:5666


ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。

基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。

特性:

支持卷积神经网络,支持多输入和多分支结构,可计算部分分支

无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架

纯 C++ 实现,跨平台,支持 android ios 等

ARM NEON 汇编级良心优化,计算速度极快

精细的内存管理和数据结构设计,内存占用极低

支持多核并行计算加速,ARM big.LITTLE cpu 调度优化

整体库体积小于 500K,并可轻松精简到小于 300K

可扩展的模型设计,支持 8bit 量化和半精度浮点存储,可导入 caffe 模型

支持直接内存零拷贝引用加载网络模型

可注册自定义层实现并扩展

恩,很强就是了,不怕被塞卷 QvQ

项目地址:

https://github.com/Tencent/ncnn


****2、OS平台的自动内存泄漏检测工具  MLeaksFinder  star:4159


MLeaksFinder 是 iOS 平台的自动内存泄漏检测工具,引进 MLeaksFinder 后,就可以在日常的开发,调试业务逻辑的过程中自动地发现并警告内存泄漏。

开发者无需打开 instrument 等工具,也无需为了找内存泄漏而去跑额外的流程。并且,由于开发者是在修改代码之后一跑业务逻辑就能发现内存泄漏的,这使得开发者能很快地意识到是哪里的代码写得问题。这种及时的内存泄漏的发现在很大的程度上降低了修复内存泄漏的成本。

MLeaksFinder 0.2 包括以下几个新特性:

assert 改为 alert

追踪对象的生命周期

查找循环引用链

项目地址:

https://github.com/Tencent/MLeaksFinder

官网:

http://wereadteam.github.io/2016/07/20/MLeaksFinder2/


3、C#(Unity、.Net、Mono)的lua编程解决方案 xLua   star:4096


xLua是C#(Unity、.Net、Mono)的lua编程解决方案,它支持Android、iOS、Windows、Linux,OSX等。

C#下Lua编程支持:

xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

xLua的突破:

xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;

出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;

编辑器下无需生成代码,开发更轻量;

更详细的特性、平台支持介绍请看这里。

项目地址:

https://github.com/Tencent/xLua


4、微信服务中广泛使用的C/C++协同程序库 libco  star:3900****


libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。 

libco通过仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松。同时库里面提供了socket族函数的hook,使得后台逻辑服务几乎不用修改逻辑代码就可以完成异步化改造。

libco的特性:

无需侵入业务逻辑,把多进程、多线程服务改造成协程服务,并发能力得到百倍提升;

支持CGI框架,轻松构建web服务(New);

支持gethostbyname、mysqlclient、ssl等常用第三库(New);

可选的共享栈模式,单机轻松接入千万连接(New);

完善简洁的协程编程接口

类pthread接口设计,通过co_create、co_resume等简单清晰接口即可完成协程的创建与恢复;

__thread的协程私有变量、协程间通信的协程信号量co_signal (New);

语言级别的lambda实现,结合协程原地编写并执行后台异步任务 (New);

基于epoll/kqueue实现的小而轻的网络框架,基于时间轮盘实现的高性能定时器;

项目地址:

https://github.com/Tencent/libco


5、致力于提高项目 UI 开发效率的解决方案 QMUI iOS    star:3660


QMUI iOS 是一个致力于提高项目 UI 开发效率的解决方案,其设计目的是用于辅助快速搭建一个具备基本设计还原效果的 iOS 项目,同时利用自身提供的丰富控件及兼容处理, 让开发者能专注于业务需求而无需耗费精力在基础代码的设计上。不管是新项目的创建,或是已有项目的维护,均可使开发效率和项目质量得到大幅度提升。

功能特性:

全局 UI 配置

只需要修改一份配置表就可以调整 App 的全局样式,包括颜色、导航栏、输入框、列表等。一处修改,全局生效。

UIKit 拓展及版本兼容

拓展多个 UIKit 的组件,提供更加丰富的特性和功能,提高开发效率;解决不同 iOS 版本常见的兼容性问题。

丰富的 UI 控件

提供丰富且常用的 UI 控件,使用方便灵活,并且支持自定义控件的样式。

高效的工具方法及宏

提供高效的工具方法,包括设备信息、动态字体、键盘管理、状态栏管理等,可以解决各种常见场景并大幅度提升开发效率。

支持iOS版本从 3.0.0 开始,QMUI 支持 iOS 9+,2.x 版本支持 iOS 8+。

项目地址:

https://github.com/Tencent/QMUI_iOS

官网:

https://qmuiteam.com/ios/

6、一款便携式调试工具,可随时随地在智能手机上查找错误并进行性能调整 GT   star:3560


GT(随身调)是APP的随身调试平台,它是直接运行在手机上的“集成调试环境”(IDTE, Integrated Debug Environment)。

利用GT,仅凭一部手机,无需连接电脑,即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。

如果您觉得GT提供的功能还不够满足您的需要,您还可以利用GT提供的基础API自行开发有特殊功能的GT插件,帮助您解决更加复杂的APP调试问题。

如何使用?

GT支持iOS和Android两个手机平台,其中:

iOS版是一个Framework包,必须嵌入APP工程,编译出带GT的APP才能使用;iPhone和iPad应用都能支持。

Android版由一个可直接安装的GT控制台APP和GT SDK组成,GT控制台可以独立安装使用,SDK需嵌入被调试的应用、并利用GT控制台进行信息展示和参数修改。

项目地址:

https://github.com/Tencent/GT


7、一款微信研发并日常使用的 APM(Application Performance Manage) Matrix    star:3554


Matrix 是一款微信研发并日常使用的 APM(Application Performance Manage),当前主要运行在 Android 平台上。 Matrix 的目标是建立统一的应用性能接入框架,通过各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。

Matrix 当前监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等等。

APK Checker: 针对 APK 安装包的分析检测工具,根据一系列设定好的规则,检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪

Resource Canary: 基于 WeakReference 的特性和 Square Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具

Trace Canary: 监控界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题

SQLite Lint: 按官方最佳实践自动化检测 SQLite 语句的使用质量

IO Canary: 检测文件 IO 问题,包括:文件 IO 监控和 Closeable Leak 监控

特性:

与常规的 APM 工具相比,Matrix 拥有以下特点:

APK Checker

具有更好的可用性:JAR 包方式提供,更方便应用到持续集成系统中,从而追踪和对比每个 APK 版本之间的变化

更多的检查分析功能:除具备 APKAnalyzer 的功能外,还支持统计 APK 中包含的 R 类、检查是否有多个动态库静态链接了 STL 、搜索 APK 中包含的无用资源,以及支持自定义检查规则等

输出的检查结果更加详实:支持可视化的 HTML 格式,便于分析处理的 JSON ,自定义输出等等

Resource Canary

分离了检测和分析部分,便于在不打断自动化测试的前提下持续输出分析后的检测结果

对检测部分生成的 Hprof 文件进行了裁剪,移除了大部分无用数据,降低了传输 Hprof 文件的开销

增加了重复 Bitmap 对象检测,方便通过减少冗余 Bitmap 数量,降低内存消耗

Trace Canary

编译期动态修改字节码, 高性能记录执行耗时与调用堆栈

准确的定位到发生卡顿的函数,提供执行堆栈、执行耗时、执行次数等信息,帮助快速解决卡顿问题

自动涵盖卡顿、启动耗时、页面切换、慢函数检测等多个流畅性指标

SQLite Lint

接入简单,代码无侵入

数据量无关,开发、测试阶段即可发现SQLite性能隐患

检测算法基于最佳实践,高标准把控SQLite质量*

底层是 C++ 实现,支持多平台扩展

IO Canary

接入简单,代码无侵入

性能、泄漏全面监控,对 IO 质量心中有数

兼容到 Android P

项目地址:

https://github.com/Tencent/matrix


8、一个基于 tmt-workflow 前端工作流的开发工具 WeFlow   star:3082


一个基于 tmt-workflow  前端工作流的开发工具。 (已支持最新版 Node.js)

目前已支持了:微信游戏、微信·朋友圈广告、微信·城市服务等项目的 第三方合作团队 的前端构建工作,如果你更习惯命令行操作,可以直接使用 WeFlow 的核心:基于 Gulp 开发的 tmt-workflow :)

功能特性:

自动化流程:

Less / Sass -> CSS 编译

CSS Autoprefixer 前缀自动补全

自动生成图片 CSS 属性,width & height 等

CSS cssnano 压缩

CSS Sprite 雪碧图合成

Retina @2x & @3x 自动生成适配

Imagemin 图片压缩

JS 合并压缩

EJS 模版语言

调试 & 部署:

监听文件变动,自动刷新浏览器 (LiveReload)

S/FTP 发布部署

Zip 项目打包

解决方案集成:

px -> rem 兼容适配方案

智能 WebP 解决方案

去缓存文件 Reversion (MD5) 解决方案

项目地址:

https://github.com/Tencent/WeFlow

官网:

https://weflow.io/


9、腾讯QQ团队开源的集群大规模服务引擎 MSEC star:2615


毫秒服务引擎(msec, 取英文名Mass Service Engine in Cluster的首字母组合)是腾讯的一个开源框架,适用于在廉价机器组成的集群上开发和运营分布式后台服务。毫秒服务引擎集RPC、名字发现服务、负载均衡、业务监控、灰度发布、容量管理、日志管理、key-value存储于一体,目的是提高开发与运营的效率和质量。 

毫秒服务引擎的创作冲动和构建经验,来自QQ后台团队超过10年的运营思考。它是一整套解决方案,但也可以拆分的来使用其中的监控、key-value存储单品。 

应用场景:

web console:整个系统的运营管理中心。主要是:

① LB是名字发现服务和负载均衡。

② remote_shell是远程文件传输与远程命令执行服务。

③ tomcat提供web管理界面,管理的数据保存在mysql里。

业务运营服务器:部署开发框架和业务逻辑代码,处理业务请求。

log服务器:提供业务log的存储和查询服务。Log存储在mysql表里。

monitor服务器:提供业务上报信息的存储和查询服务。业务上报信息存储在内存里,推荐内存8G~16G。定时dump到磁盘的方式防止数据掉电丢失。

key-value存储服务:相对整个框架比较独立,按需选用。

特点与优势:

模块间访问采用RPC的方式,开发者不用关注网络与报文格式,像写单机程序一样开发分布式服务。

负载自动均衡与容错,对于单机故障、局部网络波动等状况自动应对,服务高可用性。

支持C/C++与Java语言,后续还将继续丰富;如果选择C/C++语言,支持协程,兼具开发和运行效率。

Web化的管理界面,在web界面完成配置、发布、监控、日志、Key-value存储集群管理等所有操作。

需要复杂部署的服务器都采用Docker镜像的方式安装,使得部署与上手非常容易。

相比使用其他开源组件拼凑起来的解决方案,毫秒服务引擎更加的体系化,对团队的规范更加到位。

项目地址:

https://github.com/Tencent/MSEC


****10、微信小程序解决方案 westore  star:2596


1KB JavaScript 覆盖状态管理、跨页通讯、插件开发和云数据库开发。

众所周知,小程序本身的工程化十分优秀,不管从组件化、开发、调试、发布、灰度、回滚、上报、统计、监控和最近的云能力都非常完善。据统计,开发小程序使用最多的技术栈是使用小程序本身的开发工具和语法,所以最大的痛点只剩下状态管理和跨页通讯。

市面上常见的解决方案,通过页面或组件各自的 setData 再加上各种父子、祖孙、姐弟、姑姑与堂兄等等组件间的通讯会把程序搞成一团浆糊,如果再加上跨页面之间的组件通讯,会让程序非常难维护和调试。

受腾讯近期开源的Web开发框架 Omi 框架启发,Westore 志在顺从小程序的设计,助力小程序状态管理、插件开发、云数据开发的能力。

640?wx_fmt=png

小程序解决方案 Westore和 Omi 框架都是使用 Web Components 渲染组件,以搭积木的方式搭建 Web 页面。

640?wx_fmt=png

设计极简:

拥有和 Omi 同样简洁的 Store API

超小的代码尺寸(包括 json diff 共100多行)

尊重且顺从小程序的设计(其他转译库相当于反其道行)

功能全面:

小程序状态管理(既可中心化,也可去中心化,亦可混合管理状态)

WestoreCloud小程序+云敏捷开发

专为小程序插件开发定制了模板

小程序组件和纯组件开发

项目地址:

https://github.com/Tencent/westore

代码交流 2021