亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

JS實現完美include加載功能代碼

2024-07-10 13:25:36
字體:
來源:轉載
供稿:網友
js為什么需要include?讓我們想想這樣1個場景,a.js 需要用到1個公用的common.js,當然你可以在用到a.js的頁面使用<script src="common.js">,但假設有5個頁面用到了a.js,你是不是要寫5遍<script。而且要是以后a.js 又需要引用common2.js,你是不是又的修改5個頁面了?

已有js include的一些問題
  在寫這個之前在網上搜索了些資料,發現以前寫的include都存在2個問題,這也是include需要解決的比較重要的2個問題。
  1、相對路徑的問題: 在a.js中使用include("../js/common.js"); include 函數中肯定是使用相對路徑,是相對a.js的路徑。而a.js在html中使用<script>嵌入有可能是相對路徑,有可能是絕對路徑。 include函數如何才能真正確定common.js的絕對路徑,或者是相對html的相對路徑。網上一些為了解決這個問題,還需要加一些js變量,不方便。
  2、引用的問題。 網上include函數的實現幾乎都是使用下面2種方式插入common.js
      document.write("<script src='" + .. + "></script>")
    或者
      var s = document.createElement("script");
      s.src = ...;
      head.insertAfter(s,...);
    document.write 輸出的腳本會在a.js后面加載,而createElement("script")創建的腳本是非阻塞加載。 所以如果在common.js加載完畢之前,a.js中調用了common.js的函數就會報錯。

實現
  解決上面2個問題,就可以實現js include。
  第1個問題,我的方法是先獲取到a.js在html中的絕對路徑(如果是相對路徑,就轉為絕對路徑),然后再把common.js的路徑轉為絕對路徑。
  第2個問題,采用同步的ajax來請求common.js,這樣就不會出現引用問題。

  實現代碼如下:

復制代碼 代碼如下:


// 根據相對路徑獲取絕對路徑
function getPath(relativePath,absolutePath){
var reg = new RegExp("http://.//./","g");
var uplayCount = 0; // 相對路徑中返回上層的次數。
var m = relativePath.match(reg);
if(m) uplayCount = m.length;
var lastIndex = absolutePath.length-1;
for(var i=0;i<=uplayCount;i++){
lastIndex = absolutePath.lastIndexOf("http://www.49028c.com/",lastIndex);
}
return absolutePath.substr(0,lastIndex+1) + relativePath.replace(reg,"");
}
function include(jssrc){
// 先獲取當前a.js的src。a.js中調用include,直接獲取最后1個script標簽就是a.js的引用。
var scripts = document.getElementsByTagName("script");
var lastScript = scripts[scripts.length-1];
var src = lastScript.src;
if(src.indexOf("http://")!=0 && src.indexOf("http://www.49028c.com/") !=0){
// a.js使用相對路徑,先替換成絕對路徑
var url = location.href;
var index = url.indexOf("?");
if(index != -1){
url = url.substring(0, index-1);
}
src = getPath(src,url);
}
var jssrcs = jssrc.split("|"); // 可以include多個js,用|隔開
for(var i=0;i<jssrcs.length;i++){
// 使用juqery的同步ajax加載js.
// 使用document.write 動態添加的js會在當前js的后面,可能會有js引用問題
// 動態創建script腳本,是非阻塞下載,也會出現引用問題
$.ajax({type:'GET',url:getPath(jssrc,src),async:false,dataType:'script'});
}
}


在a.js中直接使用 include("../js/common.js");

多請求的問題
  使用上面的include看上去挺爽的,不過卻帶來另外1個嚴重的問題,就是多發送了1個ajax的請求。
  我們常常為了WEB性能,而合并js,減少請求。但使用include后卻偏偏多了請求。如果這個問題不解決,相信很多人都不會在正式產品中使用include的了,除非是局域網產品。

  如何解決這個多請求的問題,我也思考很久,最后覺的單單使用客戶端js是沒辦法解決了。所以就想到了使用服務端代碼來解決
  還記的我之前有文章介紹 "js、css的合并、壓縮、緩存管理"的時候,就通過服務器端代碼在程序啟動時候去合并js。

  所以我把include多請求的解決方案也加到里面去。就是在程序啟動的時候去查找所有的js,發現有使用include的就把include中common.js的源代碼替換該include函數。這樣a.js中在運行的時候就沒有include函數,而是真真包含了common.js的內容的js文件

后語
  丫的。說到最后,怎么又把所有的include都替換掉了,哪之前說的那么多不白說了。

  個人覺得,每個產品都應該要區分開發環境和產品環境(一般通過配置文件進行區分),在開發環境應該以開發效率為首要,而產品環境則以性能為首。所以這里的inlcude就應該要區分對待,在開發環境中使用js include來提高開發和維護效率,而在產品環境中則自動把所有include替換成真真的js文件的內容。

  都說完了,歡迎大家拍磚討論。
