阅读更多

1顶
3踩

开源软件

原创新闻 腾讯移动前端框架 mt 2.0 发布

2014-06-11 10:29 by 见习记者 luyongfugx 评论(7) 有15140人浏览
什么是MT

MT是手机腾讯网前端团队开发维护的一个专注于移动端的js模块管理框架。

github:https://github.com/mtjs/mt
镜像:http://git.oschina.net/luyongfugx/mt
mt介绍文档:http://mt.tencent.com/mt1index.html

为什么使用MT

  • 无更新不下载
  • 简单友好的模块定义规范
  • 简单易用的打包管理工具
  • 强大的js增量更新代理服务
MT2.0新增特性

  • 本地存储异常回调
  • 统计回调
  • combo支持
  • 新增LCS增量算法
1.  本地存储异常,统计回调

设置回调

通过设施g_config的storeInc对象的statFunc,storeExFunc两个函数,可以设置统计和本地存储异常回调 , statFunc在请求每个js的时候触发,便于统计每个js的请求情况,storeExFunc在写本地存储异常回调, 将脚本内容写入本地存储出现异常的时候调用,用来提供给业务清理本地存储。

                storeInc:{
                    //统计回调,统计脚本请求情况,jsUrl是js地址,
                    //mode是请求模式,full:表示全量请求,
                    //inc表示增量请求,local表示从本地存储读取
                    'statFunc':function(jsUrl,mode){
                        console.log('get '+jsUrl+' from '+mode);
                    },
                    //写本地存储异常回调,将脚本内容写入本地存储
                    //出现异常的时候调用,用来提供给业务清理本地存储
                    //,storekey表示写如的key
                    'storeExFunc':function(storeKey){
                        console.log('set store item '+storeKey+' exception');
                    },
                    'store': true,
                    'inc': true,
                    'proxy':true,
                    'debug': false
                },
                    


2.  combo支持

冷combo

冷combo就是在打包混淆的时候把多个不同的模块打包进同一个js,前台下载的时候直接下载这个js 这个MT1.0已经支持,打包配置如下:

                     {
                         './release/{pv}/base-{fv}.js': {
                                files: ['./js/init.js','./js/util.js']
                         },
                         './release/{pv}/page/p1-{fv}.js': {
                            files: ['./js/page/p1.js']
                         },
                         './release/{pv}/page/p2-{fv}.js': {
                            files: ['./js/page/p2.js']
                         },
                         './release/{pv}/page/p3-{fv}.js': {
                            files: ['./js/page/p3.js']
                         }
                     }
                 


可以看到我们的init,util模块被打到base.js里,达到冷combo的目的

热combo,半热combo

半热combo是相对冷combo来说的,除了走打包实现冷combo以外,我们还支持通过前台配置来实现半热combo或热combo

                            combo:{
                                 //是否启用combo
                                cb:true,
                                //哪些模块的js走半热combo一块下载
                               //,这里数组的每个项是要一起下载的模块
                                conf:['init,util','p1,p2,p3']

                            }
                      


上面的代码,我们设置了combo的cb为true,说明走combo. conf的配置则设置了哪些模块是要走combo一起下载的, 即使打包脚本没有把他们打在一起。 为了看效果,我们先把cb设为false,conf设置为空数组,表示不走combo:

                                   combo:{
                                   //是否启用combo
                                   cb:flase,
                                   //哪些模块的js走半热combo一块下载
                                   //,这里数组的每个项是要一起下载的模块
                                   conf:[]

                                   }


我们看下网络请求:





可以看到base.js,p1.js,p2.js,p3.js是分开下载的,说明没有走combo,然后设置了combo的cb为true,说明走combo. 我们看下网络请求:





可以看到base.js,p1.js是分开下载的,而p2.js,p3.js是一起下载的,这是因为mt2.0自己分析了依赖,把某个模块共同依赖一起下载了,这个例子里面p1依赖了p2,p3两个模块 所以p2,p3被一起下载了,这就是热combo!

这时候我们想,我想让p1,p2,p3一次就下载了,怎么弄?很简单,我们只要设置combo.conf为如下

                                    combo:{
                                    //是否启用combo
                                    cb:true,
                                    //哪些模块的js走半热combo一块下载
                                    //,这里数组的每个项是要一起下载的模块
                                    conf:['init,util','p1,p2,p3']

                                    }


我们看下网络请求:





ok,p1,p2,p3一次就下载了!!,这就是半热combo,需要配置一下conf.

3.  新增基于lcs算法的增量更新

MT1.0的增量更新是基于chunk算法来实现的,精确度是到块级别的。后来很多朋友给我意见,说其实可以做得更加精确一些,精确到字符级别。 于是我用lcs算法实现了精确到字符级别的设计,最后这个demo也可以看作是整个MT2.0的使用方法

