浅析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 相关文章推荐
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 Javascript
jquery $.ajax相关用法分享
Mar 16 Javascript
使用CSS样式position:fixed水平滚动的方法
Feb 19 Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
vue2.0实现导航菜单切换效果
May 08 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 jQuery
原生JS实现前端本地文件上传
Sep 08 Javascript
JS控制GIF图片的停止与显示
Oct 24 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 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 curl 并发最佳实践代码分享
2012/09/05 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
php curl_init函数用法
2014/01/31 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
简单介绍Python中的floor()方法
2015/05/15 Python
python八大排序算法速度实例对比
2017/12/06 Python
python内存管理机制原理详解
2019/08/12 Python
python3访问字典里的值实例方法
2020/11/18 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
对照检查剖析材料
2014/09/30 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL