使用RequireJS优化JavaScript引用代码的方法


Posted in Javascript onJuly 01, 2015

 RequireJS是一个提高你的javascript代码速度和质量的有效方法,同时它还让你的代码更容易阅读和维护。

在本文中,我会为你介绍RequireJS和应该如何使用它。我们讨论引入文件和定义模块,甚至还会接触优化方面的知识。

简单的说,require.js是一个脚本载入程序,允许你把你的javascript代码独立成文件和模块,同时管理每个模块间的依赖关系。

引入文件

在开始使用RequireJS前,我们需要先下载它的库和Asynchronous Module Definition(AMD)文件。然后在文档头部链接到require.js文件,就如:

<script src="require.js" data-main="main"></script>

你可能会问data-main属性是什么,使用RequireJS意味着当你在文档的头部调用require的时候,你同时也会链接到你的javascript应用的主文件,在这个例子里面就是main.js(请注意,RequireJS自动添加.js后缀到文件名的后面)

在main.js文件里面,需要为RequireJS做配置,载入模块和定义一个base路径,以便在引入文件时使用。

Require函数

RequireJS使用一个简单的require函数去导入脚本,在这个例子里面,RequireJS导入的是JQuery:
 

require(["jquery"], function($) {
 $(‘#mydiv”).html(‘Hello this is RequireJS talking”);
});

RequireJS的一个优点就是,它非常容易阅读。在上面的代码中,我们可以看到,首先require函数抓取名字为jquery.js的文件,然后给一个匿名函数传入$作为参数,当这个动作完成后,你就可以任意使用JQuery的代码了。

现在,你的代码中一般不会包含jquery.js文件的jQuery库,就如大多数的插件和框架,我们通常选择从他们的GitHub或者Google CDN中导入进来,这样我们就需要配置他们的真正路径:
 

require.config({
 paths: {
  "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"
 }
});

这就是说你可以通过Google导入jquery(请注意我在这个例子里面使用的是"jquery"名称,你可以使用任何你喜欢的名称)

定义模块

使用AMD模式,意味着我们的代码可以结构化成为模块;这些模块实现应用中的某些功能。你可以在一个模块中只放两行代码或者100行代码,这完全决定于你想通过模块实现什么功能。

定义模块,我们可以这样写:
 

define(function () {
 function add (x,y) {
  return x + y;
 }
});

这个里面里面,我定义了一个add函数,并且没有任何依赖,但是如果这个函数需要jquery才能正常工作,定义代码可能就是这样:
 

define([‘jquery'], function () {
 function place(mydiv) {
$(mydiv).html(‘My Sample Text');
 }
});

使用这种语法,我们告诉JavaScript首先导入jquery,然后运行代码,这样任何时候都能使用jquery。我们也可以使用在Javascript文件中定义的模块,不仅限于框架或者插件。

优化

就像你看到的一样,RequireJS是一个强大的工具,去把你的文件组织成模块,并且在你需要的时候才导入。其中的缺点就是大量的javascript文件的时候,也需要大量的导入时间,所以RequireJS包含了一个optimizer优化器去收集所有文件的数据并把它放到一个压缩文件里面。

总的来说,RequireJS是一个很好的工具去组织和优化你web应用中的Javascript。

Javascript 相关文章推荐
用Javascript实现锚点(Anchor)间平滑跳转
Sep 08 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
AngularJS基础 ng-cloak 指令简单示例
Aug 01 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
May 08 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
Oct 27 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
Aug 19 Javascript
详解mpvue scroll-view自动回弹bug解决方案
Oct 01 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
taro小程序添加骨架屏的实现代码
Nov 15 Javascript
javascript实现移动端红包雨页面
Jun 23 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 Javascript
优化RequireJS项目的相关技巧总结
Jul 01 #Javascript
JavaScript的RequireJS库入门指南
Jul 01 #Javascript
Backbone.js的一些使用技巧
Jul 01 #Javascript
JavaScript框架是什么?怎样才能叫做框架?
Jul 01 #Javascript
javascript常用的方法分享
Jul 01 #Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 #Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 #Javascript
You might like
php xfocus防注入资料
2008/04/27 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
mysql总结之explain
2012/02/27 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
JavaScript之引用类型介绍
2012/08/10 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
js实现日历
2020/11/07 Javascript
分享几道你可能遇到的python面试题
2017/07/24 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
带刀到教室的检讨书
2014/10/04 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL