亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

前端的離線處理

terasum / 1444人閱讀

這里的離線處理指線下把一些事件提前做好,不在應(yīng)用運(yùn)行時(shí)再去做

其實(shí)前端的離線處理在一些工具中可以看到,比如說(shuō)css中的背景圖,某些css工具在打包處理的時(shí)候,如果圖片的文件大小比較小,工具會(huì)讀取文件內(nèi)容轉(zhuǎn)成base64直接放到css文件內(nèi),減少http請(qǐng)求。

類(lèi)似的還有使用字符串模板的情況下,提前把字符串模板變成js中的函數(shù),避免運(yùn)行時(shí)再去生成相應(yīng)的函數(shù)

接下來(lái)聊聊其他的離線處理

模板的離線處理 自定義標(biāo)簽

現(xiàn)在很多前端框架支持自定義標(biāo)簽的書(shū)寫(xiě)方式,比如基于vue的element。我們以它的inputnumber為例來(lái)看一下: http://element.eleme.io/#/en-US/component/input-number

一個(gè)自定義的el-input-number標(biāo)簽,最終生成的html是

vue會(huì)把自定義標(biāo)簽替換成最終實(shí)現(xiàn)的html內(nèi)容,這個(gè)過(guò)程是運(yùn)行時(shí)做的。其實(shí)這個(gè)過(guò)程是可以通過(guò)工具線下處理好的,不必在程序運(yùn)行時(shí)再做。

字符串模板

字符串模板在很多前端頁(yè)面中可見(jiàn),模板引擎也很多,以u(píng)nderscore中的template方法為例:https://github.com/jashkenas/underscore/blob/master/underscore.js#L1579,它里面在生成函數(shù)時(shí),如果沒(méi)有variable參數(shù),則會(huì)加一個(gè)with語(yǔ)句,通常我們是避免掉with的

那么有沒(méi)有什么辦法是不用傳variable,也不使用with語(yǔ)句呢?這個(gè)也是可以線下處理好的。
比如模板如下

<%for(var i=0;i
    <%=list[i].text%>
<%}%>

通過(guò)工具我們是很容易轉(zhuǎn)換成下面的內(nèi)容的

<%for(var i=0;i
    <%=obj.list[i].text%>
<%}%>

這個(gè)就需要借助acorn類(lèi)似的工具來(lái)處理了,不過(guò)肯定是可以做到的。

有的同學(xué)說(shuō)這樣做是錯(cuò)的,因?yàn)閣ith語(yǔ)句不在運(yùn)行時(shí),根本不知道它里面的變量從哪里取值。是的,不過(guò)我們完全可以通過(guò)約定模板中用到的變量都應(yīng)該在使用時(shí),顯式傳遞

比如window上有一個(gè)getUser()方法
在去掉with前

var tmpl="<%=getUser()%>";
_.template(tmpl,{});

這時(shí)可以正常工作

通過(guò)離線工具的處理,去掉with后,模板變成了

var tmpl="<%=obj.getUser()%>";
_.template(tmp,{});

這時(shí)候就不行了,不過(guò)我們可以約定模板中使用到的都應(yīng)該在調(diào)用時(shí)顯式傳遞,從而避免一些潛在的問(wèn)題出現(xiàn)。

當(dāng)然,這個(gè)模板字符串離線處理最好的結(jié)果是直接就是一個(gè)函數(shù)放在那里了。

css圖片的處理

在我們的項(xiàng)目中,考慮如下文件結(jié)構(gòu)

|____index.html
|____index.css
|____index.js

我們通常是把html和css打包時(shí),打包到j(luò)s文件中的,因?yàn)閖s文件可以很方便的模塊化,把html,css依附在js文件上。這樣js按需加載時(shí),html和css也按需加載了,而且不需要為它們特殊處理。

假設(shè)它們最終打包出來(lái)index.js如下

var Magix=require("magix");
var indexHTML="
...
"; Magix.applyStyle("mp-ec5",".mp-et5-content{color:red}");

更多信息可參考 https://github.com/thx/magix-combine/issues/15這個(gè)打包工具。

樣式變成一個(gè)字符串放在js文件中。

我們看一個(gè)事情:在css中使用背景圖時(shí),為了達(dá)到最佳實(shí)踐,我們希望在支持webp后綴的使用webp,在高清屏下使用2倍圖等 。如果我們用純css實(shí)現(xiàn),要寫(xiě)很多media query,產(chǎn)生很多css代碼。

其實(shí)這個(gè)事情我們沒(méi)辦法離線處理,但我們可以這樣做:書(shū)寫(xiě)css仍然是寫(xiě)最基礎(chǔ)的背景圖,不去考慮webp,2倍圖等事情,也不需要寫(xiě)media query之類(lèi)的。在打包時(shí),把圖片這塊調(diào)用js函數(shù)在運(yùn)行時(shí)動(dòng)態(tài)處理

如前面文件結(jié)構(gòu)中的,假設(shè)index.css中使用了一個(gè)背景圖

