vue+webpack在“雙十一”導購產品的技術實踐

jopen 9年前發布 | 116K 次閱讀 webpack 前端技術

 

雙十一中,無線前端的產品可以說非常的豐富。在雙十一中,互動始終是重頭的一部分,但是與以往不一樣的地方是,導購產品在本次雙十一中有著不俗的 表現。而今年的雙11導購業務占據了5大模塊里的后三個,除了必搶,其它業務均是由手淘的同學來完成的,筆者作為導購產品的一員,選擇導購產品來給大家解 讀其中的技術實踐。

本次雙十一的導購產品都有哪些?

vue+webpack在“雙十一”導購產品的技術實踐

看到這些截圖,相信很多人都很熟悉,不管是雙十一晚會搖一搖搖出的“清單”,還是大家搶完紅包迫不及待點開的“我的雙十一”,又或者是點開“我的雙十一”標簽進入的人群會場尋找與自身匹配的商品,這些都是本次雙十一的導購產品。

這么多的導購產品,本次雙十一導購產品的技術體系又是什么樣的,在雙十一中,無線導購產品使用了什么技術?這一定是大伙關心的問題,下面將展開介紹雙十一無線導購產品的技術實踐。

技術選型的思考

對于雙十一的場景,我們希望能夠選擇一個足夠適應大型應用的的技術方案,能夠支撐起雙十一這樣的大場景,整體思考上有:

  • 適合大型應用的MVVM的框架,去掉復雜的DOM操作,讓代碼變得易于review和維護
  • 模塊化產品,方便隨時增減一個模塊
  • 方便與團隊現有的庫,工具進行整合

基本技術方案——vue+webpack

  • vue.js ——輕量級的MVVM框架
  • webpack ——前端模塊化解決方案

有同學會問,前端社區可選用的工具和框架這么多,為什么挑選了vue+webpack在雙十一的項目中進行實踐,那么我們來盤點下選用上的思考:

  • vuejs——輕量、學習成本低、雙向綁定、無dom的操作、組件的形式編寫

    vuejs是個輕量級的mvvm框架, 集合了angular的基本功能,卻又比angular更為精簡,功能上涵蓋了雙向綁定、指令、邏輯控制、過濾器、事件監聽、函數等。框架的特點使得項目 在狀態變更、分頁的場景下可以擁有很大的便利——所有的操作只需要變更數組,沒有任何的dom操作。

  • webpack——CommonJS的引用和編寫方式、loader非常的豐富,包括vue-loader、css-loader、less-loader

    webpack是前端組件化的解決方案,webpack提供了核心的CommonJS引用方案去引用資源,如下:

//app.js
module.exports = {
  title: 'xxxx'
}
//entry.js
var app = require('./app.js');
console.log(app.title);

但是,webpack與以往的CommonJS引用思路不太一樣,webpack允許任何的靜態資源作為模塊進行引用,包括css、less、 html...等等,那么我們需要做的僅僅是加載必要的loader(加載器),如css-loader、less-loader、style- loader等等,那么webpack與vue結合起來,我們可以通過vue-loader,這樣我們編寫的方式就變成如下:
<style>
  /*樣式編寫*/
  #compot{
    width: 100px;
  }
</style>
<template>
  <!--模板-->
  <div id="compt"></div>
</template>
<script>
  //模塊編寫
  module.exports = {
  }
</script>

最后保存為*.vue文件,入口文件的初始化只需要:
var opts = require('*.vue');//引用*.vue文件
var main = new Vue(opts);//實例化
main.$mount('#app');//渲染

這么一來,使用vue+webpack,我們實現了:

vue+webpack在“雙十一”導購產品的技術實踐

更多的實踐demo筆者在這里就不展開了,有興趣的小伙伴可以閱讀下無線前端@勾股 的一篇博文—— just-vue

工具鏈路在實際開發上的整合

當然,僅僅使用vue+webpack,已經可以以一種高效的方式進行開發了,但是為了和無線團隊的“私貨”結合起來,我們的開發鏈路還更完善些,不過是不是有“私貨”就不能使用了,不是的,事實上,“私貨”相對獨立,開發時也可以完全剝離出來,開發過程可以自行選擇。

本次導購產品中,使用vue+webpack的過程中,將其結合到了gulp中,同時引用gulp-htmlone、autoprefixer-core,主要解決以下幾個問題:

  • 1、讀取webpack配置,運行webpack的loader
  • 2、自動補全css3的前綴
  • 3、打包、下載、壓縮js代碼,最后將所有文件打包成一個*.html文件

圖片處理?

上述的介紹中,似乎涵蓋了html、css、js,但是始終沒有提到圖片上面的處理,作為前端頁面重要的一環,圖片怎么可能在無線前端中被忽略,筆者下面展開介紹圖片處理上,我們團隊的做法

首先,先說說痛點,下圖是不是大多數情況下圖片的工作流程