[作者]:BearRui(AK-47)
[博客]:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久亚洲精品中文字幕| 人人爽久久涩噜噜噜网站| 91黑丝高跟在线| 色噜噜国产精品视频一区二区| 国产91免费看片| 亚洲va男人天堂| 亚洲国模精品私拍| 欧美性xxxxxxx| 欧美激情日韩图片| 久久国产精品影视| 国产一区红桃视频| 日韩中文在线中文网在线观看| 久久久极品av| 国产成人精品在线| 日韩在线观看免费高清| 亚洲国产第一页| 国产精品日韩欧美大师| 国内精品小视频在线观看| 少妇av一区二区三区| 成人国产精品一区| 中文字幕日韩欧美精品在线观看| 国产一区欧美二区三区| 91在线播放国产| 亚洲国产美女精品久久久久∴| 在线亚洲国产精品网| 91精品国产综合久久男男| 国产久一一精品| 久久亚洲精品一区| 久久露脸国产精品| 国产欧美一区二区三区在线看| 在线激情影院一区| 久久久在线视频| 亚洲美女精品成人在线视频| 亚洲欧美变态国产另类| 亚洲国产三级网| 亚洲aⅴ日韩av电影在线观看| 亚洲欧美日韩天堂一区二区| 国产精品久久久久久久美男| 亚洲欧洲成视频免费观看| 性欧美暴力猛交69hd| 国产精品视频永久免费播放| 日韩专区中文字幕| 欧美色播在线播放| 国产欧美一区二区三区在线| 久久久精品视频在线观看| 欧美黄色片免费观看| 国产极品精品在线观看| 色先锋资源久久综合5566| 欧美日韩精品在线视频| 亚洲激情电影中文字幕| 亚洲欧美变态国产另类| 亚洲香蕉成视频在线观看| 亚洲久久久久久久久久| 久久精品美女视频网站| 91精品久久久久久久久久| 日韩在线视频播放| 久久99久久久久久久噜噜| 亚洲自拍av在线| 亚洲精品视频免费在线观看| xxx成人少妇69| 亚洲成人性视频| 国产精品99久久久久久久久| 国产91免费观看| 国产精品一区二区电影| 亚洲区在线播放| 97人人模人人爽人人喊中文字| 精品国产欧美一区二区三区成人| 啊v视频在线一区二区三区| 色噜噜狠狠狠综合曰曰曰88av| 国产日韩换脸av一区在线观看| 亚州欧美日韩中文视频| 亚洲精品久久久久久下一站| 日韩精品www| 国产日韩精品在线观看| 国产欧美日韩中文字幕| 美女少妇精品视频| 欧美极品美女视频网站在线观看免费| 日韩中文字幕av| 91精品视频免费看| 最新国产精品拍自在线播放| 精品国产视频在线| 欧美成人免费全部| 97在线视频免费看| 国产在线a不卡| 96pao国产成视频永久免费| 91国偷自产一区二区三区的观看方式| 亚洲欧美日韩天堂| 欧美极品少妇全裸体| 在线日韩中文字幕| 欧美多人乱p欧美4p久久| 欧美激情视频在线免费观看 欧美视频免费一| 久久影视电视剧免费网站| 91中文精品字幕在线视频| 精品久久久在线观看| 亚洲第一区中文99精品| 欧美黑人一级爽快片淫片高清| 久久久国产一区| 国产精品va在线播放我和闺蜜| 91久久精品国产| 欧美日本国产在线| 欧美麻豆久久久久久中文| 精品国产一区二区三区久久久| 欧美日韩国产精品一区| 日韩一区在线视频| 91免费看视频.| 久久国产精品99国产精| 国产精品高潮视频| 国产欧美日韩中文字幕在线| 亚洲精品中文字幕有码专区| 在线播放日韩精品| 欧美激情一二三| 精品女同一区二区三区在线播放| 在线成人激情视频| 久久影院免费观看| 亚洲在线观看视频网站| 国产黑人绿帽在线第一区| 黑人精品xxx一区一二区| 日韩美女毛茸茸| 亚洲欧洲黄色网| 欧美在线观看网站| 97香蕉久久超级碰碰高清版| 成人精品在线观看| 欧美福利视频在线观看| 九九热精品视频国产| 精品香蕉在线观看视频一| 91av在线看| 欧美色视频日本高清在线观看| 国产一区二区三区四区福利| 久久av红桃一区二区小说| 91在线色戒在线| 欧美日韩国产精品一区二区不卡中文| 91精品视频在线播放| 91av免费观看91av精品在线| 91精品免费看| 亚洲第一中文字幕在线观看| 欧美视频13p| 亚洲色图13p| 综合网日日天干夜夜久久| 欧美一区二区三区四区在线| 日韩高清不卡av| 亚洲在线免费视频| 国产色综合天天综合网| 国产精品黄视频| 国产网站欧美日韩免费精品在线观看| 性欧美亚洲xxxx乳在线观看| 欧美第一黄网免费网站| 国产精品久久久久久久久久久久久久| 国产一区二中文字幕在线看| 久久999免费视频| 久久6免费高清热精品| 91精品国产91久久久久久吃药| 日韩大片免费观看视频播放| 国产婷婷色综合av蜜臀av| 国产精品男人爽免费视频1| 在线电影av不卡网址| 国产丝袜一区二区三区免费视频| 欧美一区二区三区……| 色综合视频网站| 欧美美最猛性xxxxxx| 亚洲aⅴ日韩av电影在线观看| 美女扒开尿口让男人操亚洲视频网站| 国产日韩视频在线观看| 日韩av手机在线观看| 亚洲精品国产欧美|