第一次接触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 相关文章推荐
javascript 精粹笔记
May 09 Javascript
常见JS效果之图片减速度滚动实现代码
Dec 08 Javascript
javascript获取checkbox复选框获取选中的选项
Aug 12 Javascript
jquery常用方法及使用示例汇总
Nov 08 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
May 03 Javascript
js仿腾讯QQ的web登陆界面
Aug 19 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
小程序实现短信登录倒计时
Jul 12 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
儿童编程python入门
2018/05/08 Python
Python数学形态学实例分析
2019/09/06 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
详解pandas映射与数据转换
2021/01/22 Python
写给老师的表扬信
2014/01/21 职场文书
应用英语专业自荐信
2014/01/26 职场文书
2015年推普周活动总结
2015/03/27 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL