好好的用好seajs吧!
來自: http://www.famanoder.com/bokes/5675cf20a51cc4280d320a8b
頁面加載時,渲染節點同時會執行script塊內的JS和外部加載的無包裝JS,這兩種JS的安全執行,要保證涉及到的相關節點已被渲染到頁面;所以外部JS要想安全的早于DOMReady執行,要放在頁面底部;所以全部JS放到底部最好,不使用DOMReady也能最早執行;
對于外部加載的有包裝的JS,包括ready內的,seajs模塊內的,onload內的,執行順序依次為:ready早于seajs早于onload;
有種情況是 ready 在 seajs 里:
你會發現他會在 onload 后面執行,不信你試試,所以不推薦這樣;
一般情況下,我們都希望節點渲染完就執行JS,我們也會使用seajs來組織那一堆堆的模塊,seajs只有屈指可數的幾個api,一般的前端都能很容易的上手使用,但經常容易忽略一個問題:如何通過seajs真正的實現模塊化?
seajs是個模塊加載器,他是用來組織你那一堆堆模塊的,而不是用seajs那種寫法來裝逼的,經常看到很多項目下,script的src下既有seajs還有其他框架,最多的就是jquery,而seajs里也有require(‘jquery’),很明顯,這是一種‘混合模式’,半模塊化半零散狀態,甚至那些seajs加載的模塊,也不具有模塊的獨立性,而只是define或exports了一下,頁面內另加載一個非模塊化的jquery,來補充一部分JS;每次看到這種搞法,頓時覺得好無力啊!
對于一個頁面,只需要define一個主模塊(頁面模塊),在里面require其他基礎模塊,來實現一個頁面調用一個JS文件;所以jquery應該是一個基礎模塊,而不應該單獨加載;
1、 模塊化 jquery :
2、 模塊化插件(主要是 jquery 插件):
( 1 )、
( 2 )、使用 seajs 的 shim
實現前后端的徹底分離,將靜態資源從后臺程序中分離出來,頁面要加載哪些js,怎么加載,什么時候加載,由你決定,而不是叫后臺去寫到某個位置;因為復雜的項目中經常會有靜態資源被寫到后臺的配置文件中,這對于前端來說不是那么好的做法,首先容易被濫用,其次不利于前端結構的維護,除非你的前端沒有結構,還有就是失去了前端的獨立性,難以實現結構上的前后端分離;
已成型項目怎么使用 seajs 完成模塊化的結構轉型呢?首先要解決以下問題:
( 1 )、獨立出基礎模塊;
( 2 )、完成每個頁面的模塊化改造;
( 3 )、在最少依賴后臺的情況下,將每個頁面的主模塊寫入頁面;
對于已成型的項目,第三點恐怕是最難的,哪怕你已將每個頁面主模塊拆分好了,但又不得不叫后臺更新每個頁面,來加載你的模塊,這恐怕比較難,也說明你的結構還不夠好;
前面說了,要實現前后端的徹底分離,將靜態資源從后臺程序中獨立出來;怎么做呢,我這樣想的,也在自己的博客系統中試著實現過:再建一個模塊,作為所有頁面模塊的主模塊, 在這個模塊里,寫個頁面與頁面模塊對應的配置 json ,將所有頁面的要加載的頁面主模塊配置到這里,那么以后要新增頁面,要增減 JS 只需要弄那個頁面模塊和這個公共主模塊了,這樣就能把所有 JS 文件從后臺配置中抽離出來,由這個公共主模塊來配置,現在問題的第三點也就好解決了,后臺并不需要太多改動, JS 文件全是你的了,由你分配!每個頁面只會出現兩個 script 的 src ,一個是 seajs.js 一個是 main.js ;
seajs是為前端的模塊化而生的,如果你的項目結構沒有實現模塊化,那么你沒必要使用它,我想對于一個前端來說,使用seajs并不難,難得的是真正的在模塊化的基礎上構建一個由前端管理的結構;
</div>