第一次接触JS require.js模块化工具


Posted in Javascript onApril 17, 2016

随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作、模块复用、单元测试等等一系列复杂的需求。

第一次接触JS require.js模块化工具

RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一。最新版本的RequireJS压缩后只有14K,堪称非常轻量。它还同时可以和其他的框架协同工作,使用RequireJS必将使您的前端代码质量得以提升。

requirejs能带来什么好处

官方对requirejs的描述:

RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node. Using a modular script loader like RequireJS will improve the speed and quality of your code.

大致意思:

在浏览器中可以作为js文件的模块加载器,也可以用在Node和Rhino环境,balabala...。这段话描述了requirejs的基本功能"模块化加载",什么是模块化加载?我们要从之后的篇幅中一一解释

先来看一段常见的场景,通过示例讲解如何运用requirejs

正常编写方式
index.html:

<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript" src="a.js"></script>
 </head>
 <body>
  <span>body</span>
 </body>
</html>

a.js:

function fun1(){
 alert("it works");
}
 
fun1();

可能你更喜欢这样写

(function(){
 function fun1(){
  alert("it works");
 }
 
 fun1();
})()

第二种方法使用了块作用域来申明function防止污染全局变量,本质还是一样的,当运行上面两种例子时不知道你是否注意到,alert执行的时候,html内容是一片空白的,即<span>body</span>并未被显示,当点击确定后,才出现,这就是JS阻塞浏览器渲染导致的结果。

requirejs写法

当然首先要到requirejs的网站去下载js -> requirejs.rog
index.html:

<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript" src="require.js"></script>
  <script type="text/javascript">
   require(["a"]);
  </script>
 </head>
 <body>
  <span>body</span>
 </body>
</html>

a.js:

define(function(){
 function fun1(){
  alert("it works");
 }
 
 fun1();
})

浏览器提示了"it works",说明运行正确,但是有一点不一样,这次浏览器并不是一片空白,body已经出现在页面中,目前为止可以知道requirejs具有如下优点:

1、防止js加载阻塞页面渲染
2、使用程序调用的方式加载js,防出现如下丑陋的场景

<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>
<script type="text/javascript" src="c.js"></script>
<script type="text/javascript" src="d.js"></script>
<script type="text/javascript" src="e.js"></script>
<script type="text/javascript" src="f.js"></script>
<script type="text/javascript" src="g.js"></script>
<script type="text/javascript" src="h.js"></script>
<script type="text/javascript" src="i.js"></script>
<script type="text/javascript" src="j.js"></script>

以上就是本文的全部内容,希望对大家认识require.js模块化工具有所帮助。

Javascript 相关文章推荐
use jscript with List Proxy Server Information
Jun 11 Javascript
js+css实现上下翻页相册代码分享
Aug 18 Javascript
seajs学习之模块的依赖加载及模块API的导出
Oct 20 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
bootstrap快速制作后台界面
Dec 05 Javascript
关于react中组件通信的几种方式详解
Dec 10 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
Jul 19 Javascript
微信小程序登录session的使用
Mar 17 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
vue quill editor 使用富文本添加上传音频功能
Jan 14 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 #Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 #Javascript
理解javascript对象继承
Apr 17 #Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 #Javascript
js如何准确获取当前页面url网址信息
Sep 13 #Javascript
基于javascript实现图片切换效果
Apr 17 #Javascript
非常棒的jQuery图片轮播效果
Apr 17 #Javascript
You might like
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
如何在PHP中生成随机数
2020/06/04 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
Python网站验证码识别
2016/01/25 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
pycham查看程序执行的时间方法
2018/11/29 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
Python学习之os模块及用法
2020/06/03 Python
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
大整数数相乘的问题
2012/07/22 面试题
外语专业毕业生个人的自荐信
2013/11/19 职场文书
电话销售经理岗位职责
2013/12/07 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang
nginx 配置指令之location使用详解
2022/05/25 Servers