首先到我们的github:https://github.com/mtjs/mt下载代码,然后看mt2.0文件夹下的demo目录,里面有个test.html,可以看到总配置代码

                        var g_config =  {
                            jsmap:{
                                'init': 'base.js',
                                'util': 'base.js',
                                'p1': 'page/p1.js',
                                'p2': 'page/p2.js',
                                'p3': 'page/p3.js'
                            },
                            storeInc:{
                                //统计回调,统计脚本请求情况,jsUrl是js地址,mode是请求模式,full:表示全量请求,inc表示增量请求,local表示从本地存储读取
                                'statFunc':function(jsUrl,mode){
                                    console.log('get '+jsUrl+' from '+mode);
                                },
                                //写本地存储异常回调,将脚本内容写入本地存储出现异常的时候调用,用来提供给业务清理本地存储,storekey表示写如的key
                                'storeExFunc':function(storeKey){
                                    console.log('set store item '+storeKey+' exception') ;
                                },
                                'store': true,
                                'inc': true,
                                'proxy':true,
                                'debug': false
                            },
                            //是否走combo,同时支持conf指定哪几个js是合并下载的

                            combo:{cb:true,conf:["init,util","p1,p2,p3"]},
                            testEnv: false,
                            staticPath: '/release',
                            serverDomain: 'http://localhost:6600',
                            buildType: 'project',
                            ver: '2014053000002'

                        };


在2014053000002版本,我们的p2代码如下:

                        define('p2', [], function () {
                        console.log('p2 ok!');
                        document.write('p2 ok!<br>');
                        });

                        }


本地打包

我们运行demo目录下的build.sh ,其实是执行命令

node ../js/mtbuild.js test.html build.conf  lcs

第三个参数说明走lcs增量更新算法,你也可以设置成chunk走老算法

启动增量服务

到js目录下执行命令

node storeincServer.js lcs ../demo

第2个参数说明走lcs增量更新算法,你也可以设置成chunk走老算法,第三个参数是根目录,这里设置成../demo

效果演示

打开chrome(必须支持localstorage),输入地址:http://localhost:6600/test.html,可以看到请求的是全量的js





本地存储里的内容是2014053000002版本的:





接着我们修改p2.js代码,加上"lcs"这3个字 :

                                  define('p2', [], function () {
                                  console.log('p2 ok!');
                                  document.write('p2 ok lcs!<br>');
                                  });


然后重新运行命令

node ../js/mtbuild.js test.html build.conf  lcs

这时候生成2014053000003版本代码,打开chrome(必须支持localstorage), 输入地址:http://localhost:6600/test.html,这时候可以看到请求的内容是增量的,并且精确到了字符级别:





我们来看下同样是这个修改,如果我们走chunk算法,会是什么样子。 我们需要重新走一遍上边的流程,但是把build.sh命令的lcs参数改成chunk,启动storeincServer时的lcs也改成chunk, 这里就不罗嗦步骤了,我们直接看看走chunk是的网络请求:




发现相对lcs算法,chunk的精确度是比较差的,所以推荐使用lcs算法

  • 大小: 28.9 KB
  • 大小: 108.4 KB
  • 大小: 90.9 KB
  • 大小: 31.2 KB
  • 大小: 102.7 KB
  • 大小: 79.3 KB
  • 大小: 84.4 KB
1
3
评论 共 7 条 请登录后发表评论
7 楼 flex_莫冲 2014-06-20 17:44
和requirejs和seajs对比。有什么区别和优势啊
6 楼 chenjianhuacool 2014-06-18 17:34
越来越强大的js。太爽了
---------
My Blog:http://blog.mn886.net/chenjianhua
5 楼 bewithme 2014-06-12 18:32
腾讯的东西直接忽略
4 楼 luyongfugx 2014-06-12 12:56
好吧,你赢了。。。
dsjt 写道
我叫MT 铜墙铁壁的身躯
我招架 我闪避 我用身躯守卫你

3 楼 dsjt 2014-06-12 09:25
我叫MT 铜墙铁壁的身躯
我招架 我闪避 我用身躯守卫你
2 楼 luyongfugx 2014-06-11 11:35
简单说就是一个amd模块管理器,特点是利用localstorage来存储js,在版本更新的时候通过特定算法实现修改哪些字符就下载哪些字符的增量更新,并灵活支持combo.
andyhan 写道
简直无法直视,不晓得干嘛的。

