1. 程式人生 > >其實,前端一點也不簡單

其實,前端一點也不簡單

大多人都認為前端開發是一個「相對於其他技術來說更簡單的技術」,在他們心中的前端工程師是這樣工作的:

  1. 把 Photoshop 檔案、圖片或者線框放進一個網頁;

  2. 偶爾設計 Photoshop 檔案、圖片或者線框;

  3. 用 JS 程式設計,為網頁製作動畫、過渡效果;

  4. 用 HTML 和 CSS 程式設計,確定網頁的內容和形式。

事實上,前端工程師在做的是:

  1. 在設計師和工程師之間建立視覺化的語言;

  2. 用視覺化的設計,定義一組代表內容、品牌和功能的元件;

  3. 為 Web 應用程式的公約、框架、需求、視覺化的語言和規格設定底線;

  4. 定義 Web 應用程式的裝置、瀏覽器、螢幕、動畫的範圍;

  5. 開發一個質量保證指南來確保品牌忠誠度、程式碼質量、產品標準;

  6. 為 Web 應用程式設定適當的行距、字型、標題、圖示、餘糧、填充等等;

  7. 為 Web 應用程式設定多種解析度的影象,裝置為主的實體模型,同時維護設計指南;

  8. 用 account semantics, accessibility, SEO, schemas ,microformats 標記 Web 應用程式;

  9. 用一種友好的,消耗小的,裝置和客戶端感知的方式連線 API,獲取內容;

  10. 開發客戶端程式碼來顯示流暢的動畫、過渡、延遲載入、互動、應用工作流程,大多數時間用來考慮漸進增強和向後相容的標準;

  11. 保證後臺連線安全,採取跨地資源共享(CORS)的程式考慮,防止跨站點指令碼(XSS)和跨站點請求偽造(CSRF) ;

  12. 最重要的是,儘管有嚴格的期限、利益相關者的要求,以及裝置的限制,無論現在還是將來永遠是「客戶第一」。

為了實現上述目標,前端工程師採用了從視覺化到程式設計的多種工具 ,甚至有時要照顧市場、 UX 到內容等等。

大量糟糕前端工程師的存在,擾亂了市場

這或許是難以招到優秀前端工程師最明顯的原因。由於前端工程師的入門門檻非常低,JS、CSS、HTML並不是很難入門掌握的語言,似乎只要花一點時間,無論是誰,都可以通過網上教程或者書本入門。對的,前端工程師市場就是被這些淺嘗輒止的傢伙搞壞的。

糟糕的前端工程師:

  1. JavaScript 類庫亂用,對 JavaScript 本身並不瞭解,什麼地方都用 jQuery;

  2. 濫用 JavaScript 外掛,看都不看看就把別人的程式碼拿過來用,比如說;

  3. 不看需求,不做任何的比較和測試,就把CSS 框架加到專案中,但只用了其中 5% 的功能;

  4. 認為添加個 CSS Framework,網站就可以變成“響應式的”,或者響應式就像是一些小作料,隨便就可以加入到一個網頁應用中;

  5. 嘴上喊著“響應式的 Web 設計”,但服務端技術一點都不懂;

  6. 編寫的 CSS 沒有任何規範標準,不使用任何前處理器,也沒有最佳實踐。CSS 程式碼中充滿了過度使用的選擇器、ID、神奇的數字以及 !important

  7. 不關心程式碼的效能和記憶體洩露(什麼是真正的記憶體洩露也不清楚),不會對程式碼進行效能測試;

  8. 對產品沒有任何的衡量指標,或者把“在我的電腦/瀏覽器/移動裝置上可以工作”為指標;

  9. 忽視30年的軟體工程實踐,毫無章法的開發軟體。

要知道,入門容易精通難,計算機和軟體的基礎對你用 JS 或瀏覽器程式設計都非常重要。web 可能是最有影響力的平臺和環境之一,在那裡執行的程式必須被小心對待。一位優秀的前端工程師不僅要考慮 web 技術和語言,並且還要了解所有不同的元件、系統和概念

頂級前端工程師需要具備的經驗和最佳實踐(這才是市場急需的前端):

  1. 瞭解 DNS 解析,充分利用 CDN,使用多個域名來完成資源的請求以縮短載入時間;

  2. 設定 HTTP Headers(Expires, Cache-Control, If-Modified-Since);

  3. 遵循 Steve Souders 給出的全部規則(High Performance Websites)

  4. 知道如何解決 PageSpeed、YSlow、Chrome Dev Tools Audit、Chrome Dev Tools Timeline 顯示的所有問題;

  5. 知道什麼任務該放在服務端,什麼任務該放在客戶端;

  6. 知道使用快取,DNS 預取和資源預載入技巧;

  7. 精通 JavaScript,知道何時自己寫何時借組別人的框架或程式碼,優劣明辨;

  8. 熟練使用現代 MVC JavaScript 框架(例如 AngularJS EmberJS React 等),圖形庫(D3、SnapSVG 等),DOM 操作類庫(jQuery、Zepto 等),惰性載入或者模組管理類庫(例如 RequireJS、CommonJS 等),任務呼叫工具(例如 Grunt Gulp 等),包管理工具(Bower Componentjs)以及測試工具(Protractor、Selenium 等);

  9. 掌握圖片的格式,每種格式的優點,適用的場景;知道圖片優化技巧以及載入策略(雪碧圖、懶載入、快取重新整理以及 PNG 交錯);

  10. 熟悉 CSS 標準、最新的轉換工具積極策略規範(比如 EDM、SMACSS、OOCSS 等);

  11. JavaScript 的電腦科學(記憶體管理、單程序特性、垃圾回收演算法、定時器、作用域、提升以及設計模式)。

換句話說,如果說精通 HTML+CSS+JS,瞭解後端知識,只是60分的合格前端;那麼要想成為受追捧、拿高薪的80分優秀前端,要對業務需求和、架構設計有真正的運用;而100分的頂級前端,則必須要能夠兼顧技術和設計,更接近「以前端開發為主的全棧工程師」了

市場不是缺少前端,而是缺少優秀的前端工程師

現在,前端工程師終於在 web 中佔有了一席之地。隨著多裝置、瀏覽器和Web標準的演變革命,前端正在成為兼顧邏輯、效能、互動、體驗的綜合性崗位

雖然現在網際網路行業普遍缺少前端工程師,但是我們相信越來越多的人將會加入前端的大軍。不僅是因為大多數前端工作提供的優渥薪水和辦公環境,也是因為web中的前端程式設計變得越來越有挑戰和意義。

加油吧,前端!