整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          PostCSS-css必備

          PostCSS-css必備

          ostcss越來越重要了,經(jīng)常可以看到它的身影,比如面試,論壇。本篇文章是小編參考多方資料以及官網(wǎng)總結(jié)出來的,不喜勿噴,喜歡多多支持,謝謝!

          另外 React Redux ES6 Webpack...... 更多干貨在個人主頁中查看

          什么是postcss

          postcss 一種對css編譯的工具,類似babel對js的處理,常見的功能如:

          1 . 使用下一代css語法

          2 . 自動補全瀏覽器前綴

          3 . 自動把px代為轉(zhuǎn)換成rem(rem不熟悉的,點這)

          4 . css 代碼壓縮等等

          postcss 只是一個工具,本身不會對css一頓操作,它通過插件實現(xiàn)功能,autoprefixer 就是其一。

          與 less sass 的區(qū)別

          less sass 是預(yù)處理器,用來支持?jǐn)U充css語法。

          postcss 既不是 預(yù)處理器也不是 后處理器,其功能比較廣泛,而且重要的一點是,postcss可以和less/sass結(jié)合使用

          關(guān)于取舍

          雖然可以結(jié)合less/sass使用,但是它們還是有很多重復(fù)功能,用其中一個基本就 ok 了。

          以下是個人的總結(jié):

          • postcss 鼓勵開發(fā)者使用規(guī)范的CSS原生語法編寫源代碼,支持未來的css語法,就像babel支持ES6。

          • less、sass 擴展了原生的東西,它把css作為一個子集,但這不好保持向后兼容。

          總體來說區(qū)別不大,看個人喜好吧

          如何使用

          這里只說在webpack里集成使用,首先需要 loader

          1 . 安裝

          npm install postcss-loader –save-dev

          2 . webpack配置

          一般與其他loader配合使用,下面*標(biāo)部分才是postcss用到的

          配合時注意loader的順序(從下面開始加載)

          3 . postcss配置

          項目根目錄新建 postcss.config.js文件,里面配置一些插件

          注:也可以在webpack中配置

          常用的postcss插件

          1 . Autoprefixer

          前綴補全,全自動的,無需多說

          安裝:

          cnpm install Autoprefixer --save-dev

          2 . postcss-cssnext

          使用下個版本的css語法【關(guān)于語法另一篇文章會單獨講】

          安裝:

          cnpm install postcss-cssnext --save-dev

          3 . postcss-pxtorem

          把px轉(zhuǎn)換成rem

          安裝:

          cnpm install postcss-pxtorem --save-dev

          配置項:

          特殊技巧:不轉(zhuǎn)換成rem

          px檢測區(qū)分大小寫,也就是說Px/PX/pX不會被轉(zhuǎn)換,可以用這個方式避免轉(zhuǎn)換成rem

          下篇:cssnext,下一代css

          【關(guān)注一下不迷路】

          html css html css javascript html javascript css javascript css

          比于早些年前后端代碼緊密耦合、后端工程師還得寫前端代碼的時代,如今已發(fā)展到前后端分離,這種開發(fā)方式大大提升了前后端項目的可維護(hù)性與開發(fā)效率,讓前后端工程師關(guān)注于自己的主業(yè)。然而在帶來便利的同時,也帶來了一些弊端,比如首屏渲染時間(FCP)因為首屏需要請求更多內(nèi)容,比原來多了更多HTTP的往返時間(RTT),這造成了白屏,如果白屏?xí)r間過長,用戶體驗會大打折扣,如果用戶網(wǎng)速差,則FCP會更長。

          1. FCP優(yōu)化

          在 Google 提出的以用戶為中心的四個頁面性能衡量指標(biāo)中,F(xiàn)P/FCP可能是開發(fā)者們最熟悉的了

          為了優(yōu)化首屏渲染時間這個指標(biāo),減少白屏?xí)r間,前端仔們想了很多辦法:

          • 加速或減少HTTP請求損耗:使用CDN加載公用庫,使用強緩存和協(xié)商緩存,使用域名收斂,小圖片使用Base64代替,使用Get請求代替Post請求,設(shè)置 Access-Control-Max-Age 減少預(yù)檢請求,頁面內(nèi)跳轉(zhuǎn)其他域名或請求其他域名的資源時使用瀏覽器prefetch預(yù)解析等;
          • 延遲加載:非重要的庫、非首屏圖片延遲加載,SPA的組件懶加載等;
          • 減少請求內(nèi)容的體積:開啟服務(wù)器Gzip壓縮,JS、CSS文件壓縮合并,減少cookies大小,SSR直接輸出渲染后的HTML等;
          • 瀏覽器渲染原理:優(yōu)化關(guān)鍵渲染路徑,盡可能減少阻塞渲染的JS、CSS;
          • 優(yōu)化用戶等待體驗:白屏使用加載進(jìn)度條、菊花圖、骨架屏代替等;

          這里要介紹的就是優(yōu)化用戶等待體驗的骨架屏,它可以被視為是原來加載菊花圖的一種升級版,結(jié)合傳統(tǒng)的首屏優(yōu)化方法對應(yīng)用進(jìn)行優(yōu)化可以達(dá)到不錯的效果。

          2. 骨架屏

          骨架屏可以理解為是當(dāng)數(shù)據(jù)還未加載進(jìn)來前,頁面的一個空白版本,一個簡單的關(guān)鍵渲染路徑??梢钥匆幌孪旅鍲acebook的骨架屏實現(xiàn),可以看到在頁面完全渲染完成之前,用戶會看到一個樣式簡單,描繪了當(dāng)前頁面的大致框架的骨架屏頁面,然后骨架屏中各個占位部分被實際資源完全替換,這個過程中用戶會覺得內(nèi)容正在逐漸加載即將呈現(xiàn),降低了用戶的焦躁情緒,使得加載過程主觀上變得流暢。

          可以看一下下面的示例圖,第一個為骨架屏,第二個為菊花圖,第三個為無優(yōu)化,可以看到相比于傳統(tǒng)的菊花圖會在感官上覺得內(nèi)容出現(xiàn)的流暢而不突兀,體驗更加優(yōu)良。

          如今這項技術(shù)已經(jīng)在Facebook、Google、支付寶、餓了么、簡書、新浪微博、知乎、美團(tuán)、領(lǐng)英等公司的產(chǎn)品中被廣泛的使用。在論壇和社區(qū)也都有不少文章討論骨架屏的實現(xiàn)和使用場景等。

          3. 生成骨架屏的方法

          生成骨架屏的方式主要有:

          1. 手寫HTML、CSS的方式為目標(biāo)頁定制骨架屏 做法可以參考<Vue頁面骨架屏注入實踐>,主要思路就是使用 vue-server-renderer 這個本來用于服務(wù)端渲染的插件,用來把我們寫的.vue文件處理為HTML,插入到頁面模板的掛載點中,完成骨架屏的注入。這種方式不甚文明,如果頁面樣式改變了,還得改一遍骨架屏,增加了維護(hù)成本。 骨架屏的樣式實現(xiàn)參考 CodePen
          2. 使用圖片作為骨架屏; 簡單暴力,讓UI同學(xué)花點功夫吧哈哈;小米商城的移動端頁面采用的就是這個方法,它是使用了一個Base64的圖片來作為骨架屏。
          3. 自動生成并自動插入靜態(tài)骨架屏 這種方法跟第一種方法類似,不過是自動生成骨架屏,可以關(guān)注下餓了么開源的插件 page-skeleton-webpack-plugin ,它根據(jù)項目中不同的路由頁面生成相應(yīng)的骨架屏頁面,并將骨架屏頁面通過 webpack 打包到對應(yīng)的靜態(tài)路由頁面中,不過要注意的是這個插件目前只支持history方式的路由,不支持hash方式,且目前只支持首頁的骨架屏,并沒有組件級的局部骨架屏實現(xiàn),作者說以后會有計劃實現(xiàn)(issue9)。

          另外還有個插件 vue-skeleton-webpack-plugin,它將插入骨架屏的方式由手動改為自動,原理在構(gòu)建時使用 Vue 預(yù)渲染功能,將骨架屏組件的渲染結(jié)果 HTML 片段插入 HTML 頁面模版的掛載點中,將樣式內(nèi)聯(lián)到 head 標(biāo)簽中。這個插件可以給單頁面的不同路由設(shè)置不同的骨架屏,也可以給多頁面設(shè)置,同時為了開發(fā)時調(diào)試方便,會將骨架屏作為路由寫入router中,可謂是相當(dāng)體貼了。

          vue-skeleton-webpack-plugin的具體使用參考 vue-style-codebase,主要關(guān)注build目錄的幾個文件,線上Demo 在Chrome的DevTools中把network的網(wǎng)速調(diào)為Gast 3G / Slow 3G就能看到效果了~


          鏈接文章:

          https://juejin.im/post/5b79a2786fb9a01a18267362

          聊聊圖片預(yù)加載:提升用戶體驗與性能的秘密武器

          **引言:**

          在Web前端開發(fā)中,圖片資源的加載速度直接影響著用戶體驗和頁面性能。尤其是在涉及到大量圖片展示的網(wǎng)站或應(yīng)用中,圖片預(yù)加載作為一種優(yōu)化手段顯得尤為重要。本文將詳細(xì)介紹圖片預(yù)加載的原理、應(yīng)用場景、實現(xiàn)方法以及相關(guān)注意事項,并通過具體的HTML+JS代碼實例,讓你深入了解如何運用預(yù)加載技術(shù)改善用戶的瀏覽體驗。

          ---

          ### **一、什么是圖片預(yù)加載?**

          **標(biāo)題:未雨綢繆,提前加載的背后邏輯**

          圖片預(yù)加載是指在用戶實際查看圖片之前,預(yù)先將圖片資源加載到瀏覽器緩存中。這樣當(dāng)用戶瀏覽到對應(yīng)位置時,圖片已經(jīng)處于可用狀態(tài),從而避免了圖片加載導(dǎo)致的頁面空白或延遲現(xiàn)象,顯著提升了頁面的流暢性和整體性能。

          ---

          ### **二、圖片預(yù)加載的重要性**

          **標(biāo)題:瞬間加載,用戶體驗的飛躍**

          1. **更快的視覺呈現(xiàn)**:預(yù)加載能夠確保圖片在用戶視線到達(dá)前就已經(jīng)準(zhǔn)備好,減少用戶等待圖片加載的時間,提供即視即所得的瀏覽體驗。

          2. **優(yōu)化頁面滾動流暢性**:對于長頁面和圖片瀑布流等場景,預(yù)加載能夠消除滾屏?xí)r的圖片加載滯后問題,確保頁面滾動過程平滑無阻。

          3. **降低用戶跳出率**:快速加載的內(nèi)容能夠增加用戶留存,減少因等待時間過長而導(dǎo)致的用戶流失。

          ---

          ### **三、圖片預(yù)加載的實現(xiàn)方法**

          **標(biāo)題:實戰(zhàn)演練,手把手教你實現(xiàn)預(yù)加載**

          1. **HTML `<link rel="prefetch">` 方式**

          ```html

          <link rel="prefetch" href="image.jpg">

          ```

          `rel="prefetch"` 屬性告訴瀏覽器在閑置時預(yù)先下載指定資源,適用于瀏覽器支持的情況下對將來可能訪問的資源進(jìn)行預(yù)加載。

          2. **JavaScript 實現(xiàn)預(yù)加載**

          ```javascript

          // 基礎(chǔ)圖片預(yù)加載函數(shù)

          function preloadImages(urls) {

          urls.forEach(function(url) {

          var img=new Image();

          img.src=url;

          });

          }

          // 使用預(yù)加載函數(shù)

          var imageUrls=['image1.jpg', 'image2.jpg'];

          preloadImages(imageUrls);

          ```

          上述JavaScript代碼中,我們通過創(chuàng)建新的`Image`對象并設(shè)置其`src`屬性為待加載圖片URL的方式實現(xiàn)預(yù)加載。當(dāng)瀏覽器解析到這一行代碼時,就會立即發(fā)送請求加載圖片資源。

          3. **更進(jìn)階的預(yù)加載庫(如lozad.js)**

          ```html

          <!-- 引入lozad.js庫 -->

          <script src="https://cdn.jsdelivr.net/npm/lozad/dist/lozad.min.js"></script>

          <!-- 使用lozad.js進(jìn)行懶加載 -->

          <img

          data-src="image.jpg"

          class="lozad"

          alt="Example Image"

          />

          ```

          Lozad.js是一個輕量級的懶加載庫,它能夠在圖片進(jìn)入可視區(qū)時才進(jìn)行加載,既實現(xiàn)了預(yù)加載的目的,又節(jié)省了帶寬和CPU資源。

          ---

          ### **四、圖片預(yù)加載的注意事項**

          **標(biāo)題:謹(jǐn)慎而行,預(yù)加載的合理應(yīng)用**

          1. **合理安排預(yù)加載數(shù)量**:過多的預(yù)加載可能導(dǎo)致帶寬占用過高,影響其他關(guān)鍵資源加載速度。

          2. **判斷用戶網(wǎng)絡(luò)狀況**:在低速網(wǎng)絡(luò)環(huán)境下,避免無腦預(yù)加載,可采用動態(tài)加載策略。

          3. **隱私保護(hù)與資源優(yōu)化**:尊重用戶隱私,避免預(yù)加載無關(guān)緊要的資源,同時對圖片進(jìn)行壓縮和尺寸裁剪,減輕預(yù)加載負(fù)擔(dān)。

          ---

          **結(jié)語:**

          圖片預(yù)加載作為Web前端優(yōu)化的一項關(guān)鍵技術(shù),巧妙運用可以顯著提升用戶體驗,降低用戶流失率。在實踐中,我們要根據(jù)具體項目需求和用戶場景,靈活選擇合適的預(yù)加載策略,做到既能加速頁面渲染,又能兼顧性能與資源優(yōu)化,達(dá)到提升網(wǎng)站整體表現(xiàn)的終極目標(biāo)。而不斷精進(jìn)和深化前端優(yōu)化技術(shù),正是每一位前端開發(fā)者追求卓越的必由之路。


          主站蜘蛛池模板: 无码乱人伦一区二区亚洲一| 国产精品亚洲一区二区无码 | 天堂一区二区三区精品| 亚洲一区二区女搞男| 亚洲熟妇av一区二区三区漫画| 能在线观看的一区二区三区| 香蕉久久AⅤ一区二区三区| 蜜桃视频一区二区| 99精品国产高清一区二区三区| 国产在线观看一区精品| 亚洲美女视频一区| 亚洲一区欧洲一区| 一本久久精品一区二区| 精品国产日韩亚洲一区在线| 国产麻豆媒一区一区二区三区| 一区二区三区中文| 国产一在线精品一区在线观看| 99久久综合狠狠综合久久一区| 国产电影一区二区| 无码精品前田一区二区| 熟女少妇丰满一区二区| 亚洲综合无码一区二区痴汉| 日本精品视频一区二区| 久久se精品一区二区| 亚洲国产欧美日韩精品一区二区三区| 精品久久综合一区二区| 午夜福利一区二区三区高清视频| 无码人妻精品一区二区三区99性 | 国产一区二区精品久久凹凸| 亚洲国产av一区二区三区丶| 国产精品成人免费一区二区| 国产亚洲日韩一区二区三区| 国产一区二区三区影院| 久夜色精品国产一区二区三区| 午夜性色一区二区三区免费不卡视频| 四虎精品亚洲一区二区三区 | 久久亚洲AV午夜福利精品一区| 色欲AV蜜桃一区二区三| 日韩亚洲AV无码一区二区不卡| 精品中文字幕一区二区三区四区| 亚洲男女一区二区三区|