如何看待阿里巴巴最近weex 开源项目的 Weex Ui

weex 实践(iOS 视角)原文链接:
weex学习也有一段时间了,关于weex在三端的使用,我们也做了实战开发,渲染时间在100-300ms之间,各平台体验相比H5都有极大的提升,此文章在iOS的角度记录开发过程中遇到的一些问题,如果想要了解前端和安卓的开发可以参考我同事写的一些内容、
weexSDK接入
WXDevtool工具使用
接下来我以订单页面为例,来描述一些用到的weex相关知识点,如下图描述
1. 初始化SDK,注册module、protocol、component
-(void)initWeex{
[WXSDKEngine initSDKEnviroment];
[WXSDKEngine registerModule:@"shopBase" withClass:[BaseModule class]];
[WXSDKEngine registerModule:@"shopModal" withClass:[WXModuleAnno class]];
[WXSDKEngine registerHandler:[WXImgLoaderDefaultImpl new] withProtocol:@protocol(WXImgLoaderProtocol)];
[WXSDKEngine registerHandler:[WXSJNetworkDefaultlmpl new] withProtocol:@protocol(WXNetworkProtocol)];
[WXSDKEngine registerComponent:@"a" withClass:NSClassFromString(@"WXPushComponent")];
2. 实现类似选项卡的效果如图片第一点描述同一个viewcontroller多个view间的切换,此处本店订单和我的订单为不同的view,点击来回切换,达到类似选项卡的效果先贴段渲染weex页面的基础代码
-(void)renderWeexWithUrl:(NSString *)url{
_instance = [[WXSDKInstance alloc] init];
_instance.viewController = self;
CGFloat width = self.view.frame.size.width;
_instance.frame = CGRectMake(self.view.frame.size.width-width, 0, width, _weexHeight);
_instance.onCreate = ^(UIView *view) {
_instance.onFailed = ^(NSError *error) {
_instance.renderFinish = ^(UIView *view) {
_instance.updateFinish = ^(UIView *view) {
[_instance renderWithURL:[NSURL URLWithString:url] options:@{@"bundleUrl":url} data:nil];
如上所述 我们可以针对产出的view进行处理,简单的页面直接添加到self.view上即可。假如需要多个view间的切换,就如订单页的tabbar切换,我这里做了如下处理:把每次新产生的view存到一个字典里,key是链接 value是新产生view ,每次渲染页面前先通过key查找是否已经存在该view,如果已存在把存的view拿出来展示,不存在渲染出来新的view代码修改如下
-(void)renderWeexWithUrl:(NSString *)url{
if ([self.mdicViews objectForKey:url] && [[self.mdicViews objectForKey:url] isKindOfClass:[UIView class]]) {
[self loadViewforKey:url];
__weak typeof(self) weakSelf = self;
_instance = [[WXSDKInstance alloc] init];
_instance.viewController = self;
CGFloat width = self.view.frame.size.width;
_instance.frame = CGRectMake(self.view.frame.size.width-width, 0, width, _weexHeight);
_instance.onCreate = ^(UIView *view) {
[weakSelf.mdicViews setValue:view forKey:url];
[weakSelf loadViewforKey:url];
_instance.onFailed = ^(NSError *error) {
_instance.renderFinish = ^(UIView *view) {
_instance.updateFinish = ^(UIView *view) {
[_instance renderWithURL:[NSURL URLWithString:url] options:@{@"bundleUrl":url} data:nil];
-(void)loadViewforKey:(NSString *)mstrJs{
self.weexView = [_mdicViews objectForKey:mstrJs];
[self.view insertSubview:self.weexView atIndex:0];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, self.weexView);
for (int i=0; i&self.view.subviews.count; i++) {
UIView * mview = [self.view.subviews objectAtIndex:i];
if (i==0) {
mview.hidden=NO;
mview.hidden=YES;
3. 自定义a标签component 拦截url进行跳转
#import &WeexSDK/WXComponent.h&
@interface WXPushComponent : WXComponent &UIGestureRecognizerDelegate&
#import "WXPushComponent.h"
@interface WXPushComponent()
@property (nonatomic, strong) UITapGestureRecognizer *
@property (nonatomic, strong) NSString *
@implementation WXPushComponent
- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
if (self) {
_tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openURL)];
_tap.delegate = self;
if (attributes[@"href"]) {
_href = attributes[@"href"];
return self;
- (void)dealloc
if (_tap.delegate) {
_tap.delegate = nil;
- (void)viewDidLoad
[self.view addGestureRecognizer:_tap];
- (void)openURL
if (_href && [_href length] & 0) {
- (void)updateAttributes:(NSDictionary *)attributes
if (attributes[@"href"]) {
_href = attributes[@"href"];
#pragma mark
#pragma gesture delegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
return YES;
return NO;
4. 自定义module实现confirm、toast、alert
#import &Foundation/Foundation.h&
#import &WeexSDK/WXModuleProtocol.h&
#import &WeexSDK/WeexSDK.h&
@interface WXModuleAnno : NSObject&WXModuleProtocol&
#import "WXModuleAnno.h"
@implementation WXModuleAnno
@synthesize weexI
WX_EXPORT_METHOD(@selector(toast:))
WX_EXPORT_METHOD(@selector(alert:callback:))
WX_EXPORT_METHOD(@selector(confirm:callback:))
- (void)confirm:(NSDictionary *)param callback:(WXModuleCallback)callback
NSString *message = [self stringValue:param[@"message"]];
NSString *okTitle = [self stringValue:param[@"okTitle"]];
NSString *cancelTitle = [self stringValue:param[@"cancelTitle"]];
if (okTitle.length==0) {
okTitle = @"确认";
if (cancelTitle.length==0) {
cancelTitle = @"取消";
callback(okTitle);
- (void)toast:(NSDictionary *)param{
NSString *message = [NSString stringWithFormat:@"%@",param[@"message"]];
if (!message) return;
- (void)alert:(NSDictionary *)param callback:(WXModuleCallback)callback
NSString *message = [self stringValue:param[@"message"]];
NSString *okTitle = [self stringValue:param[@"okTitle"]];
callback(okTitle);
-(UINavigationController *)currentNVC{
return [weexInstance.viewController navigationController];
-(UIViewController *)currentVC{
return weexInstance.viewController;
- (NSString*)stringValue:(id)value
if ([value isKindOfClass:[NSString class]]) {
if ([value isKindOfClass:[NSNumber class]]) {
return [value stringValue];
return nil;
5. 自定义图片加载protocol,可以对图片进行压缩和缓存的处理
#import &Foundation/Foundation.h&
#import &WeexSDK/WXImgLoaderProtocol.h&
@interface WXImgLoaderDefaultImpl : NSObject&WXImgLoaderProtocol&
#import "WXImgLoaderDefaultImpl.h"
#import &SDWebImage/UIImageView+WebCache.h&
@interface WXImgLoaderDefaultImpl()
@implementation WXImgLoaderDefaultImpl
#pragma mark -
#pragma mark WXImgLoaderProtocol
- (id&WXImageOperationProtocol&)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)userInfo completed:(void(^)(UIImage *image,
NSError *error, BOOL finished))completedBlock
if ([url hasPrefix:@"jpg"] || [url hasPrefix:@"png"]) {
return (id&WXImageOperationProtocol&)[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:url] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (completedBlock) {
completedBlock(image, error, finished);
6. 自定义NetworkProtocol,可以针对网络请求进行拦截修改
#import &Foundation/Foundation.h&
#import &WeexSDK/WeexSDK.h&
@interface WXSJNetworkDefaultlmpl : NSObject&WXNetworkProtocol, NSURLSessionDelegate&
#import "WXSJNetworkDefaultlmpl.h"
@interface WXNetworkCallbackInfo : NSObject
@property (nonatomic, copy) void(^sendDataCallback)(int64_t, int64_t);
@property (nonatomic, copy) void(^responseCallback)(NSURLResponse *);
@property (nonatomic, copy) void(^receiveDataCallback)(NSData *);
@property (nonatomic, strong) NSMutableData *
@property (nonatomic, copy) void(^compeletionCallback)(NSData *, NSError *);
@implementation WXSJNetworkDefaultlmpl
NSMutableDictionary *_
NSURLSession *_
- (id)sendRequest:(NSURLRequest *)request withSendingData:(void (^)(int64_t, int64_t))sendDataCallback
withResponse:(void (^)(NSURLResponse *))responseCallback
withReceiveData:(void (^)(NSData *))receiveDataCallback
withCompeletion:(void (^)(NSData *, NSError *))compeletionCallback
if (![request.URL.absoluteString hasPrefix:@"http"]) {
request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",@"",request.URL.absoluteString]]];
WXNetworkCallbackInfo *info = [WXNetworkCallbackInfo new];
info.sendDataCallback = sendDataC
info.responseCallback = responseC
info.receiveDataCallback = receiveDataC
info.compeletionCallback = compeletionC
if (!_session) {
_session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *task = [_session dataTaskWithRequest:request];
if (!_callbacks) {
_callbacks = [NSMutableDictionary dictionary];
[_callbacks setObject:info forKey:task];
[task resume];
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
WXNetworkCallbackInfo *info = [_callbacks objectForKey:task];
if (info.sendDataCallback) {
info.sendDataCallback(totalBytesSent, totalBytesExpectedToSend);
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
WXNetworkCallbackInfo *info = [_callbacks objectForKey:task];
if (info.responseCallback) {
info.responseCallback(response);
completionHandler(NSURLSessionResponseAllow);
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)task didReceiveData:(NSData *)data
WXNetworkCallbackInfo *info = [_callbacks objectForKey:task];
if (info.receiveDataCallback) {
info.receiveDataCallback(data);
NSMutableData *mutableData = info.data;
if (!mutableData) {
mutableData = [NSMutableData new];
info.data = mutableD
[mutableData appendData:data];
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
WXNetworkCallbackInfo *info = [_callbacks objectForKey:task];
if (info.compeletionCallback) {
info.compeletionCallback(info.data, error);
[_callbacks removeObjectForKey:task];
主要讲解如何实现weex native webview间的跳转,达到可以不仅随意跳转并且可以替换native页面的效果以下内容来源于我司安卓大神App的跳转规则的weex支持方案设计跳转规则如下图,如果看不清,可以到新页面放大查看,主要介绍一下两个配置参数:1.参数interceptUrlList可以动态配置需要拦截的h5链接,然后生成统一跳转地址
showjoyshop://page.sh/order 示例如下:
"page":"order",
"url":"https://dshdjshjbx"
"page":"detail",
"url":"https://dsdsds"
2.然后通过order在参数weexPages里查找对应的js信息,然后渲染 示例如下:
"page":"order",
"url":"https://dshdjshjbx.js",
"md5":"huwhdjshdjs",
"h5":"http://dsds.html"
"v":"1.5.0"
"page":"detail",
"url":"https://dsdsds.js",
"md5":"huwhdjshdjs",
"h5":"http://dsds.html"
"v":"1.5.0"
url: 需要渲染的js
md5: js文件的md5值用于校验
h5: 渲染失败后的降级方案
v: 最低支持的版本号
这样就达到了动态拦截,动态上线weex的目的
主要讲解提前预下载JS文件的逻辑(当然也可以不预下载,直接使用js链接即可)为了提升渲染效率,我们会提前把js文件下载到本地,使用时直接加载本地文件,下载逻辑如下:首先我们会有一个地方录入如下格式的json数据
"page":"页面名称",
"url":"js下载链接",
"md5":"js文件MD5",
"h5":"对应的h5页面"
"v":"版本号"
"page":"shoporder",
"url":"https://xxxx.js",
"md5":"js文件MD5",
"h5":"http://xxxx.html"
"v":"1.7.0"
page: 对应统一跳转的 path(暂为页面名称)
url: 需要渲染的js
md5: js文件的md5值用于校验
h5: 渲染失败后的降级方案
v: 最低支持的版本号
然后根据配置文件做如下操作
每次更新完配置文件,遍历,查看是否存在md5一致的page_xxx.js文件,如果不存在则更新
下载完成后,保存格式为xxx.js,校验md5 相同的话,记录文件的最后修改时间 不同的话,删除已下载文件,重新下载,重复校验流程
支持统一跳转协议,page对应目前app端的统一跳转协议里的page,有必要的时候可以替换原来的native页面,解决native页面错误不能及时修复的问题。加载失败的话,打开h5页面
每次打开指定页面的时候,先检查本地是否有对应page文件,再检验最后修改时间是否跟记录的一致 一致就加载 不一致就用线上url
第三条提到的统一跳转协议是我们为了解耦各个模块所使用的一种方式,可根据自己的业务做相应的改变
我们的就类似:
showjoyshop:
showjoyshop:
weex对应的就是weex的vc webview对应的就是webview的vc
weex和webview即是第三条提到的page
相关热门文章374193人阅读
产品山海经(4)
首先如果大家不知道weex,大家请先百度下weex,react native(以下简称RN),weex的好处我就不提了,上次去参加Qcon大会的时候,听到阿里说要公开weex,于是就去要了个内测账号来用。
工作原理:
刚接触的时候,真的是蛋疼菊紧,完全看不懂,没办法加入了一个weex讨论组,不知道里面的人是不是阿里的coder,在群成员的帮助下,开始真正了解了weex的工作原理,如下图
懂RN的人一眼看,这不就和RN一样的思路么,看图可能不理解,那我就用自己的话来说吧,首先用js写出布局,对于不搞前端的人来说这里是最难的,用js写布局,群里面有人说先去研究vue.js,其实然并卵,写起来特别复杂,虽然weex给出了许多demo,但是写起来感觉挺变扭,特别在写style.sheet的时候,不能用css3,那就证明许多定制化功能很难实现,这和RN一样,这是通病,当然可能是我技术没研究透,但是就我目前来看,对于复杂的自定义view来说,weex用js是无法快速实现的。
布局写完以后,通过命令行去编译成js,这里为啥js编译js,其实我也不懂,但是RN需要,weex也需要,因为编译的同时帮你编译出一个项目来吧,然后就可以在原生IDE里面去写这个编译出来的项目,那么问题来了,为啥都编译好了还要去写原生项目,因为你需要做一些封装层和插件化接口,让你的js去调用,RN和weex给出来的本地接口根本不足以让你实现一个app,所以你需要自己再去做一些封装和插件。
最后app就可以用了,也就是上图的模式js去生成UI,调用本地的方法和接口。
Weex和RN的区别:
因为了解的真的不够透彻,看群里面的人也是瞎扯,所以真的感觉没区别,因为思路都是一样的,但是说没有区别,还是可以从原生端看出区别的,目前weex只推出了android的内测版本,而当初RN刚推出的时候只推出IOS版本,后面才补上的Android版本,RN目录下,所有js对应的是一个activity,而weex目录下,一个js对应一个activity,so在dev里面加载图片还是扩充内存模块,当然是weex比较好,也就是说,RN大数据量下面,android会卡,ios不会卡,weex大数据量下面android的性能比rn的好,ios还不知道。
bug维护上面,rn维护的速度倒是比weex维护的快,这里也是阿里大神需要注意一些。
开源程度上面,weex当然比rn更开源,虽然rn也有源码,但是编译的时候都是jar包的形式,这就没有weex更符合我们的要求了,大家可以自己去看下weex的源码,关于源码我不想分析,因为我是分析了很多,但是不想误导大家,这里需要大家自己来看。
关于跨平台的看法:
我们都是想更快速的去开发,并且能热部署,但是目前来说好像真没有一个技术能更好的解决我们的需求,最早的phonegap,性能成为硬伤,发展到现在的RN和weex,RN已经有许多demo了,但是目前看到的都是简单布局,一些绚丽的东西,提高用户体验性的demo真的没有看到,所以目前来说,weex也只用于部分淘宝的场景中,混合开发可能还会持续很久,也希望国内有大神能提供出一种可视化兼代码编辑的工具出来,vue.js真的太难了。
& & &也好久没写博客了,和大家说点题外话,反正我的观点也不一定对,可能是真的做管理层做太多了,也不在意一些细节了,突然加一个技术群里面,有点不适应这些coder,里面有刚毕业的,开发几年的,也有开发几十年的,
我也不知道里面是否有阿里的大神,但是我认识的阿里大神都是很谦逊的,而里面的人给人一种什么感觉,老子就是牛逼,你问的问题就是渣渣,老子探讨的都是原理之类和最新技术的问题,问道有先后,术业有专攻,你们懂js,我不懂啊,换个思路,我懂android比你们懂的太多了,你们懂么,但是我还是经常会去移动论坛里面问问题,许多网友开玩笑说大版主都不懂的,我们怎么懂,我也会开玩笑的说,你们懂了不就证明比我厉害了,其实没有谁是全懂的,无论我认识的阿里,还是腾讯,或者百度的都很谦逊。
然后就是coder的装逼方式让我不懂,也可能我不是一个好的coder缘故,coder的思路,我写的代码牛逼我就牛逼,我懂的比你多我就牛逼,我在大公司我就牛逼,完全沉浸在code的世界中无法自拔,可能也是我太势力,被社会污染了,为啥我身边的朋友装逼就是我今天买了一辆法拉利,我今天在迪拜干啥,我住的豪宅太大请人打扫好贵,我女朋友有多漂亮之类,不懂了,不知道大家想要什么样的生活方式,前者还是后者。还有就是一个人说看着冒号不对齐就难受,然后大家就开始复合,哎呀受不了了,你有代码洁癖你自己知道就行,何必再群里面说,而且还一群跟着复合,非要觉得自己多么牛炫一下,那为啥不炫你的豪车了。
最后coder的交流语气貌似有问题,和电脑打交道多了,和人就是那样,举个例子,昨天群里面有人问谁有RN的demo,然后就开始有人抨击这个人是小公司的人员,怎么怎么不行,其实我想问下,换做是我,我也会直接找demo,因为我是500强的管理层,我注重的是效率和带来的效益,如果我花时间去深入研究一个不确定的原理,那带来的风险无法预知,我不宁愿找一个可预测的风险去做,因为我不是开发,如果我看到的我要结果我就会让我们的code去仔细研究,而凭别人说的一句话去判断别人,甚至公司,我就没懂了。再举个例子,今天群里面有人问项目时间紧的情况下,应该选择原生还是weex,好的,又开始了,开始抨击别人公司能活多久,公司都不舍得花钱在研发上面,这些不是需要你们考虑的吧,你们又不是老板,你们没有那个能力说自己是马云就别去抨击别人公司能活多久,就好像一群coder从来没有做过管理,却说管理有多垃圾,呵呵了,那你倒是有能力顶替管理自己去做咯。
说了那么多,可能也夹杂了我一些错误的想法,我只是想,谦虚是美德,大家应该尊重别人,不是因为你比别人先了解这方面的知识,而是这是中国,如果你在硅谷,在瑞士,我不会说啥,但是在中国,技术不一定能带来财富,而中国唯一认证成功的标准就是财富,所以请大家收起大家的自傲来,当你还没有成为亿万富翁或者行业顶尖的时候,你没有资格去抨击任何一个人,所以我在群里面从来只是简单的问问题和谢谢,其它时候我只能静静地呵呵看着你们装我不懂是否该装的逼了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:77830次
积分:1529
积分:1529
排名:千里之外
原创:49篇
转载:10篇
评论:204条
(1)(5)(1)(1)(2)(2)(1)(1)(2)(1)(1)(1)(1)(2)(1)(2)(1)(2)(1)(9)(13)(5)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'BAT等大厂已开源的70个实用工具盘点 壹佰案例文章
BAT等大厂已开源的70个实用工具盘点
前面的一篇文章《微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源软件盘点(附下载地址)》列举了国外8个互联网公司(包括微软、Google、亚马逊、IBM、Facebook、Twitter、eBay、VMware)的开源软件项目,今天我们来盘点一下国内几个体量较大的互联网大厂(腾讯、百度、阿里、美团点评、华为)都有哪些开源软件。快点Mark起来并转发给需要的人吧。
以下内容主要来源于:GitHub、开源中国、infoQ、美团点评技术团队等。
编辑:Cynthia
百度开源软件
ECharts:JavaScript 图表库
ECharts是一款由百度前端技术部开发的,基于Javascript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。
提供大量常用的数据可视化图表,底层基于ZRender(一个全新的轻量级canvas类库),创建了坐标系,图例,提示,工具箱等基础组件,并在此上构建出折线图(区域图)、柱状图(条状图)、散点图(气泡图)、饼图(环形图)、K线图、地图、力导向布局图以及和弦图,同时支持任意维度的堆积和多图表混合展现。
详情:https://www.oschina.net/p/echarts
GitHub地址:
/baidu/echarts
ApolloAuto:开源自动驾驶平台
Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。
Apollo 是百度重点打造的 AI 开放平台之一,计划主要包含 4 个技术模块:定位/感知模块、车辆规划与运营(AI+大数据,精准控制车辆,适合不同路况)、软件运营框架(支持英特尔、英伟达等多种芯片)。
详情:https://www.oschina.net/p/apolloauto
BFS-Baidu:百度文件系统
百度的核心数据库Tera将数据持久化在分布式文件系统上,分布式文件系统的性能、可用性和扩展性对整个上层搜索业务的稳定性与效果有着至关重要的影响。现有的分布式文件系统(如HDFS等)无法满足低延迟、高可用、跨地域扩展等方面的需求,所以我们从百度搜索的业务特点出发,开发了自己的分布式文件系统BFS。
系统主要由NameServer、MetaServer、ChunkServer、SDK、bfs_mount和bfs_client等几个模块构成。
其中NameServer是中心控制模块,采用集群化部署,负责目录树的管理;ChunkServer是数据节点负责提供文件块的读写服务;SDK以静态库的形式提供了用户使用的API;bfs_mount通过libfuse,将bfs挂载到本地,作为本地文件系统访问;bfs_client是一个二进制的管理工具。
详情:https://www.oschina.net/p/baidu-file-system
Kity Minder:在线脑图编辑器
KityMinder 是百度FEX团队的f-cube小组(原UEditor小组)的又一力作。作为一款在线的脑图编辑工具,它有着很多Native编辑工具的交互体验。KM与UE有着一样的宗旨,就是注重最终用户的使用体验。同时,它充分发挥了Web云存储的优势,可以直接将编辑中的脑图同步到云端。此外,借由独创的 “云盘分享”功能,用户可以一键将当前编辑的脑图直接生成在线链接共享给其他用户,实现无缝沟通。
详情:https://www.oschina.net/p/kityminder
Disconf:分布式配置管理平台
专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务。包括 百度、滴滴打车、银联、网易、拉勾网 等知名互联网公司正在使用!
详情:https://www.oschina.net/p/disconf
Tera:分布式表格系统
Tera 是一个高性能、可伸缩的数据库系统,被设计用来管理搜索引擎万亿量级的超链与网页信息。为实现数据的实时分析与高效访问,我们使用按行键、列名和时间戳全局排序的三维数据模型组织数据,使用多级Cache系统,充分利用新一代服务器硬件大内存、SSD盘和万兆网卡的性能优势,做到模型灵活的同时,实现了高吞吐与水平扩展。
详情:https://www.oschina.net/p/tera
Gitbub地址:
/baidu/tera
Cafe:Android自动化测试框架
Cafe 测试框架是一款来自百度QA部门的具有开创性意义的Android平台的自动化测试框架,框架覆盖了Android自动化测试的各种需求。框架致力于实现跨进程测试、快速测试、深度测试,解决了Android自动化测试中的诸多难题,比如业界一直没有解决的跨进程测试问题。
详情:https://www.oschina.net/p/cafe
Ueditor:富文本编辑器
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。
详情:https://www.oschina.net/p/ueditor
Gitbub地址:
/baidu/ueditor
Mapv:地图可视化工具库
Mapv 是一款基于百度地图的大数据可视化开源库,可以用来展示大量的点、线、面的数据,每种数据也有不同的展示类型,如直接打点、热力图、网格、聚合等方式展示数据。
详情:https://www.oschina.net/p/mapv
Gitbub地址:
/baidu/mapv
ECharts-X:全新 3D 可视化库
ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender。
详情:https://www.oschina.net/p/echarts-x
MuPlayer:百度音乐播放内核
MuPlayer 是一款跨平台、轻量级的音频播放解决方案,是百度@音乐前端团队开发维护的浏览端音频播放内核,它基于HTML5 Audio及Flash音频技术,已在百度音乐多个线上产品线中应用,具备很强的灵活性和稳定性。
详情:https://www.oschina.net/p/muplayer
WebUploader:文件上传组件
WebUploader 是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,延用原来的FLASH运行时,兼容IE6+,Andorid 4+,IOS 6+。两套运行时,同样的调用方式,可供用户任意选用。
详情:https://www.oschina.net/p/webuploader
百度更多74个开源项目详情可查看:
https://www.oschina.net/project/baidu
阿里巴巴开源软件
Weex:开源移动UI层框架
开源的移动端高性能动态化,跨平台UI框架。 Weex的出现解决了困扰移动开发领域长期以来的一份设计,多次重复开发的问题,使得开发者能够通过一次代码编写即可为Androdi,IOS,H5生成美观高性能的界面。
由于Weex已经捐赠到了Apache基金会孵化,所以代码主仓库已经迁移到了Apache组织下。
Github主仓库:
/apache/incubator-weex
Github原仓库:
/alibaba/weex
Ant Design:开源React 组件库
阿里在React技术栈基础上开源的全功能通用组件库,沉淀了大量交互设计最佳实践。 如果你以React的方式开发你的前端应用Ant Design不容错过。Ant Design最近还提供了移动版Ant Design Mobile ,同样风格的组件库现在可平顺的过度到移动Web环境。
Github主仓库:
/ant-design/ant-design
FastJSON:开源JSON解析和生成器
FastJSON是一个超高性能的JSON解析和生成器,在对外零依赖的情况下实现了对多种常用数据结构到JSON的解析和生成。评测数据长期以来一直在同类工具间遥遥领先。对JSON的处理是众多服务端程序最频繁执行的任务,启用FastJSON或许能让你的后端应用获得不小的性能提升。
Github主仓库:
/alibaba/fastjson
Dubbo:开源分布式开发框架
高性能服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入,可以和 Spring框架无缝集成。 是阿里大规模分布式系统的秘密武器。
Github主仓库:
/alibaba/dubbo
Atlas:开源Android平台容器化开发框架
随着移动应用规模的增长,大型移动应用,特别是平台级应用往往由团队协同开发。如何实现不同功能模块的组件化、解耦化,同时还具备动态性是Android应用开发的一个核心挑战。Atlas在遵循安卓系统设计规范的情况下,通过反射和轻量的hook方案来实现了这一目标,并将大量的工作放到了编译期,提高了稳定性。
Github主仓库:
/alibaba/atlas
RocketMQ:开源消息队列
企业级互联网架构的核心产品,基于高可用分布式集群技术,搭建了包括发布订阅、消息轨迹、资源统计、定时(延时)、监控报警等一套完整的消息队列服务。
Github主仓库:
/apache/incubator-rocketmq
Github原仓库:
/alibaba/RocketMQ
Freeline:开源Android构建工具
Freeline是一个Android平台上的构建工具,构建速度是其最大特点。它可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。
Github主仓库:
/alibaba/freeline
AliSQL:开源 MySQL数据库分枝
AliSQL 是基于广泛使用的数据库产品 MySQL 的一个开源分支,在 MySQL 社区版的基础上做了大量的性能与功能的优化改进。尤其适合电商、云计算以及金融等行业环境。最新的 AliSQL 版本不仅从其他开源分支比如:Percona,MariaDB,WebScaleSQL 等社区汲取精华,也沉淀了阿里巴巴多年在 MySQL 领域的经验和解决方案。
Github主仓库:
/alibaba/AliSQL
腾讯开源软件
Blade:现代构建系统
期望的目标是强大而好用,把程序员从构建的繁琐中解放出来。Blade 主要定位于 Linux 下的大型 C++ 项目,密切配合研发流程,比如单元测试,持续集成,覆盖率统计等。
在腾讯公司“台风”云计算平台开发过程中,为了解决 GNU Make,Autotools 的难用和繁琐的问题,开发了这个全新的构建系统,整个系统基于多个声明式的构建脚本,在构建脚本里,只需要声明要构建什么目标,目标的源代码,以及其直接依赖的其它目标,不需要说明如何构建。大大降低了使用难度,提高了开发效率。
Gitbub地址:
/chen3feng/typhoon-blade
Appecker:自动化测试框架
一款用于 iOS 系列系统的自动化测试框架。
Gitbub地址:
/TencentOpen/Appecker
QcloudMna:追风移动加速
QcloudMna 移动加速是腾讯云针对移动端应用(APP、游戏)推出的加速产品,其主要功能包括:动态数据加速、网络流量优化、智能分析统计,具有接入简单、多平台支持、客服支持等特点。
详情:https://www.oschina.net/p/mna
Ctaxis:云排序
云排序用于提供海量数据排序服务, 采用可扩展的分布式存储方案。腾讯云排序服务主要面向腾讯开放平台上的第三方应用,应用的用户量跨越从0到千万级甚至上亿的广阔区间, 在进行海量数据的排序时,经常会面临处理方式、处理性能等方面的问题。
详情:https://www.oschina.net/p/ctaxis
APT:安卓性能测试工具
安卓性能测试工具,安卓平台高效性能测试套件,用于安卓平台的基准测试、竞品测试。
APT是一个eclipse插件,可以实时监控Android手机上多个应用的CPU、内存数据曲线,并保存数据;另外还支持自动获取内存快照、PMAP文件分析等,方便开发人员自测或者测试人员完成性能测试,快速发现产品问题。
GitHub地址:
/shawwinbin/APT
Koala:跨平台图形编译工具
跨平台图形编译工具,用于快速生成前端 CSS 和 JS。
详情:https://www.oschina.net/p/openkoala
TDW:腾讯分布式数据仓库
腾讯分布式数据仓库,用于帮助企业低成本构建大数据分析系统或数据仓库。
详情:https://code.csdn.net/Tencent/tdw/tree/master
TscanCode:静态代码扫描工具
静态代码扫描工具,针对 C/C++ 代码的静态代码扫描解决方案。
TscanCode旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不同需求自定义配置检查项,有极强的扩展性和可维护性。平均扫描速度10W行/分钟。
详情:https://www.oschina.net/p/tscancode
一个 C++ 的高性能 JSON 解析器及生成器,同时支持 SAX/DOM 风格的 API。
GitHub地址:
/TencentOpen/rapidjson
Key-N-Value:高性能树型协议处理引擎
KNV 是一个模式自由的高性能树型协议处理引擎,是对 Key-Value 的一个通用结构化扩展。
WeTest助手:手机端辅助测试工具
WeTest助手是由WeTest(质量开放平台)自主研发的基于手机端的辅助测试工具,目前包括性能测试和远程调试两大功能, 能够为手游等项目发现CPU、内存、FPS等性能问题,并提供云端真机用于问题在线调试,共计为公司内外部项目服务5.4万次;
手游客户端性能测试常用性能维度,CPU,内存,FPS,流量一次性全部收集,图表化展示,数据可按场景化分类,并且支持离线和在线两种模式, 地铁上都可以做测试,Web上看报告。远程调试配合自研的云真机技术,支持多点触控、类手柄遥控,真实还原手游测试场景,极速流畅、极低延迟, 本地只需要一台手机即可操控云端任何一台手机。
支持ROOT和非ROOT安卓手机,支持越狱iOS系统。
GitHub地址:
/Tencent/WeTest-Assistant
QT4i:iOS开发自动化测试工具
iOS 开发自动化测试工具,全面兼容 iOS 真机和模拟器,基于分布式技术,高效并发执行测试。QT4i需要和QTAF一起使用。
GitHub地址:
/tencent/QT4i
QT4A:UI 测试自动化测试解决方案
基于 QTA 提供面向 Android 应用的 UI 测试自动化测试解决方案。
需要和QTAF一起使用。
https://www.oschina.net/p/QT4A
SWF 转 HTML5 Canvas 动画。Fanvas 可以把 SWF(包括矢量和位图)完美地转化为 Canvas 动画,让美术妹子一次制作,到处运行。
GitHub地址:
/TencentOpen/Fanvas
HaboMalHunter:恶意软件分析系统
HaboMalHunter是哈勃分析系统 () 的开源子项目,用于Linux平台下进行自动化分析、文件安全性检测的开源工具。使用该工具能够帮助安全分析人员简洁高效的获取恶意样本的静态和动态行为特征。分析报告中提供了进程、文件、网络和系统调用等关键信息。
GitHub地址:
/Tencent/HaboMalHunter
QTAF:跨平台测试自动化工具
QTAF 是一个跨平台的测试自动化工具,适用于后台、原生或混合型客户端应用的测试。
GitHub地址:
/Tencent/QTAF
微信团队开源的项目,用于微信开发者进行微信登录、分享功能开发时的参考 Demo。
GitHub地址:
/Tencent/WeDemo
GAutomator
GAutomator是一个针对Unity手游的UI自动化测试框架。设计理念与使用方式,类似于Android的UIAutomator。GAutomator以Unity中的GameObject为操作对象,通过操作GameObject实现UI自动化测试。基于GameObject的方式,不存在手机分辨率适配的问题,一份脚本能够运行在不同手机之上,基于GameObject的另外一个优点为鲁棒性较强,游戏的UI界面经常发生变化,GameObject变化频率相对较低。
GitHub地址:
/tencent/GAutomator
毫秒服务引擎是腾讯的一个开源框架,适用于在廉价机器组成的集群上开发和运营分布式后台服务。
GitHub地址:
/Tencent/MSEC
Behaviac:行为树解决方案
行为树(Behavior Tree)解决方案。该方案包括编辑器(Designer)和运行时库(Runtime)。
GitHub地址:
/Tencent/behaviac
Blueking CMDB(蓝鲸配置平台)
一款面向应用的 CMDB,在 ITIL 体系里,CMDB 是构建其它流程的基石,而在蓝鲸智云体系里,配置平台就扮演着基石的角色,为应用提供了各种运维场景的配置数据服务。
GitHub地址:
/tencent/bk-cmdb
GT(随身调)
GT(随身调)是APP的随身调试平台,它是直接运行在手机上的“集成调试环境”(IDTE, Integrated Debug Environment)。
利用GT,仅凭一部手机,无需连接电脑,即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。
GitHub地址:
/Tencent/GT
weui-wxss:安卓/iOS手机端调测组件
安卓/iOS 手机端调测组件,用于安卓平台的性能测试、竞品测试及仅凭一台手机进行 App 测试的场景。
GitHub地址:
/weui/weui-wxss
GitHub地址:
/weui/weui.js/
Teaf:高性能服务端框架
Tencent Easy ACE Framework,基于ACE的高性能轻量级服务框架,单进程多线程模型,支持select/epoll等多种网络IO模型,同时支持tcp和udp协议,支持二进制(pb等)和文本格式(json等,易于理解),相对多进程模型的框架来说更易维护,更轻量。业务侧只需要开发自己的逻辑处理即可实现高性能的业务后台服务器。已经在腾讯互娱(IEG)大部分平台类产品中成熟应用,比如idip,游戏人生,心悦,帮帮,新终端游戏中心aj,cross等,公司其他BG也有很多产品在使用。
GitHub地址:
/Tencent/Teaf
SQLCipher 提供了对 SQLite 数据库的传输层进行全面加密的工具,而通过使用 SQLCipher ,整个加密过程对客户端是透明的,无需改动应用程序。(该项目是腾讯 fork Zetetic 公司的开源项目)
GitHub地址:
/Tencent/sqlcipher
Tars:高性能RFC开发框架
基于名字服务使用 Tars 协议的高性能 RPC 开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。
Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++和Java两种语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。
目前该框架在腾讯内部,各大核心业务都在使用,颇受欢迎,基于该框架部署运行的服务节点规模达到上万个。
GitHub地址:
/Tencent/Tars
WeFlow:前端开发工作流工具
一个高效、强大、跨平台(macOS & Win)的前端开发工作流工具,核心基于 tmt-workflow 工作流,代码开源可定制。
GitHub地址:
/Tencent/WeFlow
Pebble:分布式开发框架
基于该框架,可以让开发者只需专注于业务逻辑的实现,而不需要关注基础功能的开发,如网络通信,数据存储,集群管理等。
GitHub地址:
/TencentOpen/Pebble
tmt-workflow:前端工作流程
基于 Gulp(v4.0)、高效、跨平台(macOS & Win)、可定制的前端工作流程。
GitHub地址:
/Tencent/tmt-workflow
WeUI:基础样式库
一套同微信原生视觉体验一致的基础样式库,为微信 Web 开发量身设计,可以令用户的使用感知更加统一。包含button、cell、dialog、toast、article、icon等各式元素。
GitHub地址:
WCDB:移动数据库框架
腾讯开源的一个高效、完整、易用的移动数据库框架,基于 SQLCipher,支持 iOS、macOS 和 Android。
GitHub地址:
/Tencent/wcdb
xLua 为 Unity3D 增加 Lua 脚本编程的能力,进而提供代码逻辑增量更新的可能。
GitHub地址:
/Tencent/xLua
Libco:C/C++协程库
早期微信后台因为业务需求复杂多变、产品要求快速迭代等需求,大部分模块都采用了半同步半异步模型。接入层为异步模型,业务逻辑层则是同步的多进程或多线程模型,业务逻辑的并发能力只有几十到几百。随着微信业务的增长,系统规模变得越来越庞大,每个模块很容易受到后端服务/网络抖动的影响。基于这样的背景,微信开发了Libco,实现了对业务逻辑非侵入的异步化改造。
GitHub地址:
/tencent/libco
PhxPaxos:生产级paxos类库
PhxPaxos的特性包括使用基于消息传递机制的纯异步工程架构、每次写盘使用fsync严格保证正确性、支持Checkpoint以及对PaxosLog的自动清理、使用点对点流式协议进行快速学习、支持跨机器的Checkpoint自动拉取、内置Master选举功能、自适应的过载保护等。
GitHub地址:
/tencent-wechat/phxpaxos
PhxSQL:高可用、强一致的MySQL集群
PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下、即可提供服务,并且自身实现自动Master切换、保证数据一致性。PhxSQL不依赖于ZooKeeper等任何第三方做存活检测及选主。PhxSQL基于MySQL的一个分支Percona 5.6开发,功能和实现与MySQL基本一致。
MySQL主备在主机上支持完整SQL、全局事务、以repeatable read和serializable级别的事务隔离,在金融、帐号等关键业务中有巨大的价值。但是MySQL传统主备方案也有其缺点。最明显的就是主机故障后的自动换主和新旧主数据一致性,即所谓的一致性和可用性。为了解决这个问题,并同时完全兼容MySQL,微信在MySQL的基础上应用Paxos,设计和开发了PhxSQL。
GitHub地址:
/tencent-wechat/phxsql
PhxRPC:RPC框架
使用Protobuf作为IDL用于描述RPC接口以及通信数据结构。
基于Protobuf文件自动生成Client以及Server接口,用于Client的构建,以及Server的实现。
半同步半异步模式,采用独立多IO线程,通过Epoll管理请求的接入以及读写,工作线程采用固定线程池。IO线程与工作线程通过内存队列进行交互。
提供完善的过载保护,无需配置阈值,支持动态自适应拒绝请求。
提供简易的Client/Server配置读入方式。
基于lambda函数实现并发访问Server,可以非常方便地实现Google提出的 Backup Requests 模式。
GitHub地址:
/tencent-wechat/phxrpc
Mars:终端跨平台网络组件
Mars是微信官方的终端基础组件,是一个结合移动应用所设计的基于Socket层的解决方案,在网络调优方面有更好的可控性,采用C++开发。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。
在微信中,任何网络实现的bug都可能导致重大事故。例如微信的容灾实现,如果因为版本的实现差异,导致某些版本上无法进行容灾恢复,将会严重的影响用户体验。微信研发了统一的跨平台的网络基础库Mars来满足发展的需要,一方面,基础组件可以提高研发效率,另外一方面,也可以提高系统的稳健性。
在设计上,Mars以跨平台、跨业务为前提,遵从高可用,高性能,负载均衡的设计原则。以网络的可用性为例,移动互联网有着丢包率高、带宽受限、延迟波动、第三方影响等特点,使得网络的可用性,尤其是弱网络下的可用性变得尤为关键。Mars 的STN组件作为基于 socket 层的网络解决方案,在很多细节设计上会充分考虑弱网络下的可用性。
GitHub地址:
/Tencent/mars
热补丁技术Tinker
当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案,但它们都存在无法解决的问题,所以微信研发了自己的解决方案。总的来说,AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的。而Robust兼容性与成功率较高,但是它与AndFix一样,无法新增变量与类只能用做的bugFix方案。Qzone方案可以做到发布产品功能,但是它主要问题是插桩带来Dalvik的性能问题,以及为了解决Art下内存地址问题而导致补丁包急速增大的。
Tinker的具体设计目标如下:
开发透明:开发者无需关心是否在补丁版本,他可以随意修改,不由框架限制。
性能无影响:补丁框架不能对应用带来性能损耗。
完整支持:支持代码,So 库以及资源的修复,可以发布功能。
补丁大小较小: 补丁大小应该尽量的小,提高升级率。
稳定,兼容性好:保证微信的数亿用户的使用,尽量减少反射。
GitHub地址:
/Tencent/tinker
美团点评开源软件
DBProxy:数据库中间件
DBProxy是由美团点评公司技术工程部DBA团队(北京)开发维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,修改了部分bug,并且添加了很多特性。
通过数据库中间件,可以对数据库进行水平扩展,由原来单台数据库扩展到多台数据库,数据库中间件通过路由规则将数据的访问请求路由到其中一台数据库上,从而大大降低了数据访问的瓶颈和单台数据库的压力。通过数据库中间件还可以将DBA和研发进行解耦,提升DBA运维效率。
Github地址:
/Meituan-Dianping/DBProxy
SQLAdvisor:SQL优化工具
SQLAdvisor 是由美团点评公司北京DBA团队开发维护的 SQL 优化工具:输入SQL,输出索引优化建议。 它基于 MySQL 原生词法解析,再结合 SQL 中的 where 条件以及字段选择度、聚合条件、多表 Join 关系等最终输出最优的索引优化建议。目前 SQLAdvisor 在公司内部大量使用,较为成熟、稳定。
GitHub地址:/Meituan-Dianping/SQLAdvisor
华为开源软件
HBase 的 Spark SQL Astro
Spark SQL on HBase package 项目又名 Astro,端到端整合了 Spark,Spark SQL和HBase的能力,有助于推动帮助Spark进入NoSQL的广泛客户群,并提供强大的在线查询和分析以及在垂直企业大规模数据处理能力。
Apache HBase 是数据在 HDFS 上的 Key-Value 存储。它用来给 Google 的 Big Table 建模,并提供了 API 用于查询数据。这些数据通过它的“row keys”来组织、区分和发布。在每个分区上,数据被指定的“列”数据集合“列族”物理分区。这些数据模型是宽且零散的,在这些表中列是动态的,零散的。
详情:https://www.oschina.net/p/huawei-astro
LiteOS:华为物联网操作系统
Huawei LiteOS 是华为面向IoT领域,构建的"统一物联网操作系统和中间件软件平台",以轻量级(内核小于10k)、低功耗(1节5号电池最多可以工作5年),快速启动,互联互通,安全等关键能力,为开发者提供 "一站式" 完整软件平台,有效降低开发门槛、缩短开发周期。
Huawei LiteOS 目前主要应用于智能家居、穿戴式、车联网、智能抄表、工业互联网等 IoT 领域的智能硬件上。
详情:https://www.oschina.net/p/liteos
GitHub地址:
/Huawei/Huawei_LiteOS_Kernel
Apache CarbonData:Hadoop 原生文件格式
CarbonData 是一个为了更快的交互查询而生的新的Hadoop原生文件格式,用于大数据的快速分析和多维度查询hadoop本地数据存储设计。
在客户基准上,CarbonData已经展示出管理运行在非常低成本的硬件上的PB级别的数据,并且比目前的开源解决方案快了近10倍。
详情:https://www.oschina.net/p/carbondata
ServiceComb:多功能微服务框架
ServiceComb 是华为开源的一套包含代码框架生成,服务注册发现,负载均衡,服务可靠性(容错熔断,限流降级,调用链追踪)等功能的微服务框架。
ServiceComb 是华为 FusionCloud 解决方案中 PaaS 平台的重要组成部分,内置了高可靠性运行、动态治理等运维阶段的高级能力。ServiceComb 目前已应用于华为自身 IT 的多个核心业务,帮助华为极大地提升了云原生应用的开发效率。
ServiceComb 包括应用框架代码生成,服务注册发现、服务配置管理、服务监控、服务调用追踪、多通信协议支持等功能,具有服务化契约增强、响应式编程范式及多语言 SDK 支持等优势特性。ServiceComb 基于开放的架构,不仅可以支持开发者根据自身业务需求定制业务插件,而且还兼容多种业界流行的微服务框架。
详情:https://www.oschina.net/p/servicecomb
hindex:HBase 二级索引
hindex 是华为公司开发的纯 Java 编写的 HBase 二级索引,兼容 Apache HBase 0.94.8。
当前的特性如下:
多个表索引
多个列索引
基于部分列值的索引
使用索引扫描等于和范围条件
批量加载数据来索引表(索引完成批量加载)
详情:https://www.oschina.net/p/hindex
GitHub地址:
/Huawei-Hadoop/hindex
oct:开放容器测试框架
oct 是用于开放容器的测试用例和框架,用 Go 语言开发。
ocp-testing 项目的目标是,通过提供全局测试框架给所有的容器项目,来提高开放容器项目。测试包括,ocp 规范,容器功能和容器性能。
详情:https://www.oschina.net/p/oct
GitHub地址:
/huawei-openlab/oct
streamDM:用于 Spark Streaming 的数据挖掘
streamDM,是由华为诺亚方舟实验室开源的使用 Spark Streaming 挖掘大数据的开源软件。
大数据流学习(Big Data stream learning)比批量或离线学习更富有挑战性,因为数据在流动的过程中不太可能保持同一种分布。而且,数据流中的每一个样本只能被处理一次,否则它们就需要占用内存进行总结,同时该学习算法也必须非常高效。
Spark Streaming是核心Spark API 的一个扩展,它能让多个源的数据流处理成为可能。Spark 是一个可扩展可编程的框架,用于大规模分布式数据集(也称为弹性分布式数据集(RDD))处理。Spark Streaming 接收输入的数据流后将数据分批,再由 Spark 引擎处理,生成结果。
Spark Streaming 数据被编成一个 DStreams 序列,内在地表示成一个 RDD 序列。
详情:https://www.oschina.net/p/stream-dm
GitHub地址:
/huawei-noah/streamDM/
StreamCQL:流处理平台查询语言
StreamCQL作为华为FusionInsight产品的重要组件,提供了在分布式流处理平台上的类SQL查询能力,包括窗口计算等高级特性,在开源之前已经在电信、金融等多个行业成功应用,简化开发工作量数倍。
StreamCQL是一个类SQL的声明式语言,它用于在流(streams)和可更新关系(updatable relation)上的可持续查询,目的是在流处理平台分布式计算能力之上,通过使用简易通用的类SQL语言,使得业务逻辑的开发变得统一和简易。在架构上,除了支持主流的流处理平台Storm,它支持扩展到多种流处理引擎之上,如Flink。在功能上,StreamCQL弥补了传统流处理平台上一些基本业务功能的缺失,除了过滤、转换等基本SQL能力之外, 还引入基于内存窗口的计算、统计、关联等能力,以及流数据的拆分、合并等功能。后期StreamCQL的发展方向包括:模式匹配、CQLServer(CQL远程提交,多语言接口,JDBC接口)、可靠性增强等。
详情:https://www.oschina.net/p/streamcql
GitHub地址:
/HuaweiBigData/StreamCQL
96Boards:ARM 开放平台规范
96Boards 是 ARM 开放平台规范,是第一个定义 Cortex-A 开发板的开放规范,Cortex-A 是 ARM SoC 供应商提供的低耗能,小脚本 32 位和 64 位开发板。标准化扩展 Peripheral I/O 总线,显示和相机,允许硬件生态系统开发一系列兼容组件的产品,在其生命周期可以在任意兼容 96Boards 的平台上使用。
详情:https://www.oschina.net/p/96boards
越来越多的公司正走向开源,编程语言、操作系统、框架、平台、数据库等方方面面开源软件也越来越多,这些开源项目为我们的工作带来很多方便,可以直接“拿来”解决技术问题,不用重复造轮子,提高效率的同时也极大地降低了研发成本。
除了软件可以开源之外,研发实践也可以开源共享,第六届TOP100全球软件案例研究峰会将于11月9-12日在北京国家会议中心举办,甄选100个本年度最具行业代表性的软件研发案例,现场解读其解决方案和背后的技术逻辑,帮助研发团队快速提高效能。
福利1:除了本文列举了部分公司的部分开源软件外,国内还有哪些用起来不错的开源项目?请在留言区留言,与大家一起拥抱“开源”。截止至9月20日留言点赞次数最高者将获得第六届TOP100大会单天免费体验票一张。
福利2:如果你所在团队有优秀案例可以与业内同仁分享,回复“邮箱号+手机号”即可获得第六届TOP100全球软件案例研究峰会《案例邀请函》,与2500位技术人分享最佳实践。案例分享者所在团队购买门票可享有“理事单位”6折优惠。案例分享者本人可获得VIP通行证全程参加会议及讲师晚宴,与100+一线团队技术带头人面对面交流。
福利3:现在报名参加TOP100大会,可享受“8折”优惠,团购还有更多优惠:
文章转载自网络,作者观点不代表本网站立场,如需处理请联系客服
壹佰案例其它文章
本文为平安科技高级敏捷教练古月老师线上分享《平安7年精益敏捷转型之路》实
点击空白区域查看 公司 不堵车 不排队 有空调 免费WIFI 可能还管饭
第六届壹佰案例峰会将于11月9-12日在北京国家会议中心召开,4天时间集
微软已经停止了内斗,逐渐恢复了士气,并创造了超过 2500 亿美元的市值
2017年,机器学习、大数据、人工智能等词汇成为软件研发行业的主流,大前
数据资料来源于网络 本文编辑:Cynthia iPhone X发布之后,
数据资料来源于网络 本文编辑:Cynthia 2017年,房价逐渐淡出大
如何在快变的环境下打造一款现象级产品? 如何持续提高组织和团队的工程效率
今天凌晨的苹果发布会,你一定有全程跟踪吧?一大早打开朋友圈是不是又重播了
本文数据来源于高盛《中国在人工智能领域崛起》、腾讯发布的《2017中美人
TOP 壹佰案例专访 :TOP100全球软件案例研究峰会(壹佰案例峰会)
前面的一篇文章《微软、谷歌、亚马逊、Facebook等硅谷大厂91个开源
开源软件中有大量专家构建的代码,大大节省了开发人员的时间和成本,热衷于开
一年前,Google开发的人工智能程序Alpha Go和世界顶尖棋手的围
产品创新/用户体验 【产品创新】 【用户需求/用户体验】 【云平台】 团
导读ID:TOP100case 导读:紧耦合、分布式系统一般都存在接口调
导读ID:TOP100case 导读:移动互联网的飞速发展,给不同产品形
导读ID:TOP100case导读:本案例讲述ThoughtWorks用三年时间成功帮助某大型金融组织植入DevOps实践与工作流程,并形成快速反馈、持续改进的组织文化,使团队能够快速适应市场变化、解
导读ID:TOP100case 导读:智能硬件是继智能手机后的一个新领域
导读ID:TOP100case 导读:魅族Android自动化测试系统通

我要回帖

更多关于 weex开源了吗 的文章

 

随机推荐