整合營銷服務(wù)商

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

          免費(fèi)咨詢熱線:

          前端-重構(gòu)方案了解一下

          前端-重構(gòu)方案了解一下

          源:吃葡萄不吐番茄皮

          segmentfault.com/a/1190000014753304

          前言

          前端技術(shù)發(fā)展很快,很多項(xiàng)目面臨前端部分重構(gòu),很開心可以讓我進(jìn)行這次項(xiàng)目前端的重構(gòu)方案編寫,在思考的同時(shí)參考了網(wǎng)上很多資料,希望本篇重構(gòu)方案有一定的完整性,可以帶給大家一些在面臨重構(gòu)時(shí)有用的東西,同時(shí)希望路過的大牛小牛不領(lǐng)賜教,能給我略微指點(diǎn)下重構(gòu)相關(guān)的點(diǎn),在下感激不盡~

          一、原項(xiàng)目梳理

          首先對原來項(xiàng)目做一個大概的梳理,既然是重構(gòu),當(dāng)然很多東西是可以繼續(xù)拿來使用的。

          1.1頁面結(jié)構(gòu)

          我這邊負(fù)責(zé)的PC端的重構(gòu),所以先把頁面結(jié)構(gòu)及之間的關(guān)系梳理了一遍,并用xmind畫好結(jié)構(gòu)圖,重點(diǎn)功能做上標(biāo)記,因?yàn)関ue是漸進(jìn)式框架,所以我會優(yōu)先重構(gòu)重要的部分

          xmind結(jié)構(gòu)圖我就不上了,職業(yè)操守還是要的

          1.2項(xiàng)目結(jié)構(gòu)

          項(xiàng)目結(jié)構(gòu)是針對代碼組織結(jié)構(gòu)的,梳理了項(xiàng)目各重要的文件夾及文件并注明對應(yīng)的內(nèi)容或者作用。同樣的,使用xmind畫出結(jié)構(gòu)圖,xmind圖略。

          1.3前端框架、模板

          使用公司內(nèi)部人員自創(chuàng)框架C.F.F,自定義build文件,內(nèi)嵌Smarty模板獲取后臺數(shù)據(jù),利用{$xxx}獲取后臺數(shù)據(jù),但是定義了很多全局變量存儲模板數(shù)據(jù),造成占用更多內(nèi)存、污染命名空間等問題。

          定義公共組件供各模塊或特定場景調(diào)用,復(fù)用度高

          1.4第三方庫、組件、插件

          • jquery: JavaScript庫
          • html5shiv:用于解決IE9以下版本瀏 覽器對HTML5新增標(biāo)簽不識別,并導(dǎo)致CSS不起作用的問題。
          • Dialog : jquery彈窗插件
          • jCarousel : jquery 輪播插件 (重構(gòu)版舍棄,原因不復(fù)雜的場景能原生實(shí)現(xiàn)盡量原生實(shí)現(xiàn))
          • respond:為 IE6-8 以及其它不支持 CSS3 Media Queries 的瀏覽器提供媒體查詢的 min-width 和 max-width 特性,實(shí)現(xiàn)響應(yīng)式網(wǎng)頁設(shè)計(jì)
          • sideToolbar:導(dǎo)航工具
          • echarts: 圖形工具
          • ...

          二、重構(gòu)方案

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

          • 命名規(guī)范
          • html/css/less/sass/scss/javascript編碼規(guī)范
          • 代碼檢查工具 eslint

          規(guī)范這個東西沒有絕對的對錯,只有同公司或者同部門來制定規(guī)范大家都保持一致,同事之間能很快讀懂相互的代碼,提高開發(fā)效率

          2.2技術(shù)選型

          2.2.1 開發(fā)模式:前后端分離

          前后端分離開發(fā)早已成為趨勢,到現(xiàn)在新項(xiàng)目大多采用這種模式進(jìn)行開發(fā),項(xiàng)目完全重構(gòu)的話當(dāng)然首選此模式

          好處:以前沒有前端這一職位之說,都是后端兼顧開發(fā),數(shù)據(jù)庫、底層服務(wù)、接口,頁面一把梭,壓力大,而且精力有限不能在每個領(lǐng)域都做的出色。后來有切圖這一職,可以把頁面寫的更精美一些,通過模板和請求接口配合進(jìn)行數(shù)據(jù)交互,前端都是緊緊耦合于后端,這種情況下開發(fā),溝通成本,開發(fā)過程中進(jìn)度依賴成本都是較高的。前后端分離后,分工更明確,各自專注做好自己領(lǐng)域的事,同時(shí)開工,不相互依賴,效率高

          原理:(此圖來自某博客,地址忘記。 望博主看到能聯(lián)系我加上轉(zhuǎn)載出處,在此抱歉~)

          開啟一個本地的服務(wù)器來運(yùn)行自己的前端代碼,以此來模擬真實(shí)的線上環(huán)境;

          利用nodejs的express框架來開啟一個本地的服務(wù)器,然后利用nodejs的一個http-proxy-middleware插件將客戶端發(fā)往nodejs的請求轉(zhuǎn)發(fā)給真正的服務(wù)器,讓nodejs作為一個中間層。

          然后就是數(shù)據(jù)問題了,后端接口在開發(fā)中,前端需要數(shù)據(jù)怎么辦呢?mockjs了解一下,

          API地址https://github.com/nuysoft/Mo... ,當(dāng)后端設(shè)計(jì)出AP接口文檔后,我們就可以利用mockjs模擬出對應(yīng)格式的假數(shù)據(jù)進(jìn)行開發(fā),等到接口完全完成之后,再進(jìn)行接口聯(lián)調(diào)

          2.2.2 MVVM框架:vue

          Vue是一個漸進(jìn)式框架,容易入手、容易協(xié)同,能夠快速靈活的開發(fā)迭代。同時(shí)也是目前主流三大框架里學(xué)習(xí)成本最低的,目前,公司也在主推vue作為首選框架,進(jìn)行相關(guān)技術(shù)的培訓(xùn)。

          Vue社區(qū)相對熱度高,組件、庫、輪子多,資源整合鏈接(https://segmentfault.com/p/1210000008583242/read?from=timeline#UI%E7%BB%84%E4%BB%B6)

          體積小、自由度高、腳手架創(chuàng)建的項(xiàng)目自帶webpack打包構(gòu)建工具

          雖然vue是單頁應(yīng)用,但是可以通過配置webpack進(jìn)行多頁開發(fā)

          2.2.3 css預(yù)編譯語言

          使用css預(yù)編譯語言來寫css會提高編寫css效率(具體提高多少百分比效率可自行測試,我覺得找一段寫好的css,先用css寫一遍,再用less或者其他寫一遍計(jì)算耗時(shí)百分比,這里忽略寫樣式時(shí)候思考的時(shí)間進(jìn)行測試)

          預(yù)編譯語言可以定義變量(比如常用的顏色、字體、字號等)、嵌套寫法、可以繼承其他類的屬性、計(jì)算、內(nèi)置函數(shù)等

          2.2.4 常用類庫

          • 圖形工具—echarts (對應(yīng)場景 – xxx)
          • 適配插件—flexible taobaoH5終端適配方案 (對應(yīng)場景—xxx)
          • Lodash – JS函數(shù)庫 (對應(yīng)場景—xxx)
          • ElementUI – UI庫 (對應(yīng)場景—xxx)
          • One-Page-Nav – 導(dǎo)航插件 (對應(yīng)場景—xxx)

          具體場景我就不寫了,根據(jù)你們不同的業(yè)務(wù)需求去判斷需要哪些類庫插件之類的,預(yù)先決定好,以免半途做什么都要去花時(shí)間思考

          2.3構(gòu)建工具

          既然選擇了vue框架,構(gòu)建工具當(dāng)然選擇vue自帶的webpack了,對于webpack有人說會配置項(xiàng)目就行,有人說要深入研究,這個看個人需求我覺得

          2.4開發(fā)效率

          • PS一鍵切圖功能
          • emmet快速編寫HTML
          #page>div.logo+ul#navigation>li*5>a{Item $}
          

          按下tab鍵,上述代碼 等于

          <div id="page">
           <div class="logo"></div>
           <ul id="navigation">
           <li><a href="">Item 1</a></li>
           <li><a href="">Item 2</a></li>
           <li><a href="">Item 3</a></li>
           <li><a href="">Item 4</a></li>
           <li><a href="">Item 5</a></li>
           </ul>
          </div>
          

          背景:原項(xiàng)目寫的純css

          less/sass/scss 快速編寫css

          比如

          @base-size: 40px;
          @theme-color: #ccc;
          @my-selector: title;
          .aa {
           font-weight: bold;
          }
          .@{my-selector} {
           font-size: @base-size;
           color: @theme-color;
           margin: 100/2px 200/10px;
           &-ok {
           color: green;
           }
           &-no {
           color: yellow;
           }
           > li{
           &:extend(.aa);
           &:hover {
           color: #fff;
           }
           }
          }
          

          編譯后為:

          .aa,
          .title > li {
           font-weight: bold;
          }
          .title {
           font-size: 40px;
           color: #ccc;
           margin: 50px 20px;
          }
          .title-ok {
           color: green;
          }
          .title-no {
           color: yellow;
          }
          .title > li:hover {
           color: #fff;
          }
          

          這里只寫了一點(diǎn)點(diǎn),功能還有很多的

          less官網(wǎng)(https://less.bootcss.com/features/)

          sass官網(wǎng)(https://www.sass.hk/)

          • webpack:壓縮代碼、圖片,合并JS,檢測文件更新等自動進(jìn)行
          • webstorm自帶取色器(其他IDE應(yīng)該都有,自行找下)

          寫顏色色值的地方可以點(diǎn)擊調(diào)出取色板(不限于css),可以選顏色也可以利用吸管取色(屏幕任意處 不限于IDE內(nèi)部),也有取色的網(wǎng)站可以收藏到書簽工具文件夾里

          Mockjs:上面有介紹mockjs,這里不再贅述,由于本人有過手寫假數(shù)據(jù)的悲慘經(jīng)歷,故把mockjs列入可以提高開發(fā)效率行列,因?yàn)榍昂蠖朔蛛x后前后端同時(shí)開發(fā),假數(shù)據(jù)已成必須

          比如:

          let template={
           'anchorList|3-6':[{
           'id|1-100': 1,
           'name': '@cname',
           'date': '@date(yyyy-MM-dd)',
           biubiubiu: ()=> Mock.Random.string('abcdefghijklmnopqrstuvwxyz', 5),
           'arr|2-5': [{
           'age|10-20': 0
           }]
           }]
           }
           console.log(Mock.mock(template))
          

          輸出:

          模塊化、組件化開發(fā):前后端解耦后,前端之間配合也可以解耦,各自負(fù)責(zé)不同的模塊開發(fā),寫自己的組件,最后通信部分再協(xié)同

          2.5性能優(yōu)化

          2.5.1 數(shù)據(jù)存取

          ☆ 盡量使用局部變量

          ☆ 對象成員的嵌套深度與讀取時(shí)間成正比,嵌套過深要進(jìn)行優(yōu)化

          2.5.2 DOM

          ☆ 盡量減少DOM操作(訪問和修改都算)的次數(shù)

          ☆ 訪問元素時(shí)使用最快的API

          ☆ 使用事件委托來減少事件處理器的數(shù)量

          ☆ 減少重繪和重排的次數(shù)

          2.5.3 算法和流程

          ☆ for循環(huán)、while循環(huán)、do-whild循環(huán)比for in 要快

          ☆ 優(yōu)化循環(huán)體的復(fù)雜度

          ☆ 最小化屬性查找:

          for(let i=0, len=arr.length; i < len; i++){
          ...
          }
          

          ☆ 當(dāng)條件較少時(shí) 使用if-else更易讀,而當(dāng)條件較多時(shí)if-else性能負(fù)擔(dān)比switch大,易讀性也沒switch好。

          ☆ 對于if else 概率越大的條件越靠前判斷 比如:

          ☆ 當(dāng)計(jì)算量很大且重復(fù)的時(shí)候,用Memoization緩存計(jì)算結(jié)果

          2.5.4 字符串拼接

          比較下四中字符串拼接方法的性能:

          A:str=str + 'a'+'b'

          B:str +='a' + 'b'

          C: arr.join('')

          D:str.concat('b','c')

          ☆ Chrome65上測試的是A優(yōu)于B優(yōu)于C優(yōu)于D

          其他瀏覽器不確定

          2.5.5 Ajax

          ☆ 服務(wù)端設(shè)置HTTP頭信息確保響應(yīng)會被瀏覽器緩存

          ☆ 客戶端講獲取的信息存到本地避免再次請求(localstorage sessionstorage cookice)

          ☆ 設(shè)置HTTP頭信息,expiresgaosu告訴瀏覽器緩存多久

          ☆ 減少HTTP請求,合并css、js、圖片資源文件等或使用MXHR

          ☆ 通過次要文件用Ajax獲取可縮短頁面加載時(shí)間

          這里只列了比較重要的一部分,安利一下我之前寫的性能優(yōu)化總結(jié)傳送門

          2.6模塊化組件化

          模塊化:以前由CommonJs、AMD、CMD等實(shí)現(xiàn),現(xiàn)在ES6的Module(原生模塊化)完全可以取而代之,靈活、高效是模塊化開發(fā)的好處,對于某個模塊我想輸出就輸出,想引入就引入,輸出引入也只需一個關(guān)鍵詞(export/import),而且ES6模塊語法支持暴露常量、單一接口、所有接口、混合暴露、取別名等等靈活高效是毋庸置疑的

          配合webpack在構(gòu)建的時(shí)候把資源整合打包壓縮自動處理了一些以前需要手動進(jìn)行的性能優(yōu)化問題了

          組件化:解決復(fù)雜業(yè)務(wù)的痛點(diǎn),把復(fù)雜的業(yè)務(wù)分為很多個組件分開開發(fā)管理以降低開發(fā)難度和維護(hù)成本。一個5000行的頁面和十個500行命名規(guī)范的組件哪個開發(fā)、維護(hù)簡單?

          組件靈活隨加隨用,可復(fù)用避免重復(fù)開發(fā),可組合使用

          2.7前端安全

          2.7.1 XSS

          XSS是指瀏覽器錯誤的將攻擊者提供的用戶輸入數(shù)據(jù)當(dāng)做JavaScript腳本給執(zhí)行了

          解決辦法:校驗(yàn)用戶輸入,特殊字符進(jìn)行轉(zhuǎn)義

          Vue 雙花括號自帶過濾功能

          2.7.2 本地存儲數(shù)據(jù)泄露

          本地存儲的所有數(shù)據(jù)就都可能被攻擊者的JS腳本讀取到,所以敏感、機(jī)密信息都不建議在前端存儲

          const常量 let 塊級作用域避免代碼習(xí)慣不佳導(dǎo)致的作用域混亂問題

          2.8用戶體驗(yàn)

          ☆ 優(yōu)化加載速度,減少用戶等待時(shí)間

          ☆ 減少不必要的無謂的操作

          ☆ 動畫交互合理,短平快的交互或者動畫更適合知學(xué)寶,我們是功能型網(wǎng)站不是欣賞型網(wǎng)站,不需要太花里胡哨的動畫,那樣反而增加等待時(shí)間,適得其反

          ☆ 更賞心悅目的UI(字體、圖片、logo,按鈕、列表等)

          ☆ 處理好很多小的細(xì)節(jié)的地方,比如... 針對項(xiàng)目的地方就略了

          關(guān)于用戶體驗(yàn)這塊暫時(shí)沒找到比較權(quán)威的書,如果大家有覺得不錯的歡迎留言推薦~

          end

          寫的不是很細(xì),但愿很多地方都覆蓋到了,歡迎補(bǔ)充~

          感興趣的小伙伴,可以關(guān)注公眾號【grain先森】,回復(fù)關(guān)鍵詞 “vue”,獲取更多資料,更多關(guān)鍵詞玩法期待你的探索~

          近小編發(fā)現(xiàn)一個有趣的現(xiàn)象,5秒輕游戲推出了一個關(guān)于服裝設(shè)計(jì)大賽的活動,有二十四個作品參選,投票活動進(jìn)行得如火如荼。5秒輕游戲作為HTML5游戲界的新銳,參與華服這樣具有中國元素的服裝大賽,不得不說是另類的。但是從另一方面來看,5秒輕游戲(www.5miao.com)的主要用戶群是90后學(xué)生群體,90后學(xué)生是一個具有前衛(wèi)思想、獨(dú)特審美的群體。5秒輕游戲針對用戶群參與這樣一個游戲界另類的大賽,通過這樣的賽事擴(kuò)大在目標(biāo)用戶群里的影響力。如此看來,5秒輕游戲進(jìn)軍時(shí)尚界也是不足為怪的啦。

          現(xiàn)在小編帶你來細(xì)細(xì)欣賞一下今日服裝大賽排行榜前三的作品:

          排行榜第一名:23號 《隨意》

          這一系類作品的設(shè)計(jì)師蔣甜說到:“在快節(jié)奏的生活中,我們要學(xué)會享受生活,停下腳步感受生活中的一草一木”她這一系列作品靈感源自荷塘,以手繪形式來展現(xiàn)荷花的靜態(tài)之美,以一種隨意的中國古式穿著盡顯人與自然生物的和諧之美。

          排行榜第二名:6號 《未央》

          作為《未央》的設(shè)計(jì)師劉怡君,自身就給人一種淡然之氣。《未央》這個作品就體現(xiàn)了劉怡君對田園牧民悠然自得、淡泊名利的生活的向往。服裝的取色就是將傍晚太陽剛剛落下天空那抹青色揉到其中,讓人穿在身上有一種歸隱山居園林的閑適和輕松。

          排行榜第三名:22號 《木浮生》

          《木浮生》面料以天然纖維和植物染料為主,著重色彩,圖案,配飾,手工藝術(shù)等細(xì)節(jié),將民族傳統(tǒng)工藝與現(xiàn)代時(shí)尚風(fēng)格融匯結(jié)合,既滿足現(xiàn)代人類對自然,返璞歸真的物質(zhì)和精神文化的追求,又有極好的穿著度,不僅弘揚(yáng)了民族文化也豐富了現(xiàn)代設(shè)計(jì)。《木浮生》的設(shè)計(jì)者之一高悅說到:“我們對華服飽含的溫情與敬意愿在這里用木浮生將這華美精彩的五千年華夏文化以最真實(shí)的方式展現(xiàn)在您的眼前。”

          今天小編就為大家講解排行榜到這,看了這幾組有美感、設(shè)計(jì)感的服裝,是不是對服裝大賽充滿了期待呢?想看到更多系列的服裝,關(guān)注5秒輕游戲(www.5miao.com)微信公眾號,還可以對自己喜歡的設(shè)計(jì)投票哦~

          據(jù)證明,WEB前端開發(fā)工程師已成為當(dāng)下炙手可熱的崗位之一,大中型企業(yè)對前端開發(fā)人才的需求量與日俱增,開始學(xué)習(xí)WEB前端開發(fā)技術(shù)的學(xué)生也開始明顯增多。 前端、后端是web開發(fā)的兩個端,其實(shí)統(tǒng)稱web開發(fā),在很多國外公司沒前后端這個說法,都叫做『軟件工程師』或者web developer。

          其實(shí),要轉(zhuǎn)換一個思想:前后端并不是對立的,所以在你保持前端高水平的情況下,精進(jìn)一些后端技術(shù)是必要的,但是要分清主次,前端為主。因此想要學(xué)習(xí)前端技術(shù)的人越來越多,那么零基礎(chǔ)學(xué)習(xí)web前端需要掌握哪些技能和工具?下面讓我們一起來看一看吧~

          01

          必備基礎(chǔ)技能

          以下是個人覺得入門階段應(yīng)該熟練掌握的基礎(chǔ)技能:HTML4,HTML5語法、標(biāo)簽、語義。

          CSS2.1,CSS3規(guī)范,與HTML結(jié)合實(shí)現(xiàn)各種布局、效果。

          Ecma-262定義的javascript的語言核心,原生客戶端javascript,DOM操作,HTML5新增功能。

          一個成熟的客戶端javascript庫,推薦jquery。

          一門服務(wù)器端語言:如果有服務(wù)器端開發(fā)經(jīng)驗(yàn),使用已經(jīng)會的語言即可,如果沒有服務(wù)器端開發(fā)經(jīng)驗(yàn),熟悉Java可以選擇Servlet,不熟悉的可以選PHP,能實(shí)現(xiàn)簡單登陸注冊功能就足夠支持前端開發(fā)了,后續(xù)可能需要繼續(xù)學(xué)習(xí),最基本要求是實(shí)現(xiàn)簡單的功能模擬。

          在掌握以上基礎(chǔ)技能之后,工作中遇到需要的技術(shù)也能快速學(xué)習(xí)。

          02

          基本開發(fā)工具

          恰當(dāng)?shù)墓ぞ吣苡行岣邔W(xué)習(xí)效率,將重點(diǎn)放在知識本身,在出現(xiàn)問題時(shí)能快速定位并 解決問題,以下是個人覺得必備的前端開發(fā)工具:

          文本編輯器:推薦Sublime Text,支持各種插件、主題、設(shè)置,使用方便

          瀏覽器:推薦Google Chrome,更新快,對前端各種標(biāo)準(zhǔn)提供了非常好的支持

          調(diào)試工具:推薦Chrome自帶的Chrome develop tools,可以輕松查看DOM結(jié)構(gòu)、樣式,通過控制臺輸出調(diào)試信息,調(diào)試javascript,查看網(wǎng)絡(luò)等

          輔助工具:PhotoShop編輯圖片、取色,fireworks量尺寸,AlloyDesigner對比尺寸,以及前面的Chrome develop tools,

          FQ工具:lantern, 壁虎漫步

          建議大家從一些知識細(xì)節(jié)入手,數(shù)據(jù)可視化入門,數(shù)據(jù)可視化基礎(chǔ),零編程工具使用:ChartBlocks、Infogram、plotly、Raw、Tableau,D3.js詳解,D3.js 入門,D3.js 高級應(yīng)用,D3.js 應(yīng)用工具:NVD3、n3,charts,Highcharts,F(xiàn)usionCharts,Polymaps等。

          自學(xué)其實(shí)就是一種手段,至于具體的學(xué)習(xí)效果,其實(shí)全在于個人,這種入門前端的方法基本是屬于最慢的,如果學(xué)習(xí)方法和方向不對,很可能是做無用功。

          如果是想轉(zhuǎn)行前端或者是想要進(jìn)入前端這個行業(yè),以此為職業(yè)的話,建議還是系統(tǒng)的培訓(xùn)學(xué)習(xí)吧,因?yàn)椴粌H能節(jié)約時(shí)間,還能了解到最新的前端技術(shù)和技能,也有行業(yè)內(nèi)的專業(yè)人士幫你找到最快捷的學(xué)習(xí)入門方法,不至于白學(xué)或者走彎路。


          北大青鳥長安街校區(qū)


          主站蜘蛛池模板: 久久综合亚洲色一区二区三区 | 国产在线步兵一区二区三区| 中日韩一区二区三区| 无码丰满熟妇一区二区| 色偷偷av一区二区三区| 九九久久99综合一区二区| 在线欧美精品一区二区三区| 精品一区二区91| 成人精品视频一区二区三区不卡| 久久影院亚洲一区| 精品欧洲AV无码一区二区男男| 亚洲日本乱码一区二区在线二产线| 亚洲国产精品无码久久一区二区| 国产一区风间由美在线观看| 午夜精品一区二区三区在线视| 日韩经典精品无码一区| 亚洲av午夜福利精品一区| 亚洲愉拍一区二区三区| 清纯唯美经典一区二区| 毛片一区二区三区无码| 国产视频一区在线观看| 国产综合视频在线观看一区 | 国产精品av一区二区三区不卡蜜| 国产精品福利区一区二区三区四区 | 日韩精品福利视频一区二区三区| 日本一区二区免费看| 亚洲av无码片vr一区二区三区| 国产在线精品一区二区三区不卡 | 亚州日本乱码一区二区三区| 国产一区二区三区美女| 精品国产一区二区三区无码| 亚洲视频一区二区| 日韩精品国产一区| 亚洲AV成人一区二区三区观看 | 亚洲AV永久无码精品一区二区国产| 久久免费视频一区| 亚洲大尺度无码无码专线一区| 福利在线一区二区| 日韩在线视频不卡一区二区三区 | 成人一区二区免费视频| 国模精品一区二区三区视频|