JS中的MOD

本文的目的是为了能大让家更好的认识 Mod,之所以引入 RequireJS/SeaJS 的对比主要是应大家要求更清晰的对比应用场景,并不是为了比较出孰胜孰劣,RequireJS 和 SeaJS 都是模块化漫漫之路的先驱者,向他们致敬!
##为工程化为生的
模块化是一种处理复杂系统分解成为更好的可管理模块的方式,它可以把系统代码划分为一系列职责单一,高度解耦且可替换的模块,采用模块化可以让系统的可维护性更加简单易得。
JavaScript 并没有为开发者们提供以一种简洁、有条理地的方式来管理模块的方法。从出发点来看,和 RequireJS/SeaJS 是一致的,为开发者提供一套 JavaScript 模块化开发方案,让 JavaScript 的模块化开发变得更简单自然。但是在实现的过程中却存在巨大着的差异。
严格上来讲并不是一个独立的模块化框架,它是被设计用做模块化方案的 JavaScript 支持,需要和自动化工具、后端框架配合来使用,目的在于希望给工程师提供一个类似 nodeJS 一样的开发体验,同时具备很好的线上性能。
RequireJS 和 SeaJS 的定位主要是 Web 浏览器端的模块加载器,依靠 JavaScript 运行时来支持模块定义、依赖分析和加载等功能。
##类 CommonJS 的开发体验
RequireJS 遵守的是 AMD 规范,SeaJS 遵守的是 CMD 的规范。AMD/CMD 规范使用的是“异步模块定义”的方式,这种方式给开发带来了极大的不便,所有的同步代码都需要修改为异步的方式,我们是否可以在前端开发中使用“ CommonJS ”的方式,开发者可以使用自然、容易理解的模块定义和调用方式,不需要关注模块是否异步,不需要改变开发者的开发行为。答案当然是肯定的,并不完全遵守 AMD/CMD 规范,也正是为了为开发者提供更简单自然的开发体验。
###模块定义
Mod 使用 define 来定义一个模块:
define (id, factory)
factory 提供了 3 个参数:require, exports, module ,用于模块的引用和导出。
在平常开发中,我们无需关注模块定义,工具会自动对 JS 进行 define 包装处理:
//common/widget/menu/menu.js
var $ = require('common:widget/jquery/jquery.js');
exports.init = function() {
$('.menu-ui ul li a').click(function(event) {
var self = this;
$('.menu-ui ul li a.active').removeClass('active');
$(self).addClass('active');
event.preventDefault();
编译后代码
define('common:widget/menu/menu.js', function(require, exports, module){
var $ = require('common:widget/jquery/jquery.js');
exports.init = function() {
$('.menu-ui ul li a').click(function(event) {
var self = this;
$('.menu-ui ul li a.active').removeClass('active');
$(self).addClass('active');
event.preventDefault();
###模块调用
会在模块初始化之前自动加载相关依赖。因此当我们需要一个模块时,只需提供一个模块名即可获取:
require (id)
因为所需的模块都已预先加载,因此 require 可以立即(同步)返回该模块引用。无论在页面的 script 还是模块内部,工程师都可以放心通过 require 来加载模块,不需要考虑何时该使用同步接口何时调用异步接口。
##避免模块化引来的性能问题
RequireJS/SeaJS 通过过 JavaScript 运行时来支持“匿名闭包”、“依赖分析”和“模块加载”等功能,“依赖分析”需要在 JavaScript 运行时通过正则匹配到模块的依赖关系,然后顺着依赖链(也就是顺着模块声明的依赖层层进入,直到没有依赖为止)把所有需要加载的模块按顺序一一加载完毕,当模块很多、依赖关系复杂的情况下会严重影响页面性能。通过以下设计避免了如上问题:
通过工具自动添加 define 闭包,线上不需要支持匿名闭包
通过工具自动处理依赖,线上不需要动态处理依赖
通过后端模板自动插入 script,线上不需要通过前端框架进行模块加载
通过以上设计,极其精简,整个文件只有 100 多行,相比下 RequireJS 有 2000 多行,SeaJS 有将近 1000 行。
##避免模块化为打包部署带来的极大不便
通过 RequireJS/SeaJS 进行模块化开发后,合并静态资源(打包)将变得十分不方便和晦涩难懂,每个文件里只能有一个模块,无论是“ combo 插件”还是“ flush 插件”,都需要我们修改模块化调用的代码,这无疑是雪上加霜,工程师不仅需要在开发的时候关注模块定义,在调用的时候还需要关注在一个请求里面加载哪些模块比较合适,模块化的初衷是为了提高开发效率、降低维护成本,但我们发现这样的模块化方案实际上并没有降低维护成本,某种程度上来说使得整个项目更加复杂了。而使用 Mod,工程师只需要在配置文件配置合并策略即可,并不需要关注其他细节,会自动处理好依赖以及合并信息并在模块初始化之前将模块的静态资源以及所依赖的模块加载并准备好。
##自适应的性能优化
整个模块化流程如下:
通过自动化工具对模块进行编译处理,包括对对 JavaScript 模块添加闭包、记录每个静态资源的部署路径以及依赖关系并生成资源表(resource map),如下所示,
"demo.js": {
"uri": "/static/js/demo_33c5143.js",
"type": "js",
"demo.css"
"pkg": "p0"
"index.html": {
"uri": "/index.html",
"type": "html",
"demo.js",
"demo.css"
"script.js": {
"uri": "/static/js/script_32300bf.js",
"type": "js",
"pkg": "p0"
"uri": "/static/pkg/aio_5bb04ef.js",
"type": "js",
"demo.js",
"script.js"
"demo.css"
所有被打包的资源会有一个 pkg 属性 指向该表中的资源,而这个资源,正是我们配置的打包策略。有了这些信息,我们可以通过 Mod 框架(Mod 和后端框架)来管理和控制模块的加载。的模块化可以十分灵活的适应各种性能优化场景,我们还可以通过监控模块的调用情况,自动生成最优的打包配置,让网站可以自适应优化。
提供的是一体化的模块化解决方案,更多的是从工程化、自动化的角度去考虑,RequireJS/SeaJS 更独立灵活。
##相关阅读
作者: - F.I.S我的世界手机版mod_我的世界手机版js大全
|||||||跑跑车安卓下载站
最新合集角色扮演动作冒险体育运动益智休闲棋牌游戏模拟经营射击游戏策略塔防赛车竞速安卓网游安卓软件
我的世界手机版mod我的世界手机版mod大全,为大家提供了我的世界手机版JS、mod以及存档下载,收罗网络上所有可用存档:红石mod、枪械js、材质包等,你想要的这里都有。
大小:5.8M 我的世界单机版官方版是一款像素风的沙盒游戏,我的世界一经推出就非常受玩家的欢迎,自由打造你的城堡。
大小:5.8M 《我的世界》是一款带有生存冒险元素的建造类游戏,整个游戏世界由各种方块构成,玩家可以破坏它们,也可以用自己的方块随意建造东西。
大小:43M 我的世界袖珍版破解版下载,《我的世界:袖珍版》是一款经典好玩的沙盒游戏,玩法十分多样,游戏已解锁所有付费的皮肤包。
大小:13.7M 这个是我的世界手机版万圣节材质包,一款魔幻诡异的材质非常符合万圣节节日气氛的材质,作者魔方工作室,附预览图,喜欢的朋友可以下载试试。
大小:8.2M 我的世界手机版0.11.0 build14启动器下载,可运行我的世界0.11.0 build14版本的游戏,可给适应的游戏版本加载js,mod的实用工具,并实现了菜单汉化。
大小:3.8M ​这个是我的世界手机版糖果材质包,一款清新甜美的材质,怪物采用的是娘化,作者DKS制作团队,附预览图,喜欢的朋友可以下载试试。
大小:2.3M ​这个是我的世界手机版糖果材质包,一款非常可爱甜美的材质,作者DKS制作团队,附预览图,喜欢的朋友可以下载试试。
大小:2.1M 这个是我的世界手机版Pixie材质包,一款色调温暖柔和的手绘风格材质,作者水果酱布丁,附预览图,喜欢的朋友可以下载试试。
大小:7.6M 这个是我的世界手机版宇宙材质包,一款充满现代科幻感的材质,作者苦力怕creeper,附预览图,喜欢的朋友可以下载试试。
大小:3.7M ​这个是我的世界手机版小清新材质包,cs和ocd经典材质的结合体,一款色调清新看着很舒服的材质,附预览图,喜欢的朋友可以下载试试。
大小:1.5M 这个是我的世界手机版中世纪材质包,一款纹理细致,着色淡雅的中世纪风格材质,附预览图,喜欢的朋友可以下载试试。
大小:35.2M 《我的世界:侠盗猎车手Block Cube Gun War》破解版是一款我的世界风格的像素沙盒动作游戏,该版本游戏已修改为无限钞票,进入游戏即可获得,这个世界里无拘无束也一切皆有可能。
大小:12.9M 我的世界安卓中文版下载,经典的沙盒游戏最新汉化版,此次修改了大量细节,喜欢的童鞋赶快来体现吧。
大小:13KB 我的世界中文汉化版下载,是一款风靡世界的3D第一人称沙盘游戏,我的世界游戏没有华丽的画面,更注重游戏性。我的世界汉化版已完美汉化供玩家尽情畅玩,没有语言的困扰让玩家更好的建设自己的帝国!玩家在游戏中做着“建设”与“破坏”两件事,通过像乐高一样的积木来组合与拼凑,轻而易举的就能制作出小木屋、城堡甚至城市,但是若再加上玩家的想像力,空中之城、地底都市都一样能够实现。
大小:18KB 我的方块世界安卓下载,我的方块世界是一款经典的像素复古风模拟经营游戏。玩法与我的世界类似,在这里你依然将要创造出一个属于你的帝国。游戏画面坚持像素画风设计非常复古,操作简单规则易懂,丰富的游戏内容和有趣的玩法将让玩家在建造世界中获得无限刺激和欢乐的游戏体验!
大小:1KB 我的世界手机版光影mod下载,安卓版适用的光影mod,效果还不错,骚年们快来下载吧。
大小:4.2M 我的世界开服软件下载,适用于安卓手机开服的软件,使用简单,小编给大家带来了详细的图文使用教程,包教包会。
大小:3.9M 我的世界皮肤工作室安卓版下载,这是我的世界专业共享工具,大家可以在这里共享你的设计,丰富大家的游戏可玩性。

我要回帖

更多关于 夜空中最亮的星 的文章

 

随机推荐