浅析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之AJAX框架使用说明
Apr 24 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
Sep 14 Javascript
常用js字符串判断方法整理
Oct 18 Javascript
JavaScript模块随意拖动示例代码
May 27 Javascript
浅谈JavaScript函数节流
Dec 09 Javascript
sails框架的学习指南
Dec 22 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
Apr 01 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
vue中slot(插槽)的介绍与使用
Nov 12 Javascript
react 组件传值的三种方法
Jun 03 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
destoon二次开发入门示例
2014/06/20 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Python多继承顺序实例分析
2018/05/26 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
python DataFrame 取差集实例
2019/01/30 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
长安大学毕业生自我鉴定
2014/01/17 职场文书
不假外出检讨书
2014/01/27 职场文书
学生安全教育材料
2014/02/14 职场文书
普通党员对照检查材料
2014/08/28 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书