Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
源:吃葡萄不吐番茄皮
segmentfault.com/a/1190000014753304
前言
前端技術發展很快,很多項目面臨前端部分重構,很開心可以讓我進行這次項目前端的重構方案編寫,在思考的同時參考了網上很多資料,希望本篇重構方案有一定的完整性,可以帶給大家一些在面臨重構時有用的東西,同時希望路過的大牛小牛不領賜教,能給我略微指點下重構相關的點,在下感激不盡~
一、原項目梳理
首先對原來項目做一個大概的梳理,既然是重構,當然很多東西是可以繼續拿來使用的。
1.1頁面結構
我這邊負責的PC端的重構,所以先把頁面結構及之間的關系梳理了一遍,并用xmind畫好結構圖,重點功能做上標記,因為vue是漸進式框架,所以我會優先重構重要的部分
xmind結構圖我就不上了,職業操守還是要的
1.2項目結構
項目結構是針對代碼組織結構的,梳理了項目各重要的文件夾及文件并注明對應的內容或者作用。同樣的,使用xmind畫出結構圖,xmind圖略。
1.3前端框架、模板
使用公司內部人員自創框架C.F.F,自定義build文件,內嵌Smarty模板獲取后臺數據,利用{$xxx}獲取后臺數據,但是定義了很多全局變量存儲模板數據,造成占用更多內存、污染命名空間等問題。
定義公共組件供各模塊或特定場景調用,復用度高
1.4第三方庫、組件、插件
二、重構方案
2.1開發規范
規范這個東西沒有絕對的對錯,只有同公司或者同部門來制定規范大家都保持一致,同事之間能很快讀懂相互的代碼,提高開發效率
2.2技術選型
2.2.1 開發模式:前后端分離
前后端分離開發早已成為趨勢,到現在新項目大多采用這種模式進行開發,項目完全重構的話當然首選此模式
好處:以前沒有前端這一職位之說,都是后端兼顧開發,數據庫、底層服務、接口,頁面一把梭,壓力大,而且精力有限不能在每個領域都做的出色。后來有切圖這一職,可以把頁面寫的更精美一些,通過模板和請求接口配合進行數據交互,前端都是緊緊耦合于后端,這種情況下開發,溝通成本,開發過程中進度依賴成本都是較高的。前后端分離后,分工更明確,各自專注做好自己領域的事,同時開工,不相互依賴,效率高
原理:(此圖來自某博客,地址忘記。 望博主看到能聯系我加上轉載出處,在此抱歉~)
開啟一個本地的服務器來運行自己的前端代碼,以此來模擬真實的線上環境;
利用nodejs的express框架來開啟一個本地的服務器,然后利用nodejs的一個http-proxy-middleware插件將客戶端發往nodejs的請求轉發給真正的服務器,讓nodejs作為一個中間層。
然后就是數據問題了,后端接口在開發中,前端需要數據怎么辦呢?mockjs了解一下,
API地址https://github.com/nuysoft/Mo... ,當后端設計出AP接口文檔后,我們就可以利用mockjs模擬出對應格式的假數據進行開發,等到接口完全完成之后,再進行接口聯調
2.2.2 MVVM框架:vue
Vue是一個漸進式框架,容易入手、容易協同,能夠快速靈活的開發迭代。同時也是目前主流三大框架里學習成本最低的,目前,公司也在主推vue作為首選框架,進行相關技術的培訓。
Vue社區相對熱度高,組件、庫、輪子多,資源整合鏈接(https://segmentfault.com/p/1210000008583242/read?from=timeline#UI%E7%BB%84%E4%BB%B6)
體積小、自由度高、腳手架創建的項目自帶webpack打包構建工具
雖然vue是單頁應用,但是可以通過配置webpack進行多頁開發
2.2.3 css預編譯語言
使用css預編譯語言來寫css會提高編寫css效率(具體提高多少百分比效率可自行測試,我覺得找一段寫好的css,先用css寫一遍,再用less或者其他寫一遍計算耗時百分比,這里忽略寫樣式時候思考的時間進行測試)
預編譯語言可以定義變量(比如常用的顏色、字體、字號等)、嵌套寫法、可以繼承其他類的屬性、計算、內置函數等
2.2.4 常用類庫
具體場景我就不寫了,根據你們不同的業務需求去判斷需要哪些類庫插件之類的,預先決定好,以免半途做什么都要去花時間思考
2.3構建工具
既然選擇了vue框架,構建工具當然選擇vue自帶的webpack了,對于webpack有人說會配置項目就行,有人說要深入研究,這個看個人需求我覺得
2.4開發效率
#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>
背景:原項目寫的純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官網(https://less.bootcss.com/features/)
sass官網(https://www.sass.hk/)
寫顏色色值的地方可以點擊調出取色板(不限于css),可以選顏色也可以利用吸管取色(屏幕任意處 不限于IDE內部),也有取色的網站可以收藏到書簽工具文件夾里
Mockjs:上面有介紹mockjs,這里不再贅述,由于本人有過手寫假數據的悲慘經歷,故把mockjs列入可以提高開發效率行列,因為前后端分離后前后端同時開發,假數據已成必須
比如:
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))
輸出:
模塊化、組件化開發:前后端解耦后,前端之間配合也可以解耦,各自負責不同的模塊開發,寫自己的組件,最后通信部分再協同
2.5性能優化
2.5.1 數據存取
☆ 盡量使用局部變量
☆ 對象成員的嵌套深度與讀取時間成正比,嵌套過深要進行優化
2.5.2 DOM
☆ 盡量減少DOM操作(訪問和修改都算)的次數
☆ 訪問元素時使用最快的API
☆ 使用事件委托來減少事件處理器的數量
☆ 減少重繪和重排的次數
2.5.3 算法和流程
☆ for循環、while循環、do-whild循環比for in 要快
☆ 優化循環體的復雜度
☆ 最小化屬性查找:
for(let i=0, len=arr.length; i < len; i++){ ... }
☆ 當條件較少時 使用if-else更易讀,而當條件較多時if-else性能負擔比switch大,易讀性也沒switch好。
☆ 對于if else 概率越大的條件越靠前判斷 比如:
☆ 當計算量很大且重復的時候,用Memoization緩存計算結果
2.5.4 字符串拼接
比較下四中字符串拼接方法的性能:
A:str=str + 'a'+'b'
B:str +='a' + 'b'
C: arr.join('')
D:str.concat('b','c')
☆ Chrome65上測試的是A優于B優于C優于D
其他瀏覽器不確定
2.5.5 Ajax
☆ 服務端設置HTTP頭信息確保響應會被瀏覽器緩存
☆ 客戶端講獲取的信息存到本地避免再次請求(localstorage sessionstorage cookice)
☆ 設置HTTP頭信息,expiresgaosu告訴瀏覽器緩存多久
☆ 減少HTTP請求,合并css、js、圖片資源文件等或使用MXHR
☆ 通過次要文件用Ajax獲取可縮短頁面加載時間
這里只列了比較重要的一部分,安利一下我之前寫的性能優化總結傳送門
2.6模塊化組件化
模塊化:以前由CommonJs、AMD、CMD等實現,現在ES6的Module(原生模塊化)完全可以取而代之,靈活、高效是模塊化開發的好處,對于某個模塊我想輸出就輸出,想引入就引入,輸出引入也只需一個關鍵詞(export/import),而且ES6模塊語法支持暴露常量、單一接口、所有接口、混合暴露、取別名等等靈活高效是毋庸置疑的
配合webpack在構建的時候把資源整合打包壓縮自動處理了一些以前需要手動進行的性能優化問題了
組件化:解決復雜業務的痛點,把復雜的業務分為很多個組件分開開發管理以降低開發難度和維護成本。一個5000行的頁面和十個500行命名規范的組件哪個開發、維護簡單?
組件靈活隨加隨用,可復用避免重復開發,可組合使用
2.7前端安全
2.7.1 XSS
XSS是指瀏覽器錯誤的將攻擊者提供的用戶輸入數據當做JavaScript腳本給執行了
解決辦法:校驗用戶輸入,特殊字符進行轉義
Vue 雙花括號自帶過濾功能
2.7.2 本地存儲數據泄露
本地存儲的所有數據就都可能被攻擊者的JS腳本讀取到,所以敏感、機密信息都不建議在前端存儲
const常量 let 塊級作用域避免代碼習慣不佳導致的作用域混亂問題
2.8用戶體驗
☆ 優化加載速度,減少用戶等待時間
☆ 減少不必要的無謂的操作
☆ 動畫交互合理,短平快的交互或者動畫更適合知學寶,我們是功能型網站不是欣賞型網站,不需要太花里胡哨的動畫,那樣反而增加等待時間,適得其反
☆ 更賞心悅目的UI(字體、圖片、logo,按鈕、列表等)
☆ 處理好很多小的細節的地方,比如... 針對項目的地方就略了
關于用戶體驗這塊暫時沒找到比較權威的書,如果大家有覺得不錯的歡迎留言推薦~
end
寫的不是很細,但愿很多地方都覆蓋到了,歡迎補充~
感興趣的小伙伴,可以關注公眾號【grain先森】,回復關鍵詞 “vue”,獲取更多資料,更多關鍵詞玩法期待你的探索~
近小編發現一個有趣的現象,5秒輕游戲推出了一個關于服裝設計大賽的活動,有二十四個作品參選,投票活動進行得如火如荼。5秒輕游戲作為HTML5游戲界的新銳,參與華服這樣具有中國元素的服裝大賽,不得不說是另類的。但是從另一方面來看,5秒輕游戲(www.5miao.com)的主要用戶群是90后學生群體,90后學生是一個具有前衛思想、獨特審美的群體。5秒輕游戲針對用戶群參與這樣一個游戲界另類的大賽,通過這樣的賽事擴大在目標用戶群里的影響力。如此看來,5秒輕游戲進軍時尚界也是不足為怪的啦。
現在小編帶你來細細欣賞一下今日服裝大賽排行榜前三的作品:
排行榜第一名:23號 《隨意》
這一系類作品的設計師蔣甜說到:“在快節奏的生活中,我們要學會享受生活,停下腳步感受生活中的一草一木”她這一系列作品靈感源自荷塘,以手繪形式來展現荷花的靜態之美,以一種隨意的中國古式穿著盡顯人與自然生物的和諧之美。
排行榜第二名:6號 《未央》
作為《未央》的設計師劉怡君,自身就給人一種淡然之氣。《未央》這個作品就體現了劉怡君對田園牧民悠然自得、淡泊名利的生活的向往。服裝的取色就是將傍晚太陽剛剛落下天空那抹青色揉到其中,讓人穿在身上有一種歸隱山居園林的閑適和輕松。
排行榜第三名:22號 《木浮生》
《木浮生》面料以天然纖維和植物染料為主,著重色彩,圖案,配飾,手工藝術等細節,將民族傳統工藝與現代時尚風格融匯結合,既滿足現代人類對自然,返璞歸真的物質和精神文化的追求,又有極好的穿著度,不僅弘揚了民族文化也豐富了現代設計。《木浮生》的設計者之一高悅說到:“我們對華服飽含的溫情與敬意愿在這里用木浮生將這華美精彩的五千年華夏文化以最真實的方式展現在您的眼前。”
今天小編就為大家講解排行榜到這,看了這幾組有美感、設計感的服裝,是不是對服裝大賽充滿了期待呢?想看到更多系列的服裝,關注5秒輕游戲(www.5miao.com)微信公眾號,還可以對自己喜歡的設計投票哦~
據證明,WEB前端開發工程師已成為當下炙手可熱的崗位之一,大中型企業對前端開發人才的需求量與日俱增,開始學習WEB前端開發技術的學生也開始明顯增多。 前端、后端是web開發的兩個端,其實統稱web開發,在很多國外公司沒前后端這個說法,都叫做『軟件工程師』或者web developer。
其實,要轉換一個思想:前后端并不是對立的,所以在你保持前端高水平的情況下,精進一些后端技術是必要的,但是要分清主次,前端為主。因此想要學習前端技術的人越來越多,那么零基礎學習web前端需要掌握哪些技能和工具?下面讓我們一起來看一看吧~
01
必備基礎技能
以下是個人覺得入門階段應該熟練掌握的基礎技能:HTML4,HTML5語法、標簽、語義。
CSS2.1,CSS3規范,與HTML結合實現各種布局、效果。
Ecma-262定義的javascript的語言核心,原生客戶端javascript,DOM操作,HTML5新增功能。
一個成熟的客戶端javascript庫,推薦jquery。
一門服務器端語言:如果有服務器端開發經驗,使用已經會的語言即可,如果沒有服務器端開發經驗,熟悉Java可以選擇Servlet,不熟悉的可以選PHP,能實現簡單登陸注冊功能就足夠支持前端開發了,后續可能需要繼續學習,最基本要求是實現簡單的功能模擬。
在掌握以上基礎技能之后,工作中遇到需要的技術也能快速學習。
02
基本開發工具
恰當的工具能有效提高學習效率,將重點放在知識本身,在出現問題時能快速定位并 解決問題,以下是個人覺得必備的前端開發工具:
文本編輯器:推薦Sublime Text,支持各種插件、主題、設置,使用方便
瀏覽器:推薦Google Chrome,更新快,對前端各種標準提供了非常好的支持
調試工具:推薦Chrome自帶的Chrome develop tools,可以輕松查看DOM結構、樣式,通過控制臺輸出調試信息,調試javascript,查看網絡等
輔助工具:PhotoShop編輯圖片、取色,fireworks量尺寸,AlloyDesigner對比尺寸,以及前面的Chrome develop tools,
FQ工具:lantern, 壁虎漫步
建議大家從一些知識細節入手,數據可視化入門,數據可視化基礎,零編程工具使用:ChartBlocks、Infogram、plotly、Raw、Tableau,D3.js詳解,D3.js 入門,D3.js 高級應用,D3.js 應用工具:NVD3、n3,charts,Highcharts,FusionCharts,Polymaps等。
自學其實就是一種手段,至于具體的學習效果,其實全在于個人,這種入門前端的方法基本是屬于最慢的,如果學習方法和方向不對,很可能是做無用功。
如果是想轉行前端或者是想要進入前端這個行業,以此為職業的話,建議還是系統的培訓學習吧,因為不僅能節約時間,還能了解到最新的前端技術和技能,也有行業內的專業人士幫你找到最快捷的學習入門方法,不至于白學或者走彎路。
北大青鳥長安街校區
*請認真填寫需求信息,我們會在24小時內與您取得聯系。