九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
我對前端工程化的幾點思考


野狗君說 | 前端工程師怎么了??





編程技術(shù)及生態(tài)發(fā)展的三個階段

------------------------------

  • 最初的時候人們忙著補全各種API,代表著他們擁有的東西還很匱乏,需要在語言跟基礎(chǔ)設(shè)施上繼續(xù)完善

  • 然后就開始各種模式,標(biāo)志他們做的東西逐漸變大變復(fù)雜,需要更好的組織了

  • 然后就是各類分層MVC,MVP,MVVM之類,可視化開發(fā),自動化測試,團(tuán)隊協(xié)同系統(tǒng)等等,說明重視生產(chǎn)效率了,也就是所謂工程化


前端工程是軟件工程的一個子類別

------------------------------

軟件工程是一門研究用工程化方法構(gòu)建和維護(hù)有效的、實用的和高質(zhì)量的軟件的學(xué)科。


前端是一種GUI軟件

------------------------------

從本質(zhì)上講,所有Web應(yīng)用都是一種運行在網(wǎng)頁瀏覽器中的軟件,這些軟件的圖形用戶界面(Graphical User Interface,簡稱GUI)即為前端。


前端又不同于傳統(tǒng)的客戶端軟件/后端,因為前端應(yīng)用具備“免安裝”、“增量安裝”等特性。也“得益”于這些特性,前端應(yīng)用會遭遇客戶端應(yīng)用不可能碰到的資源管理問題,這也是前端最容易引起工程問題的點。


一個符合工程化要求的軟件系統(tǒng)(前端)需要包含的要素

------------------------------

開發(fā)規(guī)范

模塊化開發(fā)

組件化開發(fā)

組件倉庫

性能優(yōu)化

項目部署

開發(fā)流程

開發(fā)工具


1-3是技術(shù)業(yè)務(wù)相關(guān)的開發(fā)需求,4是技術(shù)沉淀及共享需求,5-8是工程優(yōu)化需求


大部分時候我們談的“工程化”其實只是“工具化”。


每一個單獨的點或許都比較容易實現(xiàn),但是把這8條串聯(lián)起來則是一個很大的挑戰(zhàn),而且這8個點相互之間又互有聯(lián)系


  • 模塊化開發(fā)涉及到性能優(yōu)化,對構(gòu)建工具有一定的配套實現(xiàn)要求,同時也會影響開發(fā)規(guī)范的制定

  • 組件化開發(fā)應(yīng)該基于模塊化框架來加載其他依賴的組件,如果組件化框架自帶模塊管理功能,那么就可能導(dǎo)致工程的性能優(yōu)化實現(xiàn)困難(我們可以直接使用ES6的module語法及l(fā)oader)

  • 組件庫應(yīng)該與組件化開發(fā)配套,組件倉庫中的組件應(yīng)該按照相同的標(biāo)準(zhǔn)實現(xiàn)

  • 開發(fā)規(guī)范工具必須容易實現(xiàn),如果部署上有特殊要求,工具是否能很容易的做出調(diào)整而不是修改規(guī)范。

  • 工具是否能提供接入公司已有流程的接口,是否能與公司的ci工具相互融合


為什么都說前端目前正遭遇前所未有的工程問題

------------------------------

  1. 前端在第1、2階段耗費了十多年的時間,然后近幾年才井噴式的爆發(fā)

  2. 由于整個生態(tài)的發(fā)展緩慢、門欄低、構(gòu)建應(yīng)用成本低,前端開發(fā)長時間停留在刀耕火種、茹毛飲血的階段

  3. 以前大部分前端工作都是切頁面加特效,還不能算得上一個真正意義上的webapp,自然很少有公司能遭遇到工程化問題

  4. 前端不同于 客戶端/后端 的特性(比如增量安裝),導(dǎo)致遭遇的工程會很特殊,很難直接從別的領(lǐng)域套用已有的解決方案

  5. 我們自己完全意識不到那是問題??


工程化到底要解決哪些問題

------------------------------

  1. 合理的開發(fā)流程及開發(fā)規(guī)范,包括代碼規(guī)范、模塊化組件化規(guī)范(分治)等(提高生產(chǎn)力)

  2. 一套自動化代碼質(zhì)量檢測方案(提高系統(tǒng)可靠性)

  3. 一套自動化及高度適應(yīng)性的項目 發(fā)布/部署 方案(提高系統(tǒng)的伸縮性及靈活性)

  4. 極致的性能優(yōu)化,包括減少冗余的接口請求及資源請求、提高緩存命中率等,簡言之就是站點的打開及運行速度(更好的用戶體驗)