1 楼 andyhan 2014-06-11 11:29
简直无法直视,不晓得干嘛的。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 手机腾讯网前端框架MT2.1.0发布

    手机腾讯网前端框架MT2.1.0发布 主要更新 ------------------------ 1. 优化编辑距离算法性能,混合使用chunk,lcs两种算法提升性能,并保持增量更新字符级别的精度 2. 更新官网,更详细的说明软件的功能和使用...

  • 前端架构技术选型

    环顾四周的大型互联网公司,基本上都有自己的前端框架,比如阿里的Kissy和Arale,腾讯的JX,百度的Tangram,360的QWrap等,为什么?因为要整合别的框架,并且在此基础上发展适合自己的组件库,代价非常大,初期没...

  • 手机腾讯网mt框架之mtwebapp示例解析。

    为什么80%的码农都做不了架构师?...手机腾讯网mt2.0框架发布有一段时间,但是经常有朋友问怎么用,其实项目里面是有一个基于jqmobi和ratchet的webapp示例的,这里我们就来分析一下。 代码目录在: ...

  • 令人激动的前后端极致开源框架

    Amaze UI 是一个轻量级、Mobile first的前端框架, 基于开源社区流行前端框架编写。作者: @云适配 2. CrossApp CrossApp 是一款完全开源、免费、跨平台的移动应用开发引擎 。CrossApp 采用 C++ 开发(即将...

  • Java 学习路线大全,再也不用迷路啦(持续更新)

    知识 Java Web 描述:Java 网页应用开发基础 前端基础 XML JSON Servlet Filter Listener JSP JSTL Cookie Session Spring 5 描述:Java 轻量级应用框架 IOC AOP 事务 SpringMVC 描述:Java 轻量级 web 开发框架 ...

  • GitHub 中国区前 100 名到底是什么样的人?

    http://mt.sohu.com/20160407/n443539407.shtml CSDN2016-04-07 10:18:07阅读(140224)评论(84) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。举报 ...

  • 2014年国人开发的最热门的开源软件TOP 100

    UI 是一个轻量级、Mobile first 的前端框架,基于开源社区流行前端框架编写。 开发语言:JavaScript/HTML/CSS 授权协议:MIT 源码下载: http://git.oschina.net/amazeui/amazeui 软件作者: @云适配 ...

  • 怒肝 Java 学习路线一条龙!

    知识 Java Web 描述:Java 网页应用开发基础 前端基础 XML JSON Servlet Filter Listener JSP JSTL Cookie Session Spring 5 描述:Java 轻量级应用框架 IOC AOP 事务 SpringMVC 描述:Java 轻量级 web 开发框架 ...

  • 多维系统下单点登录深入详解

    单点登录之整体解决方案2.1 设计方案-Cookie2.2 设计方案-分布式Session2.3 设计方案-客户端令牌Token2.4 技术方案-CAS认证2.5 技术方案-OpenID认证2.6 技术方案-SAML2.0认证2.7 技术方案-OAuth2认证3. 单点登录之...

  • 移动端开发资源

    使用Flexible实现手淘H5页面的终端适配... 移动前端自适应解决方案和比较:http://caibaojian.com/mobile-responsive-example.html 如何适配不同分辨率和不同屏幕尺寸的手机:http://www.html5cn.org/article-93...

  • 国内开源产品记录

    根据开源中国网站 2014 年收录的软件总体来看,从软件访问、收藏、交流分享和项目本身的更新频度等诸多...Amaze UI 是一个轻量级、Mobile first的前端框架, 基于开源社区流行前端框架编写。作者:@云适配 2. Cro

  • 2014年最热门的国人开发开源软件TOP100

    其中包含了开源框架、应用引擎、项目管理、前端框架、解析器、云存储软件等等…… 不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必。做开源中国六年有余,这六年时间国内的开源蓬勃发展,...

  • 程序员随笔

    UI框架:Foundation,Boostrap,Pure,EasyUI,Polymer 前端UI设计师必去的几个网站:Dribbble,awwwards,unmatchedstyle,UIMaker Mozilla 开发者中心:https://developer.mozilla.org/en-US/ 图标资源:IcoMoon...

  • 100个最热门的国人开发开源软件

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有 ruby、python、php 等动态语言的开发效率...

  • Java 学习路线

    知识 Java Web 描述:Java 网页应用开发基础 前端基础 XML JSON Servlet Filter Listener JSP JSTL Cookie Session Spring 5 描述:Java 轻量级应用框架 IOC AOP 事务 SpringMVC 描述:Java 轻量级 web 开发框架 ...

  • 淘宝技术牛p博客整理

    对互联网应用各方面的技术都感兴趣,比较关注的方向有:应用开发框架,分布式存储和搜索系统,大流量网站架构,并行计算,移动平台和前端技术等; 在加入淘宝前: 1. 1999年~2002年浙大读研期间在阿里巴巴兼职...

  • 中文热门开源项目Top100,你知道多少?

     first的前端框架, 基于开源社区流行前端框架编写。 开发语言:JavaScript/ html / CSS 授权协议:MIT 源码下载: http://git.oschina.net/amazeui/amazeui 软件作者: @云适配 9. fastjson ...

  • 2014 top100

    JFinal是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有 ruby、python、php 等动态语言的开发效率...

  • 国人开发开源软件TOP100

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有 ruby、python、php 等动态语言的开发效率

  • 高级色系PPT11.pptx

    高级色系PPT11.pptx

Global site tag (gtag.js) - Google Analytics