第一次接触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 相关文章推荐
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
IE6、IE7中获取Button元素的值的bug说明
Aug 28 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
Sep 09 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
JavaScript实现点击按钮直接打印
Jan 06 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
浅谈Node.js 沙箱环境
May 15 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 Javascript
JS实现移动端在线签协议功能
Aug 22 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 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
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
Python 深入理解yield
2008/09/06 Python
python实现简单的TCP代理服务器
2014/10/08 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
自荐书格式
2013/12/01 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
学前班学生评语
2014/12/29 职场文书
兵马俑导游词
2015/02/02 职场文书
预备党员入党感想
2015/08/10 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
Python基础学习之奇异的GUI对话框
2021/05/27 Python
Win11 BitLocker 驱动器加密
2022/04/19 数码科技
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS