前端的離線處理
這裡的離線處理指標下把一些事件提前做好,不在應用運行時再去做
其實前端的離線處理在一些工具中可以看到,比如說css中的背景圖,某些css工具在打包處理的時候,如果圖片的檔案大小比較小,工具會讀取檔案內容轉成base64直接放到css檔案內,減少http請求。
類似的還有使用字串模板的情況下,提前把字串模板變成js中的函數,避免運行時再去生成對應的函數
接下來聊聊其他的離線處理
模板的離線處理
自訂標籤
現在很多前端框架支援自訂標籤的書寫方式,例如基於vue的element。我們以它的inputnumber為例來看: http://element.eleme.io/#/en-US/component/input-number
<el-input-number v-model="num1" @change="handleChange" :min="1" :max="10"></el-input-number>
一個自訂的el-input-number標籤,最終產生的html是
<div class="el-input-number"> <div class="el-input"> <input type="text" autocomplete="off" class="el-input__inner"> </div> <span class="el-input-number__decrease el-icon-minus is-disabled"></span> <span class="el-input-number__increase el-icon-plus"></span></div>
vue會把自訂標籤替換成最終實現的html內容,這個過程是運行時做的。其實這個過程是可以透過工具線下處理好的,不必在程式執行時再做。
字串模板
字串模板在許多前端頁面中可見,模板引擎也很多,以underscore中的template方法為例:https://github.com/jashkenas/underscore/blob/master/underscore.js #L1579,它裡面在產生函數時,如果沒有variable參數,則會加一個with語句,通常我們是避免掉with的
那麼有沒有什麼辦法是不用傳variable,也不使用with語句呢?這個也是可以線下處理好的。例如模板如下
<%for(var i=0;i<list.length;i++){%> <%=list[i].text%><%}%>
透過工具我們是很容易轉換成下面的內容的
<%for(var i=0;i<obj.list.length;i++){%> <%=obj.list[i].text%> <%}%>
這個就需要藉助acorn類似的工具來處理了,不過肯定是可以做到的。
有的同學說這樣做是錯的,因為with語句不在運行時,根本不知道它裡面的變數從哪裡取值。是的,不過我們完全可以透過約定模板中用到的變數都應該在使用時,明確傳遞
比如window上有一個getUser()方法在去掉with前
var tmpl='<%=getUser()%>'; _.template(tmpl,{});
這時可以正常工作
通過離線工具的處理,去掉with後,模板變成了
var tmpl='<%=obj.getUser()%>'; _.template(tmp,{});
這時候就不行了,不過我們可以約定模板中使用到的都應該在調用時顯式傳遞,從而避免一些潛在的問題出現。
當然,這個模板字串離線處理最好的結果是直接就是一個函數放在那裡了。
css圖片的處理
在我們的專案中,考慮以下檔案結構
|____index.html |____index.css |____index.js
我們通常是把html和css打包時,打包到js檔案中的,因為js檔案可以很方便的模組化,把html ,css依附在js檔案上。這樣js按需載入時,html和css也按需載入了,不需要為它們特殊處理。
假設它們最終打包出來index.js如下
var Magix=require('magix'); var indexHTML='<div class="mp-et5-content">...</div>'; Magix.applyStyle('mp-ec5','.mp-et5-content{color:red}');
更多資訊可參考 https://github.com/thx/magix-combine/issues/15這個包裝工具。
樣式變成一個字串放在js檔案中。
我們看一個事情:在css中使用背景圖時,為了達到最佳實踐,我們希望在支持webp後綴的使用webp,在高清屏下使用2倍圖等 。如果我們用純css實現,要寫很多media query,產生css程式碼。
其实这个事情我们没办法离线处理,但我们可以这样做:书写css仍然是写最基础的背景图,不去考虑webp,2倍图等事情,也不需要写media query之类的。在打包时,把图片这块调用js函数在运行时动态处理
如前面文件结构中的,假设index.css中使用了一个背景图
.title{background-image:url(//cdn/a.png)}
我们打包到js中时,完全可以变成
var Magix=require('magix'); var ataptImg=function(img){ //处理webp 2倍图等 return img } Magix.applyStyle('mp-ec5','.mp-et5-title{background-image:url('+adaptImg('//cdn/a.png')+'}');
这样可以很方便的处理掉这些事情。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

學習JavaScript不難,但有挑戰。 1)理解基礎概念如變量、數據類型、函數等。 2)掌握異步編程,通過事件循環實現。 3)使用DOM操作和Promise處理異步請求。 4)避免常見錯誤,使用調試技巧。 5)優化性能,遵循最佳實踐。

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...