vue+webpack在“雙十一”導購產品的技術實踐

那么,在面對雙十一那么大的頁面量時,如果以這樣的方式去工作,那一定會崩潰的...因此在雙十一前,團隊已經整理出了一套完整的圖片工作方案,因此在雙十一才能以一個全新的面貌展現給大家,下面筆者給大家進行介紹:

  • 1、切圖、測量(開發階段)

    切圖和測量的過程,選用的工具依舊是ps或者sketch,借助ps cc2014版的切圖插件Cutterman和標注工具Parker進行工作;而sketch就不需要提了,本身自帶的強大標注和導出功能已經讓工作非常便利了

    vue+webpack在“雙十一”導購產品的技術實踐

  • 2、上傳和替換地址(打包階段)

    以往的圖片上傳和替換地址的工作都為人工所為,如今無線提供一套圖片工具解決方案,通過監聽圖片目錄里圖片文件的更換來執行上傳命令,同時還支持將小圖片轉成base64,最后在替換地址上,根據不同的屏幕分辨率選擇不同的圖片尺寸,總結下來這套工具做了下面幾件事:

    • 監聽圖片文件,執行上傳圖片
    • 小圖轉換base64
    • 替換掉代碼中的相對路徑,包括img[src]、background、element.style.background
    • css代碼中添加根據屏幕分辨率選擇圖片的邏輯

    vue+webpack在“雙十一”導購產品的技術實踐

  • 3、圖片自動優化(代碼運行階段)

    在這一層面做的圖片優化,是在代碼執行過程,也就是頁面渲染過程。這個過程基于無線前端的組件lib.img,可以實現根據尺寸、弱網判斷、屏幕分辨率進行圖片的處理,同時提供懶加載的功能,歸納起來有:

    • 根據尺寸選擇圖片
    • 弱網判斷進行選擇
    • 設備分辨率進行選擇
    • 根據圖片質量要求進行選擇

    vue+webpack在“雙十一”導購產品的技術實踐

  • 匯總起來

vue+webpack在“雙十一”導購產品的技術實踐

前期腳手架搭好后,最后我們的圖片工作流程可能就只需要做下面幾個工作,也就是上述"開發階段"需要做的事情:

  • 1、切圖、測量,將圖片放入項目的images文件夾
  • 2、代碼中使用相對路徑

OMG!就這么簡單?是的!就是這么簡單!

“雙十一”做的更多的事

不得不說,面對雙十一這么大量級的一個場景,無線前端對產品質量層面做了很大的把關,當然少不了的是前端界經久不衰的話題——性能優化,那么題主給大家盤點下導購小組做的性能優化上的事。

性能優化,性能優化主要集中在兩個層面上的優化

  • 1、網絡加載,可以從資源和圖片上展開,主要有

    • 資源打包壓縮成一個html文件
    • html文件作為離線包加載到手淘包中,因此整個html文件是不存在網絡請求loading的
    • 圖片使用工具進行尺寸控制,在css代碼中添加不同屏幕下采用不同尺寸的圖片的邏輯
    • 圖片組件lib.img對圖片進行精細化控制,根據網絡環境、高清屏幕、屏幕尺寸選擇不同的圖片,將大圖控制在30kb左右
    • 小圖采用base64加載
    • 首屏渲染接口控制為一個
  • 2、內存優化,主要在代碼執行和圖片大小兩個方面考慮

    • 圖片大小控制在30kb左右,避免長列表加載過多圖片時產生內存過高的問題
    • 采用高性能統計方案,性能更優
    • css、js代碼書寫盡量避免性能高耗寫法

前端打底數據

  • 由于雙十一場景特殊,盡管咱們的后端和算法同學做了大量的優化、數據打底,但是作為頁面的負責,還是需要考慮到接口無法訪問的情況,那么雙十一期間根據接口對數據進行了打底,具體邏輯如下圖:

    vue+webpack在“雙十一”導購產品的技術實踐

    不得不提的是,ods是無線基于靜態服務器的系統,本身不帶業務邏輯,僅僅提供了三個功能:1、定時獲取接口數據;2、將數據靜態存儲起來;3、提供jsonp的方式供前端調用

最后總結

以上便是無線前端導購小組在本次雙十一的工作流程,當初考慮使用vue+webpack,大家也在想新的技術是不是能夠經得住考驗,事實證明,經 歷了雙十一這一個大的熔爐下鍛造,這樣的技術實踐已經完全成熟了。最后,以一張大圖結束,總結一下無線導購組vue+webpack在開發鏈路上的實踐

vue+webpack在“雙十一”導購產品的技術實踐

回頭看看我們的技術目標,我們實現了:

  • vuejs——mvvm構建應用,完全無dom操作,狀態管理變得方便
  • webpack——模塊化編寫,單文件組件編寫
  • 圖片工具——與現有的工具和組件進行整合,完美打通圖片工作鏈路
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!