随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作、模块复用、单元测试等等一系列复杂的需求。
requirejs是一个非常小巧的javascript模块载入框架,是AMD规范最好的实现者之一。同时可以和其他框架协同工作。
AMD,异步模块定义,所有的模块将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。
举个例子来说明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(){
function fun1(){
alert("it works");
}
fun1();
})()使用了块作用域来申明function防止污染全局变量,本质还是一样的,当运行上面两种例子时,alert执行的时候,html内容是一片空白的,即
<span>body</span>并未被显示,当点击确定后,才出现,这就是JS阻塞浏览器渲染导致的结果。
requirejs的写法:
index.html:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="require.js" defer async="true" ></script><!--让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已经出现在页面中。如果在fun1中查找dom节点操作属性的话,第一种方法无法获取,因为加载顺序由上而下,加载到js的时候body内元素未加载。使用requirejs,因为是异步加载,除了不会阻塞页面加载,获取到body的节点也不是问题。
随着网页JavaScript复杂度提升,传统的script标签引入方式不再适用。RequireJS作为AMD规范的优秀实现,提供了解决模块化、团队协作和单元测试等需求的方案。通过异步加载模块,它允许代码无需等待即可执行,提高开发效率。
1万+

被折叠的 条评论
为什么被折叠?