.title{background-image:url(//cdn/a.png)}

我們打包到j(luò)s中時(shí),完全可以變成

var Magix=require("magix");
var ataptImg=function(img){
  //處理webp 2倍圖等
  return img
}
Magix.applyStyle("mp-ec5",".mp-et5-title{background-image:url("+adaptImg("http://cdn/a.png")+"}");

這樣可以很方便的處理掉這些事情。像阿里cdn,七牛云存儲(chǔ)等,都有相應(yīng)的規(guī)則生成相應(yīng)的webp或壓縮圖片等功能,所以我們adaptImg方法很容易實(shí)現(xiàn)

同時(shí)因?yàn)槲覀兪褂玫氖亲罨A(chǔ)的css功能,所以不存在瀏覽器不兼容的問(wèn)題,像css背景圖中image-set用來(lái)處理2倍圖的方案,在firefox中是不被支持的。

模板中的圖片

如css中的圖片處理一樣,我們同樣可以用工具離線處理。通過(guò)識(shí)別模板中的img標(biāo)簽,再對(duì)src屬性做處理即可,這樣開(kāi)發(fā)時(shí)只去關(guān)注基礎(chǔ)功能的實(shí)現(xiàn),其它的適配都應(yīng)該交由工具去實(shí)現(xiàn),最大化的解放自己。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/80948.html

相關(guān)文章

  • 前端計(jì)劃——面試題總結(jié)-HTML篇

    摘要:發(fā)生在很久以前的及更老的瀏覽器向過(guò)渡時(shí)期。數(shù)據(jù)始終在同源的請(qǐng)求中攜帶即使不需要,會(huì)在瀏覽器和服務(wù)器間來(lái)回傳遞。存儲(chǔ)大小數(shù)據(jù)大小不能超過(guò)。與上面問(wèn)題相連,比也是明智的選擇。表現(xiàn)與結(jié)構(gòu)相分離。兩種設(shè)計(jì)思想是有不同的考慮。 前言: 吾生也有涯,而知也無(wú)涯,以有涯隨無(wú)涯,殆己————莊子 閱讀本文前請(qǐng)做好以下心理準(zhǔn)備:本系列文章將不定期更新。本系列文章不是很?chē)?yán)謹(jǐn)。 前端面試之HTML篇 Pa...

    2json 評(píng)論0 收藏0
  • Hybird-離線資源生成工具

    摘要:為了滿足以上需求,就需要制作打包腳本和工具,來(lái)滿足正常的運(yùn)維。離線資源生成工具離線資源的生成,我們提供了一個(gè)工具可以打包出增量和全量升級(jí)包。比如和需要統(tǒng)一成。 目錄 背景 離線資源生成工具 前端協(xié)助 背景 由于線上樂(lè)刻客戶端 App 第一次打開(kāi)平臺(tái) H5 需要幾秒的加載時(shí)間,這個(gè)體驗(yàn)對(duì)用戶來(lái)說(shuō)并不友好,為了讓用戶跳轉(zhuǎn) H5 和跳轉(zhuǎn)到原生一樣的用戶體驗(yàn),就需要把 H5 相關(guān)的離線資源...

    siberiawolf 評(píng)論0 收藏0
  • Hybird-離線資源生成工具

    摘要:為了滿足以上需求,就需要制作打包腳本和工具,來(lái)滿足正常的運(yùn)維。離線資源生成工具離線資源的生成,我們提供了一個(gè)工具可以打包出增量和全量升級(jí)包。比如和需要統(tǒng)一成。 目錄 背景 離線資源生成工具 前端協(xié)助 背景 由于線上樂(lè)刻客戶端 App 第一次打開(kāi)平臺(tái) H5 需要幾秒的加載時(shí)間,這個(gè)體驗(yàn)對(duì)用戶來(lái)說(shuō)并不友好,為了讓用戶跳轉(zhuǎn) H5 和跳轉(zhuǎn)到原生一樣的用戶體驗(yàn),就需要把 H5 相關(guān)的離線資源...

    hedge_hog 評(píng)論0 收藏0
  • Hybird-離線資源生成工具

    摘要:為了滿足以上需求,就需要制作打包腳本和工具,來(lái)滿足正常的運(yùn)維。離線資源生成工具離線資源的生成,我們提供了一個(gè)工具可以打包出增量和全量升級(jí)包。比如和需要統(tǒng)一成。 目錄 背景 離線資源生成工具 前端協(xié)助 背景 由于線上樂(lè)刻客戶端 App 第一次打開(kāi)平臺(tái) H5 需要幾秒的加載時(shí)間,這個(gè)體驗(yàn)對(duì)用戶來(lái)說(shuō)并不友好,為了讓用戶跳轉(zhuǎn) H5 和跳轉(zhuǎn)到原生一樣的用戶體驗(yàn),就需要把 H5 相關(guān)的離線資源...

    J4ck_Chan 評(píng)論0 收藏0
  • Web離線技術(shù)(一)—— 技術(shù)選型

    摘要:上面提到在安卓完全不需要像這樣大費(fèi)周章的繞彎路,所以安卓可能就不需要這個(gè)自定義的,這樣又會(huì)導(dǎo)致面臨著與安卓差異化嚴(yán)重問(wèn)題。前言 最早接觸離線包的概念要追溯到16年初,項(xiàng)目迎來(lái)大改版,其中重點(diǎn)項(xiàng)目之一就是離線包方案的制定與實(shí)施。離線包顧名思義就是將H5/CSS/JS和資源文件打包提前下發(fā)到App中,這樣App在加載網(wǎng)頁(yè)的時(shí)候?qū)嶋H上加載的是本地的文件,減少網(wǎng)絡(luò)請(qǐng)求來(lái)提高網(wǎng)頁(yè)的渲染速度,并實(shí)現(xiàn)動(dòng)態(tài)...

    null1145 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<