原來我真的不會用Seajs
一次痛苦的seajs查“錯”經歷
關於Seajs這裡無需多講,作為一個前端開發或多或少都是聽過它的大名。
最近接手一個專案,模組編寫使用CMD規範,載入使用Seajs。OK,暫時也不太好更改這種模式,那就遵循現有的規範來寫程式碼吧。
但是在檢視頁面載入的檔案列表時,我瞬間一臉懵逼,為啥呢?多出來幾個“不速之客”!如下圖
好吧,這麼說,可能大家還是一臉懵逼,六神無主,我們來看看具體的程式碼
function getData() {
//執行獲取資料前需要載入2個依賴的模組
var $u = require('WebTools'),
$ = require('jquery');
}
一眼看上去簡直是非常理想的模組按需載入的思路,getData函式的執行需要依賴於WebTools和jquery這2個模組,但是在它執行之前是不需要載入這2位大爺的,因此,我們在這個函式內部採取希望引入相應的模組。一切設想都是美好的,這裡同樣如此。
然後,程式碼執行,在getData還未執行時,我“驚喜”地發現,模組居然被引入了。發現這個問題以後,我在seajs的全域性配置檔案中,看是否這2個模組走了“快速”通道被預載入了,然後,配置檔案如下:
preload: ['jquery','commonTemplate','WebTools']
哦,原來是在這裡設定了模組預載入啊,問題的癥結原來是出在這裡?於是,我把這句配置程式碼註釋掉,重新整理頁面,尼瑪...那幾個模組檔案還是被載入了。
難道是快取?不說了,我要清快取了,清完快取,重新整理頁面,模組還是被引用了!!!啥也不說了,讓我哭會兒先。這個時候看來沒什麼招了,那就去seajs的官方文件上瞅瞅去。
從文件上,連結到了<a href="http://www.zhangxinxu.com/sp/seajs/docs/rules.html" target="_blank">[張老師的部落格],我直接把關鍵的資訊貼到下面
從這上面的說明,告訴我們,模組的載入實現不是執行時的,seajs會解析js靜態文字,提取require的模組對應的檔案並將它們載入到頁面上。而且,不管這個require程式碼是否執行,都不影響它的載入。ps.讓seajs做一個固執的美男子。
為了驗證這段話的真實性,於是我註釋掉沒有執行的require程式碼,這些模組果然沒有被載入,看來真是這個原因,原來我們一直以為的按需載入都是自己誤解下的“按需載入”。
那麼,我們想在這裡按需載入,程式碼不執行時不載入相應的模組,就得使用上面提到的
require.asyc('./a.js',function(a){
//a是載入成功的模組輸出
})
經過這個“痛苦”迷惑的過程,終於把問題搞清楚了。其實歸根結底還是由於自己在使用一個框架之前沒有非常深入地去了解它的機制,沒有了解透徹的第三方庫或者框架對於我們的專案而言無異於酣睡的猛虎/定時的炸彈。切忌人與亦云,自勉!
----前端C羅
相關文章
- 原來思念真的會入骨
- 我覺得你可能真的還不會JavaJava
- 看來我是真的不適合華為系的。。。
- 我真的會失憶嗎?
- 我去,你竟然還不會用 synchronizedsynchronized
- 我真的還有機會嗎?
- 介面卡模式:我真的不難模式
- 蘋果手機的月亮圖示有什麼功能?原來這麼好用,不會真的太浪費了蘋果
- 【日記】原來真的有人不適合談戀愛(1194 字)
- I never laid an egg 我從來不會下蛋AI
- 你真的會用 GitHub 麼?超通俗完整的教程來了!Github
- 國產 API 工具天花板,用來搞專案真的不錯API
- 你真的會用 Babel 嗎?Babel
- 你真的會用UITableView嘛UIView
- SAP應用真的不性感麼
- 我並不會求導求導
- 面試官問我會不會Elasticsearch,我語塞了...面試Elasticsearch
- 不好意思!?我真的只會用 Array.prototype.sort() 寫✍排序!排序
- seajsJS
- 恕我直言,我懷疑你並不會用 Java 列舉Java
- 拯救不會函式的我!!函式
- 我不會勸你買 MacMac
- 我X,你不會Google麼?Go
- 前端er,你真的會用 async 嗎?前端
- JSP原來也不難JS
- 不會程式設計?來用Excel抓取網路資料程式設計Excel
- 我去,你竟然還不會用 Java final 關鍵字Java
- 技術大佬:我去,你竟然還不會用 this 關鍵字
- 美團的這些AI應用,倒把我給整不會了AI
- 不會用Java Future,我懷疑你泡茶沒我快, 又是超長圖文!!Java
- MySQL 的 help 命令你真的會用嗎?MySql
- Android開發者:你真的會用AsyncTask嗎?Android
- 你真的會用標點符號嗎?符號
- 為什麼我們越來越不喜歡用網站?網站
- ChatGPT這波熱潮會不會讓我失業?ChatGPT
- 原來Oracle也不喜歡“蜀黍”Oracle
- 原來手機上的藍芽功能,還有這麼多用處,不會用簡直浪費了藍芽
- 什麼?你還不會用位運算來操作狀態?