yepnope.js使用详解及示例分享


Posted in Javascript onJune 23, 2014

yepnope.js的一个典型实例:

yepnope({
 test : Modernizr.geolocation,
 yep : 'normal.js',
 nope : ['polyfill.js', 'wrapper.js']
});

此实例表示如果Modernizr.geolocation为真的时候加载normal.js,为假则加载polyfill.js及wrapper.js。

yepnope完整语法

yepnope([{
 test : /* boolean(ish) 输入条件    */,
 yep : /* array (of strings) | string - 条件为真时加载的资源 */,
 nope : /* array (of strings) | string - 条件为假时加载的资源 */,
 both : /* array (of strings) | string - 条件无论真假都加载 */,
 load : /* array (of strings) | string - 条件无论真假都加载 */,
 callback : /* function ( testResult, key ) | object { key : fn } 回调函数 */,
 complete : /* function 加载完成后执行的函数 */
}, ... ]);

为什么使用yepnope

Gzip后只有1.6K比大多数的资源加载器都小
可以加载CSS及JS
yepnope通过了作者能找到的所有的浏览器的测试
yepnope完全分离资源加载和执行,这样你可以控制资源的执行顺序
提供友好的API和促进资源的逻辑组合
模块化设计,你可以自己扩充功能(见稍后的Prefixes及filters)
鼓励按需加载资源
集成在 Modernizr 中
默认总是按照资源列表(你所提供的文件列表顺序)顺序执行
可处理资源回退(fallback),且仍优先并行下载依赖的脚本,看下代码更容易理解:

yepnope([
 {
  load: 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
  complete: function () {
   if ( ! window.jQuery ) {
    yepnope( 'local/jquery.min.js' );
   }
  }
 },
 {
  load : 'jquery.plugin.js',
  complete: function () {
   jQuery(function () {
    jQuery( 'div' ).plugin();
   });
  }
 }
]);

而其他加载器则可能必须这样处理:

someLoader('http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js', function(){
 if ( ! window.jQuery ) {
  someLoader( 'local/jquery.min.js', 'jquery.plugin.js' );
 /*注意这点和yepnope的区别,yepnope加载失败后仅需重新加载备用资源即可,不会影响依赖此资源的其他文件执行*/
 } else {
  someLoader( 'jquery.plugin.js' );
 }
});

yepnope的不足

并不总是最快的,像labjs等优化后可能加载速度优于yepnope,但需要根据你的实际情况考虑使用哪个加载器
需要给资源设置一定的缓存头(这一点很重要)
并不像RequireJS等类库有自己的生成工具及丰富的API,yepnope仅实现了基本加载器功能
默认总是按照你提供的资源列表顺序执行,这一点有可能会影响速度

yepnope使用实例:

直接传入字符串

yepnope( '/url/to/your/script.js' );

传入一个Object对象

yepnope( {
   load : '/url/to/your/script.js'
   } );

回调函数实例(回调函数中url表示加载的资源文件名;result表示test参数的结果;key表示使用 key maping 时候的文件名缩写)

yepnope( {
  test : window.JSON,
  load : '/url/to/your/script.js',
  callback : function ( url, result, key ) {
   // whenever this runs, your script has just executed.
   alert( 'script.js has loaded!' );
  }
 } );

complete函数实例

yepnope( {
  test : window.JSON,
  nope : 'json2.js',
  complete : function () {
   var data = window.JSON.parse( '{ "json" : "string" }' );
  }
 } );

Key maping实例

yepnope( {
  test : Modernizr.geolocation,
  yep : {
   'rstyles' : 'regular-styles.css'
  },
  nope : {
   'mstyles' : 'modified-styles.css',
   'geopoly' : 'geolocation-polyfill.js'
  },
  callback : function ( url, result, key ) {
   if ( key === 'geopoly' ) {
    alert( 'This is the geolocation polyfill!' );
   }
  }
 } );

当然回调函数你还可以这样写:

yepnope( {
  test : Modernizr.geolocation,
  yep : {
   'rstyles' : 'regular-styles.css'
  },
  nope : {
   'mstyles' : 'modified-styles.css',
   'geopoly' : 'geolocation-polyfill.js'
  },
  callback : {
   'rstyles' : function ( url, result, key ) {
    alert( 'This is the regular styles!' );
   },
   'mstyles' : function ( url, result, key ) {
    alert( 'This is the modified styles!' );
   },
   'geopoly' : function ( url, result, key ) {
    alert( 'This is the geolocation polyfill!' );
   }
  },
  complete : function () {
   alert( 'Everything has loaded in this test object!' );
  }
 } );

yepnope官方提供的3个Prefixes

css! Prefix:可以加载任何后缀的文件作为css文件

yepnope( 'css!mystyles.php?version=1532' );

preload! Prefix:预加载资源到缓存中,但不执行(下次load时候才执行)

yepnope( {
 load : 'preload!jquery.1.5.0.js',
 callback : function ( url, result, key ) {
  window.jQuery; //undefined
  yepnope(jquery.1.5.0.js);
  window.jQuery; //object
 }
} );

ie! Prefix(es):判断是否IE浏览器(除ie!外,还支持 ie5, ie6, ie7, ie8, ie9, iegt5, iegt6, iegt7, iegt8, ielt7, ielt8, 及 ielt9这几种Prefix)

yepnope({
 load: ['normal.js', 'ie6!ie7!ie-patch.js'] // ie6 or ie7 only (on patch)
});
Javascript 相关文章推荐
innerText和innerHTML 一些问题分析
May 18 Javascript
小试JQuery的AutoComplete插件
May 04 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
node.js中的fs.chmodSync方法使用说明
Dec 18 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
Oct 20 Javascript
基于jquery实现省市联动效果
Nov 23 Javascript
js实现常用排序算法
Aug 09 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
jsonp跨域获取百度联想词的方法分析
May 13 Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 Javascript
js的延迟执行问题分析
Jun 23 #Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
Jun 23 #Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
Jun 23 #Javascript
js自定义鼠标右键的实现原理及源码
Jun 23 #Javascript
js代码实现的加入收藏效果并兼容主流浏览器
Jun 23 #Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 #Javascript
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 #Javascript
You might like
用php实现选择排序的解决方法
2013/05/04 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
php和nginx交互实例讲解
2019/09/24 PHP
javascript 写类方式之六
2009/07/05 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
Python对列表排序的方法实例分析
2015/05/16 Python
python实现读取命令行参数的方法
2015/05/22 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
python同步两个文件夹下的内容
2019/08/29 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python os模块在系统管理中的应用
2020/06/22 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
实习护士自我鉴定
2013/10/13 职场文书
团员的自我评价
2013/12/01 职场文书
住房公积金接收函
2014/01/09 职场文书
会计学生自我鉴定
2014/02/06 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
委托协议书范本
2014/04/22 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
幼儿园安全管理制度
2015/08/05 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android