騰訊十大最受歡迎的開源項目!
高性能通用 key-value 組件
MMKV 是基於 mmap 內存映射的 key-value 組件,底層序列化 / 反序列化使用 protobuf 實現,性能高,穩定性強。從 2015 年中至今在微信上使用,其性能和穩定性經過了時間的驗證。近期也已移植到 Android / macOS / Win32 / POSIX 平臺,一併開源。
MMKV 原理
-
內存準備
通過 mmap 內存映射文件,提供一段可供隨時寫入的內存塊,App 只管往裏面寫數據,由操作系統負責將內存回寫到文件,不必擔心 crash 導致數據丟失。 -
數據組織
數據序列化方面我們選用 protobuf 協議,pb 在性能和空間佔用上都有不錯的表現。 -
寫入優化
考慮到主要使用場景是頻繁地進行寫入更新,我們需要有增量更新的能力。我們考慮將增量 kv 對象序列化後,append 到內存末尾。 -
空間增長
使用 append 實現增量更新帶來了一個新的問題,就是不斷 append 的話,文件大小會增長得不可控。我們需要在性能和空間上做個折中。
項目地址
開源地址:https://github.com/Tencent/MMKV
APIJSON
APIJSON 是一種專爲 API 而生的 JSON 網絡傳輸協議 以及 基於這套協議實現的 ORM 庫。
爲 簡單的增刪改查、複雜的查詢、簡單的事務操作 提供了完全自動化的萬能 API。
能大幅降低開發和溝通成本,簡化開發流程,縮短開發週期。
適合中小型前後端分離的項目,尤其是 BaaS、Serverless、互聯網創業項目和企業自用項目。
對於前端
-
不用再向後端催接口、求文檔
-
數據和結構完全定製,要啥有啥
-
看請求知結果,所求即所得
-
可一次獲取任何數據、任何結構
-
能去除重複數據,節省流量提高速度
對於後端
-
提供通用接口,大部分 API 不用再寫
-
自動生成文檔,不用再編寫和維護
-
自動校驗權限、自動管理版本、自動防 SQL 注入
-
開放 API 無需劃分版本,始終保持兼容
-
支持增刪改查、模糊搜索、正則匹配、遠程函數等
項目地址
github 地址:https://github.com/Tencent/APIJSON
跨平臺跨業務的終端基礎組件
Mars 是微信官方的跨平臺跨業務的終端基礎組件。
-
comm:可以獨立使用的公共庫,包括 socket、線程、消息隊列、協程等;
-
xlog:高可靠性高性能的運行期日誌組件;
-
SDT:網絡診斷組件;
-
STN:信令分發網絡模塊,也是 Mars 最主要的部分。
項目地址
開源地址:https://github.com/Tencent/Mars
高性能神經網絡前向計算框架
ncnn 是一個爲手機端極致優化的高性能神經網絡前向計算框架。ncnn 從設計之初深刻考慮手機端的部署和使用。無第三方依賴,跨平臺,手機端 cpu 的速度快於目前所有已知的開源框架。基於 ncnn,開發者能夠將深度學習算法輕鬆移植到手機端高效執行,開發出人工智能 APP,將 AI 帶到你的指尖。ncnn 目前已在騰訊多款應用中使用,如 QQ,Qzone,微信,天天 P 圖等。
功能概述
-
支持卷積神經網絡,支持多輸入和多分支結構,可計算部分分支
-
無任何第三方庫依賴,不依賴 BLAS/NNPACK 等計算框架
-
純 C++ 實現,跨平臺,支持 android ios 等
-
ARM NEON 彙編級良心優化,計算速度極快
-
精細的內存管理和數據結構設計,內存佔用極低
-
支持多核並行計算加速,ARM big.LITTLE cpu 調度優化
-
支持基於全新低消耗的 vulkan api GPU 加速
-
整體庫體積小於 700K,並可輕鬆精簡到小於 300K
項目地址
開源地址:https://github.com/Tencent/ncnn
Android 熱補丁解決方案
Tinker 是微信官方的 Android 熱補丁解決方案,它支持動態下發代碼、So 庫以及資源,讓應用能夠在不需要重新安裝的情況下實現更新。當然,你也可以使用 Tinker 來更新你的插件。
它主要包括以下幾個部分:
-
gradle 編譯插件: tinker-patch-gradle-plugin
-
核心 sdk 庫: tinker-android-lib
-
非 gradle 編譯用戶的命令行版本: tinker-patch-cli.jar
項目地址
github 地址:https://github.com/Tencent/tinker
c/c++ 協程庫
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
Android 插件框架
Shadow 是一個騰訊自主研發的 Android 插件框架,經過線上億級用戶量檢驗。Shadow 不僅開源分享了插件技術的關鍵代碼,還完整的分享了上線部署所需要的所有設計。
與市面上其他插件框架相比,Shadow 主要具有以下特點:
複用獨立安裝 App 的源碼:插件 App 的源碼原本就是可以正常安裝運行的。
零反射無 Hack 實現插件技術:從理論上就已經確定無需對任何系統做兼容開發,更無任何隱藏 API 調用,和 Google 限制非公開 SDK 接口訪問的策略完全不衝突。
全動態插件框架:一次性實現完美的插件框架很難,但 Shadow 將這些實現全部動態化起來,使插件框架的代碼成爲了插件的一部分。插件的迭代不再受宿主打包了舊版本插件框架所限制。
宿主增量極小:得益於全動態實現,真正合入宿主程序的代碼量極小(15KB,160 方法數左右)。
Kotlin 實現:core.loader,core.transform 核心代碼完全用 Kotlin 實現,代碼簡潔易維護。
項目地址
github 地址:https://github.com/Tencent/Shadow
新生的跨端開發框架
Hippy 是一個新生的跨端開發框架,目標是使開發者可以只寫一套代碼就直接運行於三個平臺(iOS、Android 和 Web)。Hippy 的設計是面向傳統 Web 開發者的,特別是之前有過 React Native 和 Vue 的開發者用起來會更爲順手,Hippy 致力於讓前端開發跨端 App 更加容易。
到目前爲止,騰訊內已經有了 27 款流行 App 在使用 Hippy 框架,包括手機 QQ、手機 QQ 瀏覽器、騰訊視頻 App,QQ 音樂 App 等,每日觸達數億用戶。
特徵
-
爲傳統 Web 前端設計,官方支持
React
和Vue
兩種主流前端框架。 -
不同的平臺保持了相同的接口。
-
通過 JS 引擎 binding 模式實現的前終端通訊,具備超強性能。
-
提供了高性能的可複用列表。
-
皆可平滑遷移到 Web 瀏覽器。
-
完整支持 Flex 的佈局引擎。
項目地址
github 地址:https://github.com/Tencent/Hippy
小程序支持組件化開發的框架
WePY (發音: /'wepi/) 是一款讓小程序支持組件化開發的框架,通過預編譯的手段讓開發者可以選擇自己喜歡的開發風格去開發小程序。框架的細節優化,Promise,Async Functions 的引入都是爲了能讓開發小程序項目變得更加簡單,高效。
同時 WePY 也是一款成長中的框架,大量吸收借鑑了一些優化前端工具以及框架的設計理念和思想。如果 WePY 有不足地方,或者你有更好的想法,歡迎提交 ISSUE 或者 PR。
特性:
-
類 Vue 開發風格
-
支持自定義組件開發
-
支持引入 NPM 包
-
支持 Promise
-
支持 ES2015+ 特性,如 Async Functions
-
支持多種編譯器,Less/Sass/Stylus/PostCSS、Babel/Typescript、Pug
-
支持多種插件處理,文件壓縮,圖片壓縮,內容替換等
-
支持 Sourcemap,ESLint 等
-
小程序細節優化,如請求列隊,事件優化等
項目地址
github 地址:https://github.com/Tencent/wepy
物聯網領域開發的實時操作系統
TencentOS tiny 是騰訊面向物聯網領域開發的實時操作系統,具有低功耗,低資源佔用,模塊化,安全可靠等特點,可有效提升物聯網終端產品開發效率。TencentOS tiny 提供精簡的 RTOS 內核,內核組件可裁剪可配置,可快速移植到多種主流 MCU (如 STM32 全系列) 及模組芯片上。而且,基於 RTOS 內核提供了豐富的物聯網組件,內部集成主流物聯網協議棧(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物聯網終端設備及業務快速接入騰訊雲物聯網平臺。
TencentOS tiny 整體架構
TencentOS tiny 主體架構圖,從下到上主要包括:
CPU 庫 :TencentOS tiny 支持的 CPU IP 核架構,當前主要支持 ARM Cortex M0/3/4/7,Cortex A7,RISC-V、MSP430、AVR、STM8 等。
驅動管理層 :包括板級支持包(BSP,主要由 MCU 芯片廠家開發與維護)、硬件抽象層(HAL,主要由 TencentOS tiny 提供,方便不同芯片的適配與移植)、設備驅動(Drivers,例如 Wi-Fi、GPRS、LoRa 等模塊的驅動程序)。
內核 :TencentOS tiny 實時內核包括任務管理、實時調度、時間管理、中斷管理、內存管理、異常處理、軟件定時器、鏈表、消息隊列、信號量、互斥鎖、事件標誌等模塊。
IoT 協議棧:TencentOS tiny 提供 lwip、AT Adapter、SAL 層,支持不同的網絡硬件,例如以太網、串口 Wi-Fi、GPRS、NB-IoT、4G 等通信模塊。TCP/IP 網絡協議棧上提供常用的物聯網協議棧,例如 CoAP、MQTT,支撐終端業務快速接入騰訊雲。
安全框架:TencentOS tiny 爲了確保物聯網終端數據傳輸安全以及設備認證安全,提供了完整的安全解決方案。安全框架提供的 DTLS 和 TLS 安全協議,加固了 COAP 及 MQTT 的傳輸層,可確保物聯網終端在對接騰訊雲時實現安全認證和數據加密;另外針對低資源的終端硬件,安全框架還提供與騰訊雲 IoTHub 配套的密鑰認證方案,確保資源受限設備也能在一定程度上實現設備安全認證。
組件框架:TencentOS tiny 提供文件系統、KV 存儲、自組網、JS 引擎、低功耗框架、設備框架、OTA、調試工具鏈等一系列組件,供用戶根據業務場景選用。
項目地址
github 地址:https://github.com/Tencent/TencentOS-tiny
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Z2FN1lD2wgx2DY2P3ah6Ag