国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

ningwang / 2133人閱讀

摘要:定義公共組件供各模塊或特定場景調(diào)用,復(fù)用度高第三方庫組件插件庫用于解決以下版本瀏覽器對新增標簽不識別,并導(dǎo)致不起作用的問題。

前端重構(gòu)方案 前言

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

一、原項目梳理

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

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

我這邊負責的PC端的重構(gòu),所以先把頁面結(jié)構(gòu)及之間的關(guān)系梳理了一遍,并用xmind畫好結(jié)構(gòu)圖,重點功能做上標記,因為vue是漸進式框架,所以我會優(yōu)先重構(gòu)重要的部分
xmind結(jié)構(gòu)圖我就不上了,職業(yè)操守還是要的

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

項目結(jié)構(gòu)是針對代碼組織結(jié)構(gòu)的,梳理了項目各重要的文件夾及文件并注明對應(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新增標簽不識別,并導(dǎo)致CSS不起作用的問題。
Dialog : jquery彈窗插件
jCarousel : jquery 輪播插件 (重構(gòu)版舍棄,原因不復(fù)雜的場景能原生實現(xiàn)盡量原生實現(xiàn))
respond:為 IE6-8 以及其它不支持 CSS3 Media Queries 的瀏覽器提供媒體查詢的 min-width 和 max-width 特性,實現(xiàn)響應(yīng)式網(wǎng)頁設(shè)計
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)在新項目大多采用這種模式進行開發(fā),項目完全重構(gòu)的話當然首選此模式
好處:以前沒有前端這一職位之說,都是后端兼顧開發(fā),數(shù)據(jù)庫、底層服務(wù)、接口,頁面一把梭,壓力大,而且精力有限不能在每個領(lǐng)域都做的出色。后來有切圖這一職,可以把頁面寫的更精美一些,通過模板和請求接口配合進行數(shù)據(jù)交互,前端都是緊緊耦合于后端,這種情況下開發(fā),溝通成本,開發(fā)過程中進度依賴成本都是較高的。前后端分離后,分工更明確,各自專注做好自己領(lǐng)域的事,同時開工,不相互依賴,效率高
原理:(此圖來自某博客,地址忘記。 望博主看到能聯(lián)系我加上轉(zhuǎn)載出處,在此抱歉~)


開啟一個本地的服務(wù)器來運行自己的前端代碼,以此來模擬真實的線上環(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... ,當后端設(shè)計出AP接口文檔后,我們就可以利用mockjs模擬出對應(yīng)格式的假數(shù)據(jù)進行開發(fā),等到接口完全完成之后,再進行接口聯(lián)調(diào)

2.2.2 MVVM框架:vue

Vue是一個漸進式框架,容易入手、容易協(xié)同,能夠快速靈活的開發(fā)迭代。同時也是目前主流三大框架里學(xué)習(xí)成本最低的,目前,公司也在主推vue作為首選框架,進行相關(guān)技術(shù)的培訓(xùn)。
Vue社區(qū)相對熱度高,組件、庫、輪子多,資源整合鏈接:https://segmentfault.com/p/12...
體積小、自由度高、腳手架創(chuàng)建的項目自帶webpack打包構(gòu)建工具
雖然vue是單頁應(yīng)用,但是可以通過配置webpack進行多頁開發(fā)

2.2.3 css預(yù)編譯語言

使用css預(yù)編譯語言來寫css會提高編寫css效率(具體提高多少百分比效率可自行測試,我覺得找一段寫好的css,先用css寫一遍,再用less或者其他寫一遍計算耗時百分比,這里忽略寫樣式時候思考的時間進行測試)
預(yù)編譯語言可以定義變量(比如常用的顏色、字體、字號等)、嵌套寫法、可以繼承其他類的屬性、計算、內(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ù)先決定好,以免半途做什么都要去花時間思考

2.3構(gòu)建工具

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

2.4開發(fā)效率

PS一鍵切圖功能

emmet快速編寫HTML

#page>div.logo+ul#navigation>li*5>a{Item $}

按下tab鍵,上述代碼 等于

背景:原項目寫的純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;
}

這里只寫了一點點,功能還有很多的
less官網(wǎng)選我選我
sass官網(wǎng):選我選我

webpack:壓縮代碼、圖片,合并JS,檢測文件更新等自動進行

webstorm自帶取色器(其他IDE應(yīng)該都有,自行找下)

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

Mockjs:上面有介紹mockjs,這里不再贅述,由于本人有過手寫假數(shù)據(jù)的悲慘經(jīng)歷,故把mockjs列入可以提高開發(fā)效率行列,因為前后端分離后前后端同時開發(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ā),寫自己的組件,最后通信部分再協(xié)同

2.5性能優(yōu)化

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

☆ 盡量使用局部變量
☆ 對象成員的嵌套深度與讀取時間成正比,嵌套過深要進行優(yōu)化

2.5.2 DOM

☆ 盡量減少DOM操作(訪問和修改都算)的次數(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++){

...

}
☆ 當條件較少時 使用if-else更易讀,而當條件較多時if-else性能負擔比switch大,易讀性也沒switch好。
☆ 對于if else 概率越大的條件越靠前判斷 比如:

