這篇文章是翻譯的Vue.js的官方blog星掰,最后加了些自己的理解威始。
原文地址:Why Vue.js doesn't support templateURL
很多Vue的新手,特別是使用過Angular的都會問“我能不能用 templateURL”,由于回答了太多次了,所以作者決定記下來。
Angular的世界里,templateURL 或者 ng-include 允許使用者在運行時動態(tài)的加載遠程模板文件昭卓,這個看起來很方便,作為一個自帶功能,但是讓我們來重新審視下這個功能。
首先,它允許我們能夠編寫一個分離的html文件作為模板,這樣子我們就能在編輯的時候看到正確的語法高亮,這也是很多開發(fā)者喜歡的原因(注:我覺得這是因為現(xiàn)在的人越來越懶,越來越依賴IDE的原因)。但是分離你的js和html代碼真的是個好主意么?在Vue.js的組件中,js和html天然緊耦合,事實上癞谒,這些代碼在一個文件更簡單易懂。在2個文件中來回切換上下文邏輯實際上讓開發(fā)者更不爽。在vue的概念里,組件才是vue.js的基本構(gòu)建單位,并不是模板文件。每一個vue.js的模板都伴隨著他的好基友js,分離他們太過于殘忍了。
其次述暂,因為templateURL是在運行時通過ajax的方式加載模板艺配,不需要構(gòu)建步驟為了你分離的文件赠法。開發(fā)的時候侧纯,這很爽块请,但是上線部署的時候抖棘,你就麻煩了。在HTTP2.0沒有大面積支持前,HTTP的請求數(shù)仍然是頁面加載的最關鍵因素。想象一下,在你的網(wǎng)站中,每個組件都是用templateURL,那么頁面出來前,你可能需要加載幾十個HTTP請求∽可能你并不知道躏筏,大多數(shù)的瀏覽器是限制同一域名的并發(fā)請求數(shù)量的酥泞。當你超過這個限額的時候,你頁面的初始渲染時間就得等待每次請求的返回。當然,有工具可以幫助你提前注冊你所有的模板,但是這就多了一個構(gòu)建步驟冈在,事實上溅固,這就是大型網(wǎng)站的必然趨勢亮元。
那么,在沒有templateURL的情況下,我們怎么處理開發(fā)環(huán)境問題呢艇劫?
在js里面拼接字符串是很爛的做法,使用 <script type="x/template">這種偽模板也不咋樣。那么,現(xiàn)在是時候提升技能,使用像Webpack或者Browserify這種流行的模塊構(gòu)建器了掸驱。如果以前沒有使用過鬼癣,可能有點望而卻步锥余,但是相信我雄驹,這會有一個質(zhì)的飛躍蔬将。對于大型網(wǎng)站和系統(tǒng)來說廉沮,適當?shù)哪K化很必要。更重要的是优炬,你可以編寫Vue組件在一個文件中眉抬,再加上語法高亮昏苏,自定義的預處理器孵构,熱加載恤筛,ES6,內(nèi)置css,自動前置』耍可以讓開發(fā)者提高10倍效率。
最后,Vue還能懶加載你的組件,加上使用wabpack非常容易赵刑,盡管這是為了解決一個問---構(gòu)建頁面文件過于龐大邀桑,初始化比較慢瓤摧,所以你最好還是分割開來比較好。
拋棄template,擁抱組件世界吧=粤伞!
以上是原文的翻譯摄杂,并非完全直譯框杜,有很多自己的語言,大概意思相同,原諒我的文采不行溪烤。
個人覺得掂铐,Vue的組件思想跟React相似,把很多東西放在了js(這里是.vue文件)中渡处,這種做法是把很多緊耦合的東西集中在一起管理稼锅,把原來分割開的css,html,js合成在一起广匙,這個很像很多年的做法,所以很同意玉伯說的,看起來前端是在原地打轉(zhuǎn)了一圈,開發(fā)模式回到了從前的樣子祷肯,但是已經(jīng)螺旋上升了哦,一切都在升級。
通過最近的使用來看,這種component的方式很方便瓷蛙,天然幫你做了解耦的分離艰猬,當然你需要轉(zhuǎn)化自己的思維模式埋市,不能在用jquery的操作DOM方式道宅,同時和Angular也有很多區(qū)別,Vue并非一個框架,而是更像一個類庫,這樣很靈活蝶溶,當然也會有人使用非常hack的方式來編寫代碼巷查,可能會很蛋疼缩膝,這就需要自己注意了,對于團隊而言岸霹,可以很好的積累各種組件疾层,同時功能切分,合作起來更加容易贡避,就看團隊對Vue的理解程度了痛黎。
歡迎大家交流相關技術, 如果對Vue感興趣刮吧,可以加QQ群: 364912432