浅析Javascript使用include/require


Posted in Javascript onNovember 13, 2013

1. javascript include
Javascript 没有 include 语句有时挺讨厌, 特别是脚本和脚本之间存在依存的关系, 你根本就不能动态的去控制加载脚本, 一般来说最简单的 include 基本就是这样的, 当然我们这个使用了 jQuery 来进行请求脚本.

  include: function (jsurl) {
        if (jsurl == null || typeof(jsurl) != 'string') return;
        var js = document.createElement('script');
        js.type = 'text/javascript';
        js.charset = 'utf-8';
        js.src = jsurl;
        $.ajaxSetup({ cache : true });
        $('head').append(js);
        //$.getScript(jsurl);
 }

基本用法

需要注意的是该函数其实在发送GET请求的事情是 jQuery.ajax 的 getScript() 来处理的, 但是在GET后的处理和 $.getScript() 不同, 因此导致使用方法会不一样, getScript() 一般需要把有依赖的函数写到它的回调函数中去, 如:

$.getScript('some.js', function() {
    // 做写依赖 some.js文件的事情.
});

而我们这里的 include 不需要这么写, 而是直接:

include('some.js');

// 这里可以直接写依赖 some.js 文件中定义的函数

开启缓存

另外就是关于文件缓存, 默认情况下 $.getScript 是会在 url 后面加上一个时间戳, 使得在第二次请求的时候不让浏览器去读取缓存文件, 如果我们 getScript("some.js") , 最后在请求的时候会变成 GET some.js?_23432434534235 之类的, 这是一种强制不缓存的策略, 在开发阶段是比较好的, 但到了生产阶段, 会导致用户的浏览器每次都不缓存我们的js脚本, 这对效率是很大的影响, 我们应该自己在js脚本后面自己加上版本戳, 比如 some.js?v=1 , 而不是使用每次都会变的时间戳, 所以需要使用:

$.ajaxSetup({ cache : true });

这样就会关闭jQuery自动在url后面加上时间戳的特性.

requireJs

如果你的脚本大量的存在互相依赖关系, 而又需要动态的决定加载哪些脚本, 那么我推荐的是使用requirejs .

它的基本用法是:

require(["some/module", "a.js", "b.js"], function(someModule) {
    // do something
});

它有一个要求就是你的前端js是作为模块式的开发, 在前端逻辑比较复杂的话, 使用模块式来进行前端开发应该是种不错的选择, 而关于JS的模块式开发在今后文章再专门谈, 这里只简单介绍一下, 如果对这个方面感兴趣的可以到requireJs官网去看看.

Javascript 相关文章推荐
js根据给定的日期计算当月有多少天实现思路及代码
Feb 25 Javascript
JavaScript正则表达式之multiline属性的应用
Jun 16 Javascript
js跨域请求的5中解决方式
Jul 02 Javascript
jQuery实现根据滚动条位置加载相应内容功能
Jul 18 Javascript
微信小程序 for 循环详解
Oct 09 Javascript
JavaScript实现垂直滚动条效果
Jan 18 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
js实现京东轮播图效果
Jun 30 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
js将字符串转成正则表达式的实现方法
Nov 13 #Javascript
js禁止页面使用右键(简单示例代码)
Nov 13 #Javascript
如何判断鼠标是否在DIV的区域内
Nov 13 #Javascript
HTTP 304错误的详细讲解
Nov 13 #Javascript
js动态修改input输入框的type属性(实现方法解析)
Nov 13 #Javascript
js字母大小写转换实现方法总结
Nov 13 #Javascript
jQuery替换字符串(实例代码)
Nov 13 #Javascript
You might like
推荐php模板技术[转]
2007/01/04 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
学习ExtJS border布局
2009/10/08 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python自定义简单图轴简单实例
2018/01/08 Python
django框架ModelForm组件用法详解
2019/12/11 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
Html5页面中的返回实现的方法
2018/02/26 HTML / CSS
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
一些Unix笔试题和面试题
2012/09/25 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
初中生自我评价
2014/02/01 职场文书
环保倡议书300字
2014/05/15 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
南极大冒险观后感
2015/06/05 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server