简介

动态加载js,css在现在以及将来肯定是很重要的。目前来看前端代码编写的业务量已经远远超过后端编写的。随着对用户体验度逐渐增强,前端业务复杂,加载速度变得很慢很慢。为了解决这个问题,目前出现的两个前端模块加载器为require.js与sea.js,这两款模块加载器都不错。但是呢,有时候我仅仅需要的只是动态加载一个js,不需要把代码模块化,那我们只能自己手写一个加载函数。

简单的加载js

/**
* HTML动态加载js
* @path {String} src地址必须带有后缀名.js
* */
function addJs(path){
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = path;
script.type = 'text/javascript';
head.appendChild(script);
}

这段代码已经满足我们需求,动态加载js。随之问题又来了,假设某一个前端小白不知道你加载了没有,又加载了一次,这样就是浪费流量,时间,还有可能造成一些问题。现在我来优化一下。

次佳的加载js

/**
* HTML动态加载js
* @path {String} src地址必须带有后缀名.js
* */
var cache=[];
function addJs(path){
var flag=0;//检查是否加载的状态
for(var i=cache.length;i--;){
cache[i]==path?flag=1:flag=0;
}
if(flag){//如果已经加载则不加载
return;
}
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = path;
script.type = 'text/javascript';
head.appendChild(script);
cache.push(path);//把加载过的存起来
}

一天线上又出现bug了,结果一看是因为动态加载的js导致,因为只加载了,由于加载的js文件过大,导致还没加载成功,下边就开始使用了。下面在完善一下。

不错的加载js

/**
* HTML动态加载js
* @path {String} src地址必须带有后缀名.js
* @callback {Function} 加载成功的回掉函数
* */
var cache=[];
function addJs(path,callback){
var flag=0;//检查是否加载的状态
for(var i=cache.length;i--;){
cache[i]==path?flag=1:flag=0;
}
if(flag){//如果已经加载则不加载
return;
}
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = path;
script.type = 'text/javascript';
head.appendChild(script);
script.onload = script.onreadystatechange = function() {/*判断是否加载成功*/
if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete" ) {
script.onload = script.onreadystatechange = null;
callback();
}
};
cache.push(path);//把加载过的存起来
}

可以看出现在稍微完善一点,一天技术总监说,首页加载太慢了,js,css都要动态加载。这下我们还需要更改代码,再次优化一下。

推荐使用的动态加载js,css

var addStyleJs = (function(dom) {
var cache = {}, /*缓存加载过的css或者js*/
funct;
/**
* HTML动态加载css或者js
* @path {String} src 或 link 地址必须带有后缀名.js或者.css
* @callback {Function} 加载成功的回掉函数
* */
funct = function(path, callback) {
if(!path) { /*检查路径是否为空*/
throw new Error("请输入path路径!");
};
var fn=Object.prototype.toString.call(callback)=="[object Function]"?callback:function(){};
if(".js" == path.substr(-3)) { /*检查路径后缀名是否为.js*/
addJs(path, fn);
} else if(".css" == path.substr(-4)) { /*检查路径后缀名是否为.css*/
addCss(path, fn);
} else {
throw new Error('请输入正确的path路径!');
}
};
/**
* HTML 动态添加 CSS
* @path {String} link 地址必须带有后缀名.css
* @callback {Function} 加载成功的回掉函数
* */
function addCss(path, callback) {
if(!checkcache(path)) { /*检查是否加载过*/
var head = dom.getElementsByTagName('head')[0];
var link = dom.createElement('link');
link.href = path;
link.rel = 'stylesheet';
link.type = 'text/css';
head.appendChild(link); /*添加到HTML中*/
link.onload = link.onreadystatechange = function() { /*判断是否加载成功*/
if(!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
link.onload = link.onreadystatechange = null;
callback();
}
};
cache[path] = 1; /*存储加载过的css路径,值设为1*/
}
};
/**
* HTML动态加载js
* @path {String} src 地址必须带有后缀名.js
* @callback {Function} 加载成功的回掉函数
* */
function addJs(path, callback) {
if(!checkcache(path)) { /*检查是否加载过*/
var head = dom.getElementsByTagName('head')[0];
var script = dom.createElement('script');
script.src = path;
script.type = 'text/javascript';
head.appendChild(script); /*添加到HTML中*/
script.onload = script.onreadystatechange = function() { /*判断是否加载成功*/
if(!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
script.onload = script.onreadystatechange = null;
callback();
}
};
cache[path] = 1; /*存储加载过的js路径,值设为1*/
}
};
/**
* 检查是否加载
* @path {String} 路径
* */
function checkcache(path) {
if(cache[path]) { /*判断是否加载过的js路径*/
return true;
} else {
return false;
}
};
return funct;
}(document));