舉三個案例:

  1. 最基本的資源合并,我們應(yīng)該采取哪種策略?全部打包成一個還是分開打包?如何最高效的利用緩存?如何在降低請求數(shù)的同時提高緩存利用率?移動終端又應(yīng)該采取哪種策略?

  2. 發(fā)布的時候我們到底是應(yīng)該先部署頁面還是靜態(tài)資源?如何實現(xiàn)平滑升級?如果我還想玩?zhèn)€灰度發(fā)布呢?

  3. 如果采用模塊化按需加載的方式開發(fā),每次發(fā)布資源文件都會有不同的md5值,如何在不影響開發(fā)體驗的前提下確保能引用到正確的模塊?


相關(guān)工具?

------------------------------

  1. 構(gòu)建工具 gulp:task-based的方式使得gulp無法(難以)處理資源嵌套的遞歸場景。如 a.js -> b.scss -> md5(d.img) -> md5(b.scss) -> md5(a.js)

  2. 基于 資源表+資源管理框架 策略的fis:其實已經(jīng)能處理大部分場景了,但是侵入式代碼實在是無法接受。因為它是一個框架。

  3. 靜態(tài)分析工具 webpack:webpack依賴其可配置的loader使其擁有強大的打包能力,但是依然無法實現(xiàn)動態(tài)按需加載的需求。類似:

if(browser){

    require('browser.js');

} else {

    require('node.js');

}


出路

------------------------------

ES6 Module + ES6 Module Loader + HTTP/2.0 + Others


ES6 Module提供了一個原生的模塊化語法,ES6 Module Loader則能提供一個原生的模塊加載器。對于前端工程而言,資源管理是最核心的問題,而資源管理中加載又是重點更是難點。


可是ES6 Module Loader從ES6草案中移除了現(xiàn)在由WHATWG組織還在維護(hù)制定標(biāo)準(zhǔn),pending狀態(tài)。。


現(xiàn)在有一個基于這個草案實現(xiàn)的api polyfill Module Loader??墒悄悴皇且?guī)范我這種教條主義者是不會用的??


HTTP/2.0是HTTP/1.1的升級版(非革命版,前身是Google的SPDY協(xié)議),2015年5月以RFC 7540正式發(fā)表,新增了幾個關(guān)鍵特性:

  • 多路復(fù)用

  • HEAD壓縮

  • 服務(wù)端推送


其中多路復(fù)用是對前端感知最明顯的特性,基于此特性,HTTP/2.0時代需要淘汰的優(yōu)化方式:

  • 域名散列(突破單一域名請求連接數(shù)限制)

  • 資源合并(多路復(fù)用帶來了跟資源合并同樣的效果,相反資源會造成的緩存利用率降低)

  • 資源內(nèi)聯(lián)(server push)


ps:目前的各種bundle方案(如browserify&webpack)可能會在http2.0時代被淘汰(替代),有測試表明在http2.0環(huán)境下多文件請求會比單請求大文件更快。移動終端的意義更大,你無法想象移動端創(chuàng)建一個連接開銷有多大。。多路復(fù)用才是未來!


總結(jié)

------------------------------

前端工程化相關(guān)問題是隨之前端的發(fā)展越來越受到重視的問題,一套好的工程化解決方案能在提高開發(fā)效率(包括代碼編寫的舒適度及多人協(xié)作)的同時確保整個系統(tǒng)的伸縮性(各種不同的部署環(huán)境)及健壯性(安全),同時在性能上又能有一個很優(yōu)異的表現(xiàn)(主要上各種緩存策略加載策略等),而且這套方案又應(yīng)該是對工程師無感知(或感知很小)趨于自動化的一套方案??傊_(dá)到這個目的前端工程化還有很長一段路要走。






這里,了解野狗!

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
人們常說的前端工程化到底是什么?
基于webpack的前端工程化開發(fā)解決方案探索(二):代碼分割與圖片加載
探索前端工程化之路:打造高效開發(fā)流程
一套比較完整的前端技術(shù)選型Tools整合
致我們終將組件化的Web
網(wǎng)易云的智能前端架構(gòu)
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服