浅析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 相关文章推荐
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
Javascript this 函数深入详解
Dec 13 Javascript
实例详解display:none与visible:hidden的区别
Mar 30 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 Javascript
详解Js里的for…in和for…of的用法
Mar 28 Javascript
vue滚动固定顶部及修改样式的实例代码
May 30 Javascript
Vue初始化中的选项合并之initInternalComponent详解
Jun 11 Javascript
详解vue中v-for的key唯一性
May 15 Vue.js
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
重置版游戏视频
2020/04/09 魔兽争霸
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
PHP 裁剪图片
2021/03/09 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
js变换显示图片的实例
2013/04/16 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
浅谈Python大神都是这样处理XML文件的
2019/05/31 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
小学教师自我鉴定
2013/11/07 职场文书
八年级美术教学反思
2014/02/02 职场文书
个人授权委托书范本
2014/04/03 职场文书
企业安全生产责任书
2014/04/14 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
艾滋病宣传标语
2014/06/25 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
让世界充满爱观后感
2015/06/10 职场文书
初中英语教学随笔
2015/08/15 职场文书