第二篇|腾讯开源项目盘点: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?志在順從小程序的設計,助力小程序狀態管理、插件開發、云數據開發的能力。
小程序解決方案?Westore和 Omi 框架都是使用 Web Components 渲染組件,以搭積木的方式搭建 Web 頁面。
設計極簡:
擁有和 Omi 同樣簡潔的 Store API
超小的代碼尺寸(包括 json diff 共100多行)
尊重且順從小程序的設計(其他轉譯庫相當于反其道行)
功能全面:
小程序狀態管理(既可中心化,也可去中心化,亦可混合管理狀態)
WestoreCloud小程序+云敏捷開發
專為小程序插件開發定制了模板
小程序組件和純組件開發
項目地址:
https://github.com/Tencent/westore
請各位保持關注「騰訊技術工程」公眾號,我們會持續更新騰訊開源項目。
總結
以上是生活随笔為你收集整理的第二篇|腾讯开源项目盘点:ncnn、xLua、libco等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一篇|腾讯开源项目盘点:WeUI,We
- 下一篇: 愚人节防骗?你需要一本《2018反欺诈白