总结

动态加载js与动态加载css在日常开发中也许会不常用,但是对于我们来说这是必须要会的。代码也许学几天就会写,但是写一段高质量的代码则需要你常常写,常常总结,思考。欢迎大家与我一同进步。如有问题请大家指出哦!

动态加载js css 插件的更多相关文章

  1. js动态加载js css文件,可以配置文件后辍,防止浏览器缓存

    js的引用,在浏览器,或微信上访问经常会遇到文件改了,但就是没有更新的问题,使用此函数可以轻松解决缓存问题只需要把js的引用方式改为使用此函数加载即可 源码如下: /** * js动态加载js css ...

  2. 页面加载异常 清除浏览器静态文件 js css 缓存 js动态加载js css文件,可以配置文件后辍,防止浏览器缓存

    js清除浏览器缓存的几种方法 - 兔老霸夏 - 博客园 https://www.cnblogs.com/Mr-Rocker/p/6031096.html js清除浏览器缓存的几种方法   一.CSS和 ...

  3. 动态加载js,css

    今天项目中需要用到动态加载 CSS 文件,经过一番折腾终于搞定,回家整理了一下,顺便融合了动态加载 JS 的功能写成了一个对象,先上代码: var dynamicLoading = { css: fu ...

  4. JS动态加载 js css

    1.动态加载js function loadScript( url ){ var script = document.createElement( "script" ); scri ...

  5. 动态加载js,css(项目中需要的)

    最近做的一个项目需要加入百度统计,大家都知道百度统计在页面引用就是一坨js,实现方法很简单引用到页面就ok了. 那么问题来了,虽然我不知道百度统计的原理是啥,我的测试服引用了百度统计,百度统计账号里面 ...

  6. jquery动态加载js/css文件方法

    先来看jquery自带的getSrcript文件 方法 代码如下 复制代码 $.getScript(url,callback) 实例 代码如下 复制代码 var testVar = 'New JS l ...

  7. 动态加载js和css

    开发过程中经常需要动态加载js和css,今天特意总结了一下常用的方法. 1.动态加载js 方法一:动态加载js文件 // 动态加载js脚本文件 function loadScript(url) { v ...

  8. 动态加载js和css的jquery plugin

    一个简单的动态加载js和css的jquery代码,用于在生成页面时通过js函数加载一些共通的js和css文件. //how to use the function below: //$.include ...

  9. 关于动态加载js

    已知一个需要动态加载的js的文件路径数组,动态加载数组里面所有的js文件. 加载分两种情况: 1. 并行加载,不管js的执行顺序. 2. 串行加载,即一个一个加载,上一个加载完再加载下一个,直到最后. ...

随机推荐

  1. 基于SSM之Mybatis接口实现增删改查(CRUD)功能

    国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...

  2. js循环生成多个easyui datagrid数据网格时,初始化表格

    $.each( content, function(i, item){ var info_tpl = "";var result_tpl = "";var pr ...

  3. Java高新技术 注解

      Java高新技术 注解 知识概要:                  (1)了解注解 (2)注解的应用结构图 (3)@Retention(RetentionPolicy.RUNTIME)    ...

  4. 玩转INotifyPropertyChanged和ObservableCollection

    转载:   http://www.cnblogs.com/Jax/archive/2009/10/13/1582128.html 本文的代码都是基于WPF的,对于Silverlight,这些技术也同样 ...

  5. gitlab实时备份方案(非官方命令)

    gitlab自带的备份功能做不到实时备份,为了尽可能减少意外情况导致的丢失数据,自己搞了一个实时备份的功能. 备份的大头主要是两部分,数据库和代码库.数据库由DBA配置主备. 仓库经过测试,通过lsy ...

  6. MySql5.7安装及配置

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...

  7. 【学习】js学习笔记:对象的一些基础知识

    1.创建对象 //构造函数方法 function fun1(){} var obj=new fun1(); //Object方法,O要大写 var obj1=new Object(); //json方 ...

  8. 服务器cpu100%问题分析

    ecs 130 : slb:

  9. C#学习笔记-观察者模式

    题目1:几个同事为了在上班期间偷偷看休息,做点其他的事情,就和小秘偷偷联系了一下,如果老板回来了,就麻烦小秘偷偷通知一声,这样方便大家及时变更自己的工作状态. 分析: 根据题目分析,首先明确,肯定会有 ...

  10. java实现在线文档浏览

    目前发现两种方法: 1.http://dxx23.iteye.com/blog/1947083 FlexPaper+SWFTools ,java实现在线文档浏览 2.webOffice