<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          工作兩年,你有沒(méi)有覺(jué)得很吃力?(干貨經(jīng)驗(yàn)分享)

          共 5392字,需瀏覽 11分鐘

           ·

          2021-05-10 15:04

          點(diǎn)擊上方“藍(lán)色字體”,選擇“設(shè)為星標(biāo)

          做積極向上的前端人!

          轉(zhuǎn)自:知乎

          https://www.zhihu.com/question/425782106/answer/1543007211

          前言

          前端工作兩年多。大部分前端原理、框架都能完全運(yùn)用。工作中幾乎遇不到解決不了的問(wèn)題(除了那些惡心無(wú)法實(shí)現(xiàn)的需求)現(xiàn)在經(jīng)常被安排去面試新人(被安排去面試,主要是工作能力比較突出的原因,公司還有很多3年以上的員工)。下面說(shuō)說(shuō)我的學(xué)習(xí)方法或許對(duì)你有用!

          一、打好基礎(chǔ)不用說(shuō)

          HTML、CSS、JavaScript 三大件,完全掌握。不懂得就直接查 MDN。HTML重點(diǎn)掌握語(yǔ)義化。區(qū)分塊級(jí)和內(nèi)聯(lián)標(biāo)簽。其他查文檔就好了。還有就是定義 head 里面一些meta 了解下。

          CSS。重點(diǎn)看盒子模型,定位,層級(jí),過(guò)渡,動(dòng)畫(huà)和 transform。知道原理和規(guī)則。大部分工作都是照著設(shè)計(jì)稿化。掌握上面幾個(gè)99%還原也不難。接下來(lái)重點(diǎn)學(xué)習(xí)幾種常見(jiàn)的布局。完了之后去搞flex。最后搞下sass、less。基本就差不多了。

          JavaScript。重點(diǎn)來(lái)了,紅寶書(shū)看一遍掌握基礎(chǔ),進(jìn)階去看《你不知道的 JavaScript》。就這兩套足夠了,別搞那么多。每個(gè)知識(shí)點(diǎn)搞懂。ES6基本沒(méi)啥問(wèn)題。下面幾個(gè)問(wèn)題優(yōu)搞懂,優(yōu)先級(jí)如下:

          • this 用法,相關(guān)原理
          • 原型/原型鏈
          • 閉包
          • 面向?qū)ο笙嚓P(guān)
          • 同步異步/回調(diào)/promise/async、await
          • 模塊化 CommonJS, AMD
          • 先搞這懂這些比較難的概念,對(duì)你JS理解更加深入。接下來(lái)在開(kāi)始看框架方面

          二、框架方面

          前期要會(huì)用,后期要懂原理。

          新人先搞 Vue。Vue 算是比較簡(jiǎn)單的框架了,上手容易。照著官方文檔來(lái)問(wèn)題不大。原理方面要提高自己認(rèn)識(shí)。學(xué)習(xí)怎么看源碼。github常去逛逛。

          學(xué)習(xí)框架之前,我其實(shí)特別建議,新人先去了解 Babel 和 webpack 不僅僅是使用。一些原理方面的東西工作中也會(huì)用到。babel 里面會(huì)有教你如何編譯代碼。webpack教你如和打包文件。自己手寫(xiě)編譯器和打包工具也不是特別難。反正對(duì)之后看vue、react源碼幫助挺大。

          搞完 Vue 全家桶,去了解下 React,React hooks 學(xué)習(xí)下新的理念。再回過(guò)頭來(lái)看Vue。你會(huì)發(fā)現(xiàn)他們是如此的相似去又不同。

          多去實(shí)踐總結(jié),對(duì)整體框架理解會(huì)越來(lái)越深刻。

          今天先馬到這里。想寫(xiě)的太多,馬上就要上班下次有空再來(lái)碼...

          三、如何看源碼

          新人剛開(kāi)始看源碼,會(huì)陷入兩個(gè)困境中。一是無(wú)從下手。二是看了之后感覺(jué)沒(méi)啥收獲。

          這個(gè)也很正常。一般我們熟知的框架都有個(gè)幾千甚至上萬(wàn)個(gè)PR。太大細(xì)節(jié)會(huì)干擾你。掌握整個(gè)節(jié)奏和流程。學(xué)習(xí)原理也比較吃力。就連找個(gè)入口都像大海撈針一樣。建議從下面幾個(gè)方面入手:

          • 挑簡(jiǎn)單的上手。別一開(kāi)始就搞 vue、react、webpack。太難,會(huì)直接勸退新人。不要為了面試而去讀。反而效果不好,面試稍微問(wèn)深入一點(diǎn)就答不出來(lái)了。平時(shí)有興趣多琢磨琢磨。按照難易程度,函數(shù)庫(kù) < 組件庫(kù) < 框架 < 工程化 分別典型代表 lodash < vant < vue < webpack
          • 手?jǐn)]簡(jiǎn)易模型。像vue, webpack, babel 都有簡(jiǎn)易項(xiàng)目給你擼。有的創(chuàng)始人(尤哥)還直播手?jǐn)]。國(guó)外的更多,youtube 一搜一大堆。就算不看源碼,照著寫(xiě)出了簡(jiǎn)易 demo 對(duì)原理和理解提升都是很大的。
          • 調(diào)試開(kāi)源項(xiàng)目。先把項(xiàng)目拉下來(lái)。在vscode里面跑下,核心函數(shù)多打幾個(gè)斷點(diǎn)。看看里面變量是怎么diff的。對(duì)理解更深刻了。

          看了源碼是別人的,學(xué)到了是自己的。學(xué)習(xí)時(shí)候邊記筆記,邊思考原理,總結(jié)經(jīng)驗(yàn)。下面來(lái)談?wù)勄岸斯こ袒趺磁?/p>

          四、前端工程化

          現(xiàn)在最流行的打包工具 webpack 用起來(lái)。當(dāng)然直接用 vue-cli2、vue-cli3、create-react 都是可以的。但是 webpack 相關(guān)還是得掌握。

          首先重點(diǎn)搞下babel、webpack。學(xué)習(xí)下編譯,打包的原理。自己配置下 webpack。嘗試自己去寫(xiě)下下 webpack 的 loader 和 plugin。學(xué)習(xí)這些之前要懂一點(diǎn) node.js, node.js 不需要全部學(xué)習(xí)。一般就日常用到讀寫(xiě)文件fs接口,path 路徑接口。這些 api 都不難寫(xiě)幾個(gè) demo 就懂了。基本上webpack 里面配置文件也沒(méi)用到多少 node 的東西。最后自己學(xué)會(huì)配置webpack的配置文件。

          如果想深想去優(yōu)化打包體積和速度,就需要去了解很多webpack插件。webpack 里面最核心的就是插件了。

          當(dāng)然前端工程化不僅僅是這些,CI/CD可持續(xù)集成, Umi 了解下。shell各種腳本自動(dòng)化命令、代碼生成技術(shù)了解下。

          五、性能優(yōu)化的方案

          一般來(lái)說(shuō)。性能優(yōu)化沒(méi)什么系統(tǒng)化的文檔供人學(xué)習(xí)。完全靠一些經(jīng)驗(yàn)和自己的實(shí)踐。

          我們常提到性能好壞是由什么來(lái)衡量呢?

          訪(fǎng)問(wèn)頁(yè)面地址 --> 頁(yè)面首次加載數(shù)據(jù) --> 渲染出完整頁(yè)面的時(shí)長(zhǎng)

          非首次情況下,命中緩存的加載緩存數(shù)據(jù) --> 渲染出完整頁(yè)面的時(shí)長(zhǎng)。

          一般我從下面幾個(gè)方面著手去做,一般問(wèn)題都不大。

          減小資源(靜態(tài)資源,后端加載的數(shù)據(jù))大小

          • 壓縮代碼HTML/CSS/JS
          • 壓縮圖片、音視頻大小
          • Tree-Sharking 消除無(wú)用代碼

          以上webpack都可以搞定

          避免同一時(shí)間的過(guò)多次數(shù)請(qǐng)求

          • CSS 實(shí)現(xiàn)雪碧圖:使用background-position共享一張圖
          • 圖片懶加載:監(jiān)聽(tīng)滾動(dòng)后offsetTop,  使用src 替換 src(真實(shí)路徑)
          • 列表懶加載(分批加載):監(jiān)聽(tīng)滾動(dòng)后offsetTop, 發(fā)送請(qǐng)求加載下一頁(yè)的數(shù)據(jù)
          • 路由懶加載
          • 代碼分包分塊加載(webpack)
          • 預(yù)加載技術(shù)
          • 小程序分包、預(yù)下載等。

          利用緩存(空間換時(shí)間)

          • CDN 內(nèi)容分發(fā):獲取更近網(wǎng)絡(luò)節(jié)點(diǎn)緩存下來(lái)的靜態(tài)資源
          • 瀏覽器緩存(自帶)
          • 部分資源保存在LocalStorage或者APP緩存中(手動(dòng)操作)

          其他

          • SSR 服務(wù)端渲染:解決SPA框架帶來(lái)JS動(dòng)態(tài)渲染頁(yè)面帶來(lái)的延遲和白屏問(wèn)題。

          這些都可以去實(shí)踐的,難度不大。難度大的地方可能是 dom 節(jié)點(diǎn)成千上萬(wàn)的時(shí)候渲染的性能問(wèn)題。這個(gè)場(chǎng)景遇到的很少,方案很多。不同人有不同解決方案,有功夫可以自己去嘗試嘗試。

          上面提到很多點(diǎn)都可以深入到很深。由于篇幅原因,點(diǎn)到即止。

          純粹是把一些我以前走過(guò)的彎路掰直了再分享給大家。畢竟不是《前端入門(mén)到精通》哈哈哈

          六、學(xué)習(xí)移動(dòng)端web開(kāi)發(fā)

          前端現(xiàn)在為什么這么火?各個(gè)公司都還挺缺優(yōu)秀的前端。原因在于技術(shù)紅利。

          移動(dòng)端web流行起來(lái)之后,特別是H5和小程序,帶動(dòng)了多少前端就業(yè),前端迅速取代了安卓和iOS 的大量崗位。

          回到正題:所以作為前端人,移動(dòng)web一般是都要接觸的。不同于PC 端。

          移動(dòng)端有哪些東西呢?不需要全部懂,差不多知道就行了。要用的時(shí)候再去學(xué)。

          • 絕對(duì)單位換相對(duì)單位:px => rem / vw / rpx
          • 彈性布局:使用flex、grid布局
          • hairline (1px的粗線(xiàn)處理):使用偽元素 + transform: scale(倍數(shù)) 縮放線(xiàn)框
          • WebView 環(huán)境了解下
          • 安卓iOS 兼容踩坑:點(diǎn)擊延遲、穿透、滾動(dòng)不流暢、安全區(qū)域等等。
          • 小程序開(kāi)發(fā)相關(guān)踩坑
          • JSBridge: H5 與App 通信
          • H5動(dòng)畫(huà)制作
          • 跨平臺(tái)框架:react native、weex、flutter 等等

          簡(jiǎn)單的說(shuō)移動(dòng)web 就是:html/css/js 跑在手機(jī)app 里面的WebView(web運(yùn)行環(huán)境)。

          小程序/公眾號(hào)就是在這個(gè)基礎(chǔ)上,將自己APP里面的WebView 租售給其他人使用。

          微信APP ----- 提供SDK ----> 微信webview ----- 提供運(yùn)行環(huán)境-----> 公眾號(hào)h5 / 小程序

          為什么微信可以容納幾乎無(wú)限的H5/小程序頁(yè)面呢?

          因?yàn)楣娞?hào)/小程序的代碼都存儲(chǔ)在云端,通過(guò)不同的路由就可以給幾乎無(wú)數(shù)的開(kāi)發(fā)者使用。

          使得微信成為一個(gè)運(yùn)行環(huán)境+入口的存在。

          七、做前端我有沒(méi)有覺(jué)得吃力?

          **剛做時(shí)前端不吃力。**因?yàn)槲沂擒浖こ虒?zhuān)業(yè),學(xué)前端之前,學(xué)過(guò) C/C++、Java、PHP、.net 成績(jī)還不錯(cuò)基本都是90多分。感覺(jué)自己干后端也不吃力。實(shí)驗(yàn)室里面的項(xiàng)目都是前后都寫(xiě)。最?lèi)?ài) PHP,當(dāng)時(shí)最崇拜鳥(niǎo)哥。本以為以后就走上PHP后端工程師的道路了,成為鳥(niǎo)哥那樣的大神。

          由于項(xiàng)目需要的原因,后來(lái)漸漸開(kāi)始學(xué)起學(xué) HTML、CSS、JavaScript 這些語(yǔ)法相關(guān)的東西。剛接觸時(shí)沒(méi)有感覺(jué)太大難度。

          當(dāng)時(shí)就想著怎么把頁(yè)面搞好看,搞各種動(dòng)畫(huà)炫技。寫(xiě)一個(gè)小球從下面彈出來(lái)的效果,換各種姿勢(shì)彈出。當(dāng)時(shí)覺(jué)得前端真的有意思,就入了前端的坑。入坑前,以為前端就是搞各種漂亮的頁(yè)面,各種特性驚艷別人。

          隨著接觸的越來(lái)越深。接觸到了 AJAX, jQuery ,Bootstrap,前端開(kāi)始注重體驗(yàn)。各種框架橫空出世 backbone => Angular => React => Vue 眼花繚亂。

          折騰了 JQuery 開(kāi)始折騰 backbone 覺(jué)得前端還能這樣玩。有些迷茫了,感覺(jué)腦袋快要炸了,那段時(shí)間特別焦慮,瘋狂看書(shū)寫(xiě)代碼,怎么這么多東西要學(xué)啊。

          JavaScript 也不精通,到原型就不理解了,雖然有C++,JAVA面向?qū)ο蟮闹R(shí),但JavaScript 你怎么和別人玩的不是一個(gè)套路啊。當(dāng)時(shí)就都用ES6了, 行,學(xué)。都用Sass了,行,學(xué)。不學(xué)也可以,看不懂別人的代碼呀。

          **畢業(yè)前為準(zhǔn)備校招前端工程師,真的很吃力。**就怕校招面試時(shí),自己啥都不懂。

          功夫不負(fù)有心人,校招時(shí)候順利拿到了自己滿(mǎn)意的Offer。記得當(dāng)時(shí)和面試官對(duì)答入流,好像找到知音一樣。面試官也是過(guò)來(lái)人,基本能問(wèn)的都問(wèn)了。

          拿到Offer之后就去了實(shí)習(xí)。實(shí)習(xí)第一個(gè)任務(wù):將一個(gè)ES6的后臺(tái)管理系統(tǒng)重構(gòu)成 Vue2.0 全家桶的項(xiàng)目。有個(gè)導(dǎo)師帶,但是她和我是不同項(xiàng)目,出了架構(gòu)以外代碼都是自己寫(xiě)。

          這個(gè)階段還是收獲了很多:

          • git 命令特別熟練。commit、stash、merge/rebase、cherry-pick、push/pull/fetch、reset等等基本都敲都特別多了
          • 嚴(yán)格了代碼規(guī)范。Eslint、prettier 都用起來(lái)了
          • 會(huì)自己寫(xiě)業(yè)務(wù)組件,會(huì)封裝高級(jí)組件、寫(xiě)常規(guī)頁(yè)面了。基本上大部分不是特別復(fù)雜的交互都o(jì)k。難一點(diǎn)多找下資料可以做出來(lái)。
          • 學(xué)會(huì)管理API了。自己嘗試封裝了 axios。統(tǒng)一處理錯(cuò)誤和彈窗。
          • 會(huì)抽取公共css、JavaScript 函數(shù),編寫(xiě)CSS 變量和JavaScript 常量了
          • webpack 能看懂配置文件了。

          實(shí)習(xí)過(guò)后順利轉(zhuǎn)正。轉(zhuǎn)正之后,換了另外一個(gè)導(dǎo)師帶,加入到項(xiàng)目組作為一個(gè)比較大的項(xiàng)目的核心開(kāi)發(fā)。基本不再做管理系統(tǒng)了。主要做一個(gè)saas 平臺(tái)。涉及比較難的富文本編輯,UI 拖拽生產(chǎn)文章,數(shù)據(jù)可視化生產(chǎn)報(bào)表等等。還寫(xiě)了幾個(gè)谷歌瀏覽器插件。

          • 開(kāi)始提升寫(xiě)頁(yè)面效率,寫(xiě)的比較快了。
          • 研究 webpack 的插件打包編譯效率
          • 研究 babel 編譯原理
          • 研究了 Vue 編譯的一些原理
          • 研究了 一些圖表的使用,多半使用的echart。常規(guī)圖表基本都用過(guò)。
          • CI & CD 自己去搭建。學(xué)了一些 shell 腳本開(kāi)發(fā)。研究了 docker 相關(guān)的東西。
          • 嘗試去寫(xiě)基礎(chǔ)組件,搭建基礎(chǔ)組件庫(kù)。
          • 學(xué)習(xí) React 相關(guān)的語(yǔ)法。
          • 研究富文本編輯,圖片壓縮裁剪原理等等
          • 寫(xiě)一個(gè)簡(jiǎn)單的微信公眾號(hào),接觸到了 H5 開(kāi)發(fā)。

          工作第一年,基本上主戰(zhàn)場(chǎng)在PC 端。**前半年挺吃力,后半年熟練后游刃有余。**會(huì)懟產(chǎn)品,會(huì)噴設(shè)計(jì),會(huì)和后端兄弟配合默契。和團(tuán)隊(duì)感情也很深了。

          無(wú)奈項(xiàng)目由于某些原因終止,團(tuán)隊(duì)解散,調(diào)到新團(tuán)隊(duì)。在老東家工作一年多后,由于個(gè)人原因離開(kāi)去了一家新的的公司,主戰(zhàn)場(chǎng)從PC 到了手機(jī)。開(kāi)始接觸移動(dòng)H5、hybrid 開(kāi)發(fā)。

          八、學(xué)習(xí)吃力的原因肯定是學(xué)習(xí)方法不太正確。總結(jié)下一般怎么才能真正學(xué)到東西

          • 詳略得當(dāng):前端知識(shí)太多,抓重點(diǎn)學(xué),不要像背字典一樣。
          • 不要急著寫(xiě)代碼,先理清流程(以一個(gè)函數(shù)為單位,可以先寫(xiě)注釋?zhuān)┰賹?xiě)代碼。
          • 看視頻看講解是會(huì)誤以為自己會(huì)了,其實(shí)并沒(méi)有。
          • 學(xué)會(huì)總結(jié):一句話(huà)可以講清楚的事情,不要多說(shuō)一句。減少心智負(fù)擔(dān)。
          • 不介意復(fù)制代碼,但是要知道這個(gè)代碼里面大致實(shí)現(xiàn)原理。感興趣自己重寫(xiě)一個(gè)。
          • 較大的項(xiàng)目,不要急著看代碼。可以先把項(xiàng)目跑起來(lái)。通過(guò)改代碼里面的參數(shù)來(lái)理解里面的核心流程。
          • demo 式編程。對(duì)于新框架,參考demo來(lái)上手更快更容易理解。
          • 漸進(jìn)式編程。對(duì)于比較復(fù)雜的功能/需求。不要想著一氣呵成。先實(shí)現(xiàn)一個(gè)核心,每次往上面加細(xì)節(jié),有點(diǎn)像繪畫(huà)。
          • 斷點(diǎn)單步調(diào)試很有用,定位bug會(huì)更快。當(dāng)然有些不易調(diào)試的應(yīng)用選擇打log。一次打 log 要多打點(diǎn),免得打完log,有得再加。
          • 黑盒太多的項(xiàng)目,實(shí)在找不到bug原因。發(fā)給同事幫忙看。可能很快就能看出來(lái)。當(dāng)局者迷,旁觀(guān)者清。(很多時(shí)候是拼寫(xiě)的問(wèn)題)

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码专区在线观看 | 国产日韩欧美在线影院 | 欧美性爱啪啪视频 | 伊人97 | 黄片高清 |