☆ 當計算量很大且重復(fù)的時候,用Memoization緩存計算結(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獲取可縮短頁面加載時間

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

2.6模塊化組件化

模塊化:以前由CommonJs、AMD、CMD等實現(xiàn),現(xiàn)在ES6的Module(原生模塊化)完全可以取而代之,靈活、高效是模塊化開發(fā)的好處,對于某個模塊我想輸出就輸出,想引入就引入,輸出引入也只需一個關(guān)鍵詞(export/import),而且ES6模塊語法支持暴露常量、單一接口、所有接口、混合暴露、取別名等等靈活高效是毋庸置疑的
配合webpack在構(gòu)建的時候把資源整合打包壓縮自動處理了一些以前需要手動進行的性能優(yōu)化問題了
組件化:解決復(fù)雜業(yè)務(wù)的痛點,把復(fù)雜的業(yè)務(wù)分為很多個組件分開開發(fā)管理以降低開發(fā)難度和維護成本。一個5000行的頁面和十個500行命名規(guī)范的組件哪個開發(fā)、維護簡單?
組件靈活隨加隨用,可復(fù)用避免重復(fù)開發(fā),可組合使用

2.7前端安全

2.7.1 XSS

XSS是指瀏覽器錯誤的將攻擊者提供的用戶輸入數(shù)據(jù)當做JavaScript腳本給執(zhí)行了
解決辦法:校驗用戶輸入,特殊字符進行轉(zhuǎn)義
Vue 雙花括號自帶過濾功能

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

本地存儲的所有數(shù)據(jù)就都可能被攻擊者的JS腳本讀取到,所以敏感、機密信息都不建議在前端存儲
const常量 let 塊級作用域避免代碼習(xí)慣不佳導(dǎo)致的作用域混亂問題

2.8用戶體驗

☆ 優(yōu)化加載速度,減少用戶等待時間
☆ 減少不必要的無謂的操作
☆ 動畫交互合理,短平快的交互或者動畫更適合知學(xué)寶,我們是功能型網(wǎng)站不是欣賞型網(wǎng)站,不需要太花里胡哨的動畫,那樣反而增加等待時間,適得其反
☆ 更賞心悅目的UI(字體、圖片、logo,按鈕、列表等)
☆ 處理好很多小的細節(jié)的地方,比如... 針對項目的地方就略了

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

end

寫的不是很細,但愿很多地方都覆蓋到了,歡迎留言補充~
注:內(nèi)容有不當或者錯誤處請指正~轉(zhuǎn)載請注明出處~謝謝合作!

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94779.html

相關(guān)文章

  • 前端窩 - 收藏集 - 掘金

    摘要:毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的設(shè)計模式使代碼編寫真正工程化設(shè)計模小書前端掘金這是一本關(guān)于的小書。 JavaScript 常見設(shè)計模式解析 - 掘金設(shè)計模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的;設(shè)計...

    李文鵬 評論0 收藏0
  • 重構(gòu) - 改善代碼的各方面問題

    摘要:暴露接口如果是函數(shù),就擴展,否則就是驗證數(shù)據(jù)使用金額校驗規(guī)則這樣運行能正常,也有擴展性性,但是對于代碼潔癖的來說,這樣寫法不優(yōu)雅。 重構(gòu)不是對以前代碼的全盤否定,而是利用更好的方式,寫出更好,更有維護性代碼。不斷的追求與學(xué)習(xí),才有更多的進步。 1.前言 做前端開發(fā)有一段時間了,在這段時間里面,對于自己的要求,不僅僅是項目能完成,功能正常使用這一層面上。還盡力的研究怎么寫出優(yōu)雅的代碼,性...

    AlphaWallet 評論0 收藏0
  • 騰訊前端求職直播課——面試篇

    摘要:主講人石小勇騰訊高級前端工程師,核心成員之一,現(xiàn)主要負責騰訊興趣部落的研發(fā)設(shè)計工作閑聊前端從移動時代開始,前后端分離之后,前端這個崗位才開始慢慢火起來一線城市前端需求量大,但合格前端很少大話面試面試如相親,為什么這么說五大要素顏王面試的第一 主講人:AlloyTeam@石小勇(騰訊高級前端工程師,AlloyTeam核心成員之一,現(xiàn)主要負責騰訊QQ興趣部落的研發(fā)設(shè)計工作) 1.閑聊前端 ...

    YFan 評論0 收藏0
  • 騰訊前端求職直播課——面試篇

    摘要:主講人石小勇騰訊高級前端工程師,核心成員之一,現(xiàn)主要負責騰訊興趣部落的研發(fā)設(shè)計工作閑聊前端從移動時代開始,前后端分離之后,前端這個崗位才開始慢慢火起來一線城市前端需求量大,但合格前端很少大話面試面試如相親,為什么這么說五大要素顏王面試的第一 主講人:AlloyTeam@石小勇(騰訊高級前端工程師,AlloyTeam核心成員之一,現(xiàn)主要負責騰訊QQ興趣部落的研發(fā)設(shè)計工作) 1.閑聊前端 ...

    gxyz 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<