由于我28歲決定轉(zhuǎn)行當(dāng)前端工程師疮跑,起點(diǎn)很低,為了能盡可能彌補(bǔ)與他人差距凸舵,我對(duì)技術(shù)選型的定位就是實(shí)用祖娘、成本低和通用性,實(shí)用就是能滿足基本的需求啊奄,成本低就是能夠快速上手渐苏、快速迭代,通用性就是要能跨端菇夸,最好是安卓蘋果小程序通通都能用琼富,學(xué)一套,跨多端庄新。
所以經(jīng)過14月艱苦自學(xué)鞠眉,經(jīng)過幾次知識(shí)迭代更新。到目前為止我選擇的技能主要是這些:nuxt择诈、vue凡蚜、uniapp、element吭从、less朝蜘、koa、echarts涩金、mongo谱醇。目前能夠進(jìn)行簡(jiǎn)單的App暇仲、小程序、SSR副渴、SPA以及數(shù)據(jù)可視化開發(fā)
為什么要用Nuxt
用Vue制作出來的Spa程序雖然速度很快奈附,但由于數(shù)據(jù)是在前端動(dòng)態(tài)渲染的,導(dǎo)致各種關(guān)鍵字無法被搜索引擎收錄煮剧,很難進(jìn)行SEO優(yōu)化斥滤,這會(huì)導(dǎo)致網(wǎng)站的搜索排名滯后,這個(gè)弱點(diǎn)對(duì)于電商和博客類網(wǎng)站是致命的勉盅。
所以我們采取的方法是由后端將數(shù)據(jù)渲染成型后投遞給前端佑颇,這能滿足傳統(tǒng)的搜索引擎SEO優(yōu)化,然后再用Vue在前端渲染草娜,以提升頁面速度挑胸。
因?yàn)殇秩炯劝l(fā)生在前端,也發(fā)生在后端宰闰,所以我認(rèn)為學(xué)習(xí)Nuxt主要的難點(diǎn)在于生命周期茬贵,以前寫Vue的時(shí)候?qū)@個(gè)概念沒什么印象,但是在Nuxt中nuxtServerInit移袍、asyncData解藻、fetch、created葡盗、mouted等函數(shù)會(huì)讓我重新認(rèn)識(shí)了生命周期螟左。
為什么要用element
最開始我考慮的是iview,因?yàn)閮?nèi)心是拒絕接受element的戳粒,因?yàn)榘俣鹊臇|西一貫都做的很丑路狮。只是在實(shí)踐過程中虫啥,view雖然清新漂亮蔚约,但有個(gè)別多層選擇組件的內(nèi)部封裝比較混亂,導(dǎo)致不得不加大量判斷來控制涂籽,體驗(yàn)非常糟糕苹祟。所以在發(fā)現(xiàn)element可以個(gè)性定制以后,就轉(zhuǎn)到了element评雌。個(gè)性定制方案詳見:element組件樣式如何個(gè)性定制
為什么要用less
less預(yù)編譯器可以嵌套树枫、引入和定義通用變量,可以像管理程序一樣管理less景东,另外配合gulp砂轻,只需要少量的配置就可以轉(zhuǎn)換成小程序端和App端需要的格式,非常方便斤吐。
配置方案詳見:在微信小程序中使用gulp+less對(duì)wxss進(jìn)行構(gòu)建
為什么要用koa
自學(xué)的第6個(gè)月搔涝,學(xué)會(huì)了jQuery厨喂,然后開始學(xué)php,用了一個(gè)多月時(shí)間手?jǐn)]了一個(gè)庫存系統(tǒng)庄呈,那時(shí)候頁面dom與php混在一起蜕煌,還要寫一堆jQuery邏輯,簡(jiǎn)直痛不欲生诬留,由于不懂優(yōu)化斜纪,最終成品的訪問速度也極慢,頁面平均3s多才能打開文兑,十分低效盒刚。幾個(gè)月后,偶然發(fā)現(xiàn)了koa彩届,首先它只是一個(gè)中間層伪冰,只有文件、網(wǎng)絡(luò)和數(shù)據(jù)庫操作樟蠕,處理好數(shù)據(jù)之后返回贮聂,不需要寫展示界面,而且koa功能由npm擴(kuò)展寨辩,按需求加載吓懈,非常簡(jiǎn)潔,所以果斷棄坑php靡狞,改用koa
為什么要用echart
echart的核心思想是數(shù)據(jù)驅(qū)動(dòng)耻警,雖然配置項(xiàng)繁多復(fù)雜,但初始化一次之后甸怕,所需關(guān)心的只有series.data數(shù)組中的數(shù)據(jù)而已甘穿,可以非常方便的做數(shù)據(jù)可視化,他的三維gl插件基于canvas梢杭,在各端兼容性非常良好温兼,相比于D3和highChart,他的文檔也更加詳盡
為什么要用Vue和uniapp
和React相比武契,Vue顯然更簡(jiǎn)單易學(xué)一點(diǎn)募判,全家桶也完全能滿足基本需求,跨端的話也不需要像React那樣再去學(xué)一個(gè)Native咒唆,Vue完全符合實(shí)用届垫、成本低和通用性選型定位。而uniapp是vue全释、flex和H5+的結(jié)合體装处,自學(xué)的時(shí)候曾用他家的mui開發(fā)過安卓App,uniapp與mui一脈相承浸船,過渡曲線比較平滑妄迁。
為什么要用mongo
由于node是單進(jìn)程找前,不必?fù)?dān)心進(jìn)程間通信和死鎖問題,異步的消息隊(duì)列使他能處理更多的并發(fā)請(qǐng)求判族,同時(shí)由于cluster這個(gè)神器的加持躺盛,使得node可以多核部署,健壯性形帮、穩(wěn)定性和負(fù)載均衡都得以實(shí)現(xiàn)槽惫。所以與mySql相比,我認(rèn)為mongo更適合小型項(xiàng)目
為什么要用redis
在管理郵件注冊(cè)碼和用戶登錄狀態(tài)session時(shí)辩撑,由于要保持長(zhǎng)存儲(chǔ)界斜,如果在node中管理這些狀態(tài),會(huì)給系統(tǒng)內(nèi)存回收帶來極大的負(fù)擔(dān)合冀,所以考慮采用外部高速redis數(shù)據(jù)庫各薇,在保證系統(tǒng)響應(yīng)速度的同時(shí)有效避免內(nèi)存泄漏。
為什么要用阿里云OSS
騰訊云雖然操作簡(jiǎn)便直觀君躺,但對(duì)外開放的功能有限峭判,做微信小程序時(shí)他是神器,但其他的項(xiàng)目就不太樂觀了棕叫,阿里云雖然比較復(fù)雜林螃,但勝在功能全面,價(jià)格便宜俺泣,用戶基數(shù)也很大疗认。