yepnope.js使用詳解及示例分享
yepnope.js的一個(gè)典型實(shí)例:
yepnope({ test : Modernizr.geolocation, yep : 'normal.js', nope : ['polyfill.js', 'wrapper.js'] });
此實(shí)例表示如果Modernizr.geolocation為真的時(shí)候加載normal.js,為假則加載polyfill.js及wrapper.js。
yepnope完整語(yǔ)法:
yepnope([{ test : /* boolean(ish) 輸入條件 */, yep : /* array (of strings) | string - 條件為真時(shí)加載的資源 */, nope : /* array (of strings) | string - 條件為假時(shí)加載的資源 */, both : /* array (of strings) | string - 條件無(wú)論真假都加載 */, load : /* array (of strings) | string - 條件無(wú)論真假都加載 */, callback : /* function ( testResult, key ) | object { key : fn } 回調(diào)函數(shù) */, complete : /* function 加載完成后執(zhí)行的函數(shù) */ }, ... ]);
為什么使用yepnope:
Gzip后只有1.6K比大多數(shù)的資源加載器都小
可以加載CSS及JS
yepnope通過(guò)了作者能找到的所有的瀏覽器的測(cè)試
yepnope完全分離資源加載和執(zhí)行,這樣你可以控制資源的執(zhí)行順序
提供友好的API和促進(jìn)資源的邏輯組合
模塊化設(shè)計(jì),你可以自己擴(kuò)充功能(見(jiàn)稍后的Prefixes及filters)
鼓勵(lì)按需加載資源
集成在 Modernizr 中
默認(rèn)總是按照資源列表(你所提供的文件列表順序)順序執(zhí)行
可處理資源回退(fallback),且仍?xún)?yōu)先并行下載依賴(lài)的腳本,看下代碼更容易理解:
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' ); /*注意這點(diǎn)和yepnope的區(qū)別,yepnope加載失敗后僅需重新加載備用資源即可,不會(huì)影響依賴(lài)此資源的其他文件執(zhí)行*/ } else { someLoader( 'jquery.plugin.js' ); } });
yepnope的不足
并不總是最快的,像labjs等優(yōu)化后可能加載速度優(yōu)于yepnope,但需要根據(jù)你的實(shí)際情況考慮使用哪個(gè)加載器
需要給資源設(shè)置一定的緩存頭(這一點(diǎn)很重要)
并不像RequireJS等類(lèi)庫(kù)有自己的生成工具及豐富的API,yepnope僅實(shí)現(xiàn)了基本加載器功能
默認(rèn)總是按照你提供的資源列表順序執(zhí)行,這一點(diǎn)有可能會(huì)影響速度
yepnope使用實(shí)例:
直接傳入字符串
yepnope( '/url/to/your/script.js' );
傳入一個(gè)Object對(duì)象
yepnope( { load : '/url/to/your/script.js' } );
回調(diào)函數(shù)實(shí)例(回調(diào)函數(shù)中url表示加載的資源文件名;result表示test參數(shù)的結(jié)果;key表示使用 key maping 時(shí)候的文件名縮寫(xiě))
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函數(shù)實(shí)例
yepnope( { test : window.JSON, nope : 'json2.js', complete : function () { var data = window.JSON.parse( '{ "json" : "string" }' ); } } );
Key maping實(shí)例
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!' ); } } } );
當(dāng)然回調(diào)函數(shù)你還可以這樣寫(xiě):
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個(gè)Prefixes
css! Prefix:可以加載任何后綴的文件作為css文件
yepnope( 'css!mystyles.php?version=1532' );
preload! Prefix:預(yù)加載資源到緩存中,但不執(zhí)行(下次load時(shí)候才執(zhí)行)
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) });
相關(guān)文章
原生javascript如何實(shí)現(xiàn)共享onload事件
這篇文章主要介紹了原生javascript如何實(shí)現(xiàn)共享onload事件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07javascript中數(shù)組的concat()方法使用介紹
數(shù)組的concat()方法想必大家比不陌生吧,在本文為大家介紹下javascript中數(shù)組的concat()方法的具體使用,感興趣的朋友可以參考下2013-12-12JS中promise特點(diǎn)與信任問(wèn)題解決
大家都知道Promise解決了回調(diào)地獄的問(wèn)題,“回調(diào)地獄”所說(shuō)的嵌套其實(shí)是指異步的嵌套,它帶來(lái)了兩個(gè)問(wèn)題:可讀性的問(wèn)題和信任問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于JS中promise特點(diǎn)與信任問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下2022-06-06JavaScript中style.left與offsetLeft的使用及區(qū)別詳解
這篇文章主要介紹了JavaScript中style.left與offsetLeft的使用及區(qū)別詳解的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06js判斷手機(jī)是否安裝并打開(kāi)app,未安裝則安裝app【兼容Android、ios,親測(cè)可用】
這篇文章主要介紹了js判斷手機(jī)是否安裝并打開(kāi)app,未安裝則安裝app,通過(guò)調(diào)用瀏覽器判斷app,兼容Android、ios等系統(tǒng),,需要的朋友可以參考下2023-05-05js創(chuàng)建元素(節(jié)點(diǎn))示例
本文為大家介紹下使用js是如何創(chuàng)建元素(節(jié)點(diǎn))的,感興趣的朋友不要錯(cuò)過(guò)2014-01-01一步一步的了解webpack4的splitChunk插件(小結(jié))
這篇文章主要介紹了一步一步的了解webpack4的splitChunk插件(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09