博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Web] 被遗忘的知识点 - JavaScript加载管理最佳实践
阅读量:4930 次
发布时间:2019-06-11

本文共 2216 字,大约阅读时间需要 7 分钟。

前言


 

最近项目有一个需求,如下: HTML页面一般来说可以由CSS、JavaScript、Dom(通常为Div)以及一些JS初始化页面函数组成,现在需要将一个页面拆分为CSS、JavaScript、Dom和JS init函数四部分,通过从服务端分别获取这四部分,经过拼凑后,渲染出完整的页面。这里面CSS、DOM节点比较好处理,但是JavaScript的加载以及JS init的执行,就要考虑到很多问题。如果有谁遇到类似的问题,可以讨论下,毕竟想要将这个做成一个完善的框架会遇到很多问题。这篇文章,我将介绍一些加载管理JavaScript的一些实践,希望对你有所帮助。

原生的JavaScript实现


 此处为不希望借助框架的朋友们,提供一种方案。

function loadScript(url, callback) {  var script = document.createElement("script")  script.type = "text/javascript";  if (script.readyState) { //IE    script.onreadystatechange = function () {      if (script.readyState == "loaded" || script.readyState == "complete") {        script.onreadystatechange = null;        callback();      }    };  } else { //Others    script.onload = function () {      callback();    };  }  script.src = url;  document.getElementsByTagName("head")[0].appendChild(script);}

LAB实现


 

$LAB.setOptions({  AlwaysPreserveOrder: true}).script("script1.js") // script1, script2, script3, and script4 *DO* depend on each .script("script2.js") // other, and will execute serially in order after all 4 have have.script("script3.js") // loaded in parallel.script("script4.js").wait(function () {  initFunction();});
$LAB.setOptions({  AllowDuplicates: true}).script("script1.js").wait().script("script2.js").script("script3.js").wait().script("script4.js").wait(function () {  initFunction();});

RequireJS实现


 

(function (require) {  var urlArgs = ''; // used for browser cache  if (CNBlogs.isProduct) {    urlArgs = 'v=1';  } else {    urlArgs = "dev=" + (new Date()).getTime();  }  require.config({    baseUrl: '/scripts', //By default load any module IDs from baseUrl    urlArgs: urlArgs,    paths: {      'hello1': 'hello1.min',      'hello2': '/document/11111-11100-010101/latest?' // append ? to avoid .js extension    },    shim: {      'hello3': ['hello1', 'hello2'],      'hello4': ['hello3', 'bootstrap']    },    waitSeconds: 200  });})(require);require(['jqueryui', 'hello4'], function () {  initFunction();});

参考文档


 LABJS官网文档: http://labjs.com/documentation.php

RequireJS官网文档: http://requirejs.org/docs/api.html

后续


 LABJS和RequireJS没有绝对的好差,只看你使用哪一种比较方便而已,这篇文章中很多问题没有细细说明,如果有疑问可以联系,相互探讨。

QQ: 1321518080

 

转载于:https://www.cnblogs.com/youngC/archive/2013/03/06/2946188.html

你可能感兴趣的文章
公共的分页类,包含jsp页面
查看>>
python 正则表达式口诀
查看>>
Hibernate(一)
查看>>
Mac自带服务器的应用
查看>>
17.2.1 Replication Implementation Details 复制实现细节:
查看>>
14.18.1 The InnoDB Recovery Process InnoDB 恢复进程:
查看>>
全表扫描计算成本
查看>>
perl 爬取csdn
查看>>
ie7 setAttribute 【转】
查看>>
struts2标签库----控制标签详解
查看>>
oracle分区的名称和值要一致
查看>>
Vue笔记:在项目中使用 SCSS
查看>>
我的经典算法
查看>>
JQery 中的 $(".bb:eq(1)") eq () 解释。。
查看>>
实验 1-1
查看>>
洛谷P3943 星空
查看>>
巨蟒django之CRM4 一些小功能
查看>>
阅读心得14:《新浪微博用户兴趣建模系统架构》
查看>>
能力、责任心、态度
查看>>
Linux中find常见用法示例
查看>>