整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          同構 javascript 應用開發的最佳實踐(2)

          同構 javascript 應用開發的最佳實踐(2)

          些公司在使用同構 javascript, Yahoo、 Facebook、Netfix 和 Airbnb 這些都接受了同構 javascript。不過同構成本還是很高的,存在一定復雜度。如果對性能要求不高,也無需支持 SEO 需求,可以選擇使用 SPA 。同構 javascript 帶來的麻煩似乎要大于收益。

          同構的本質就是代碼復用。

          整個項目管理使用 gulp 工具進行管理,由于在服務端使用 nodejs 對模塊管理使用 CommonJS。而在瀏覽器端不是天生支持 CommonJS 模塊管理在 es6 中引入更優雅的模塊管理。但是在 nodejs 我知道階段可能還不支持 ES6 的模塊管理,所以使用 babel 這個編譯工具對我們服務端的 javascript 代碼進行轉換為 commonJS 模塊管理。

          這里有時候不會關于詳細演示如何使用某個具體的庫或框架,例如如何使用 gulp 來構建 javascript 的項目。更多的是關注整體框架是如何搭建的。


          定義開發流程


          引入構建工具 gulp


          var gulp=require('gulp');
          
          gulp.task('default',function(){
              console.log('default task sucess');
          })
          


          編譯編譯任務

          引入 babel 和 gulp-babel 的,并且需要 npm 對所需的庫進行已安裝,除此而外還需要全局安裝 gulp 和 babel-cli。編寫編譯任務來對服務端 js 使用 babel 編譯工具進行編譯。


          const gulp=require('gulp');
          const babel=require('gulp-babel');
          
          gulp.task('compile',function(){
              return gulp.src('src/**/*.js')
                  .pipe(babel())
                  .pipe(gulp.dest('dist'));
          });
          


          監聽代碼變化


          gulp.task('watch',()=>{
              gulp.watch('src/**/*.js',['watch'])
          })
          
          gulp.task('default',['watch','compile']);
          


          服務端代碼更新后重啟服務


          const nodemon=require('gulp-nodemon');
          const sequence=require('run-sequence');
          

          我們需要監控編譯好的 index.js ,當這個文件內容發生了變化就需要自動重啟服務。


          gulp.task('start',()=>{
              nodemon({
                  watch:'dist',
                  script:'dist/index.js',
                  ext:'js',
                  env:{'NODE_ENV':'development'}
              });
          });
          

          觀察的文件是編譯好的文件所以我們需要按一定執行順序來執行一系列的任務。


          gulp.task('default',(cb)=>{
              sequence(['watch','compile'],'start',cb);
          });
          

          好就是我們應用構建已經完成

          同構 javascript 應用開發的最佳實踐(1)



          參考 《同構 Javascript 應用開發》

          注于Java領域優質技術,歡迎關注

          作 者:Cherry300

          來 源:jianshu.com/p/c86cee16b418

          一、前戲

          前后端分離已成為互聯網項目開發的業界標準使用方式,通過nginx+tomcat的方式(也可以中間加一個nodejs)有效的進行解耦,并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務(多種客戶端,例如:瀏覽器,車載終端,安卓,IOS等等)打下堅實的基礎。這個步驟是系統架構從猿進化成人的必經之路。

          核心思想是前端html頁面通過ajax調用后端的restuful api接口并使用json數據進行交互。

          在互聯網架構中,名詞解釋:

          Web服務器:一般指像nginx,apache這類的服務器,他們一般只能解析靜態資源。

          應用服務器:一般指像tomcat,jetty,resin這類的服務器可以解析動態資源也可以解析靜態資源,但解析靜態資源的能力沒有web服務器好。

          一般都是只有web服務器才能被外網訪問,應用服務器只能內網訪問。

          二、術業有專攻(開發人員分離)

          以前的JavaWeb項目大多數都是java程序員又當爹又當媽,又搞前端,又搞后端。

          隨著時代的發展,漸漸的許多大中小公司開始把前后端的界限分的越來越明確,前端工程師只管前端的事情,后端工程師只管后端的事情。正所謂術業有專攻,一個人如果什么都會,那么他畢竟什么都不精。

          大中型公司需要專業人才,小公司需要全才,但是對于個人職業發展來說,我建議是分開。

          1、對于后端java工程師:

          把精力放在java基礎,設計模式,jvm原理,spring+springmvc原理及源碼,linux,mysql事務隔離與鎖機制,mongodb,http/tcp,多線程,分布式架構,彈性計算架構,微服務架構,java性能優化,以及相關的項目管理等等。

          后端追求的是:三高(高并發,高可用,高性能),安全,存儲,業務等等。

          2、對于前端工程師:

          把精力放在html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8引擎,javascript多線程,模塊化,面向切面編程,設計模式,瀏覽器兼容性,性能優化等等。

          前端追求的是:頁面表現,速度流暢,兼容性,用戶體驗等等。

          術業有專攻,這樣你的核心競爭力才會越來越高,正所謂你往生活中投入什么,生活就會反饋給你什么。并且兩端的發展都越來越高深,你想什么都會,那你畢竟什么都不精。

          通過將team分成前后端team,讓兩邊的工程師更加專注各自的領域,獨立治理,然后構建出一個全棧式的精益求精的team。

          三、原始人時代(各種耦合)

          幾曾何時,我們的JavaWeb項目都是使用了若干后臺框架,springmvc/struts + spring + spring jdbc/hibernate/mybatis 等等。

          大多數項目在java后端都是分了三層,控制層,業務層,持久層。控制層負責接收參數,調用相關業務層,封裝數據,以及路由&渲染到jsp頁面。然后jsp頁面上使用各種標簽或者手寫java表達式將后臺的數據展現出來,玩的是MVC那套思路。

          我們先看這種情況:需求定完了,代碼寫完了,測試測完了,然后呢?要發布了吧?你需要用maven或者eclipse等工具把你的代碼打成一個war包,然后把這個war包發布到你的生產環境下的web容器里,對吧?

          發布完了之后,你要啟動你的web容器,開始提供服務,這時候你通過配置域名,dns等等相關,你的網站就可以訪問了(假設你是個網站)。那我們來看,你的前后端代碼是不是全都在那個war包里?包括你的js,css,圖片,各種第三方的庫,對吧?

          好,下面在瀏覽器中輸入你的網站域名(www.xxx.com),之后發生了什么?(這個問題也是很多公司的面試題)我撿干的說了啊,基礎不好的童鞋請自己去搜。

          瀏覽器在通過域名通過dns服務器找到你的服務器外網ip,將http請求發送到你的服務器,在tcp3次握手之后(http下面是tcp/ip),通過tcp協議開始傳輸數據,你的服務器得到請求后,開始提供服務,接收參數,之后返回你的應答給瀏覽器,瀏覽器再通過content-type來解析你返回的內容,呈現給用戶。

          那么我們來看,我們先假設你的首頁中有100張圖片,此時,用戶的看似一次http請求,其實并不是一次,用戶在第一次訪問的時候,瀏覽器中不會有緩存,你的100張圖片,瀏覽器要連著請求100次http請求(有人會跟我說http長連短連的問題,不在這里討論),你的服務器接收這些請求,都需要耗費內存去創建socket來玩tcp傳輸(消耗你服務器上的計四、JSP的痛點

          以前的javaWeb項目大多數使用jsp作為頁面層展示數據給用戶,因為流量不高,因此也沒有那么苛刻的性能要求,但現在是大數據時代,對于互聯網項目的性能要求是越來越高,因此原始的前后端耦合在一起的架構模式已經逐漸不能滿足我們,因此我們需要需找一種解耦的方式,來大幅度提升我們的負載能力。

          1、動態資源和靜態資源全部耦合在一起,服務器壓力大,因為服務器會收到各種http請求,例如css的http請求,js的,圖片的等等。一旦服務器出現狀況,前后臺一起玩完,用戶體驗極差。

          2、UI出好設計圖后,前端工程師只負責將設計圖切成html,需要由java工程師來將html套成jsp頁面,出錯率較高(因為頁面中經常會出現大量的js代碼),修改問題時需要雙方協同開發,效率低下。

          3、jsp必須要在支持java的web服務器里運行(例如tomcat,jetty,resin等),無法使用nginx等(nginx據說單實例http并發高達5w,這個優勢要用上),性能提不上來。

          4、第一次請求jsp,必須要在web服務器中編譯成servlet,第一次運行會較慢。

          5、每次請求jsp都是訪問servlet再用輸出流輸出的html頁面,效率沒有直接使用html高(是每次喲,親~)。

          6、jsp內有較多標簽和表達式,前端工程師在修改頁面時會捉襟見肘,遇到很多痛點。

          7、如果jsp中的內容很多,頁面響應會很慢,因為是同步加載。

          8、需要前端工程師使用java的ide(例如eclipse),以及需要配置各種后端的開發環境,你們有考慮過前端工程師的感受嗎。

          基于上述的一些痛點,我們應該把整個項目的開發權重往前移,實現前后端真正的解耦!

          五、開發模式

          以前老的方式是:

          1、產品經歷/領導/客戶提出需求

          2、UI做出設計圖

          3、前端工程師做html頁面

          4、后端工程師將html頁面套成jsp頁面(前后端強依賴,后端必須要等前端的html做好才能套jsp。如果html發生變更,就更痛了,開發效率低)

          5、集成出現問題

          6、前端返工

          7、后端返工

          8、二次集成

          9、集成成功

          10、交付

          新的方式是:

          1、產品經歷/領導/客戶提出需求

          2、UI做出設計圖

          3、前后端約定接口&數據&參數

          4、前后端并行開發(無強依賴,可前后端并行開發,如果需求變求變更,只要接口&參數不變,就不用兩邊都修改代碼,開發效率高)

          5、前后端集成

          6、前端頁面調整

          7、集成成功

          8、交付

          六、請求方式

          以前老的方式是:

          1、客戶端請求

          2、服務端的servlet或controller接收請求(后端控制路由與渲染頁面,整個項目開發的權重大部分在后端)

          3、調用service,dao代碼完成業務邏輯

          4、返回jsp

          5、jsp展現一些動態的代碼

          新的方式是:

          1、瀏覽器發送請求

          2、直接到達html頁面(前端控制路由與渲染頁面,整個項目開發的權重前移)

          3、html頁面負責調用服務端接口產生數據(通過ajax等等,后臺返回json格式數據,json數據格式因為簡潔高效而取代xml)

          4、填充html,展現動態效果,在頁面上進行解析并操作DOM。

          總結一下新的方式的請求步驟:

          大量并發瀏覽器請求--->web服務器集群(nginx)--->應用服務器集群(tomcat)--->文件/數據庫/緩存/消息隊列服務器集群

          同時又可以玩分模塊,還可以按業務拆成一個個的小集群,為后面的架構升級做準備。

          七、前后分離的優勢

          1、可以實現真正的前后端解耦,前端服務器使用nginx。前端/WEB服務器放的是css,js,圖片等等一系列靜態資源(甚至你還可以css,js,圖片等資源放到特定的文件服務器,例如阿里云的oss,并使用cdn加速),前端服務器負責控制頁面引用&跳轉&路由,前端頁面異步調用后端的接口,后端/應用服務器使用tomcat(把tomcat想象成一個數據提供者),加快整體響應速度。(這里需要使用一些前端工程化的框架比如nodejs,react,router,react,redux,webpack)

          2、發現bug,可以快速定位是誰的問題,不會出現互相踢皮球的現象。頁面邏輯,跳轉錯誤,瀏覽器兼容性問題,腳本錯誤,頁面樣式等問題,全部由前端工程師來負責。接口數據出錯,數據沒有提交成功,應答超時等問題,全部由后端工程師來解決。雙方互不干擾,前端與后端是相親相愛的一家人。

          3、在大并發情況下,我可以同時水平擴展前后端服務器,比如淘寶的一個首頁就需要2000+臺前端服務器做集群來抗住日均多少億+的日均pv。(去參加阿里的技術峰會,聽他們說他們的web容器都是自己寫的,就算他單實例抗10萬http并發,2000臺是2億http并發,并且他們還可以根據預知洪峰來無限拓展,很恐怖,就一個首頁。。。)

          4、減少后端服務器的并發/負載壓力。除了接口以外的其他所有http請求全部轉移到前端nginx上,接口的請求調用tomcat,參考nginx反向代理tomcat。且除了第一次頁面請求外,瀏覽器會大量調用本地緩存。

          5、即使后端服務暫時超時或者宕機了,前端頁面也會正常訪問,只不過數據刷不出來而已。

          6、也許你也需要有微信相關的輕應用,那樣你的接口完全可以共用,如果也有app相關的服務,那么只要通過一些代碼重構,也可以大量復用接口,提升效率。(多端應用)

          7、頁面顯示的東西再多也不怕,因為是異步加載。

          8、nginx支持頁面熱部署,不用重啟服務器,前端升級更無縫。

          9、增加代碼的維護性&易讀性(前后端耦在一起的代碼讀起來相當費勁)。

          10、提升開發效率,因為可以前后端并行開發,而不是像以前的強依賴。

          11、在nginx中部署證書,外網使用https訪問,并且只開放443和80端口,其他端口一律關閉(防止黑客端口掃描),內網使用http,性能和安全都有保障。

          12、前端大量的組件代碼得以復用,組件化,提升開發效率,抽出來!

          八、注意事項

          1、在開需求會議的時候,前后端工程師必須全部參加,并且需要制定好接口文檔,后端工程師要寫好測試用例(2個維度),不要讓前端工程師充當你的專職測試,推薦使用chrome的插件postman或soapui或jmeter,service層的測試用例拿junit寫。ps:前端也可以玩單元測試嗎?

          2、上述的接口并不是java里的interface,說白了調用接口就是調用你controler里的方法。

          3、加重了前端團隊的工作量,減輕了后端團隊的工作量,提高了性能和可擴展性。

          4、我們需要一些前端的框架來解決類似于頁面嵌套,分頁,頁面跳轉控制等功能。(上面提到的那些前端框架)。

          5、如果你的項目很小,或者是一個單純的內網項目,那你大可放心,不用任何架構而言,但是如果你的項目是外網項目,呵呵噠。

          6、 以前還有人在使用類似于velocity/freemarker等模板框架來生成靜態頁面,仁者見仁智者見智。

          7、這篇文章主要的目的是說jsp在大型外網java web項目中被淘汰掉,可沒說jsp可以完全不學,對于一些學生朋友來說,jsp/servlet等相關的java web基礎還是要掌握牢的,不然你以為springmvc這種框架是基于什么來寫的?

          8、如果頁面上有一些權限等等相關的校驗,那么這些相關的數據也可以通過ajax從接口里拿。

          9、對于既可以前端做也可以后端做的邏輯,我建議是放到前端,為什么?因為你的邏輯需要計算資源進行計算,如果放到后端去run邏輯,則會消耗帶寬&內存&cpu等等計算資源,你要記住一點就是服務端的計算資源是有限的,而如果放到前端,使用的是客戶端的計算資源,這樣你的服務端負載就會下降(高并發場景)。類似于數據校驗這種,前后端都需要做!

          10、前端需要有機制應對后端請求超時以及后端服務宕機的情況,友好的展示給用戶。

          九、擴展閱讀

          1、其實對于js,css,圖片這類的靜態資源可以考慮放到類似于阿里云的oss這類文件服務器上(如果是普通的服務器&操作系統,存儲在到達pb級的文件后,或者單個文件夾內的文件數量達到3-5萬,io會有很嚴重的性能問題),再在oss上配cdn(全國子節點加速),這樣你頁面打開的速度像飛一樣, 無論你在全國的哪個地方,并且你的nginx的負載會進一步降低。

          2、如果你要玩輕量級微服務架構,要使用nodejs做網關,用nodejs的好處還有利于seo優化,因為nginx只是向瀏覽器返回頁面靜態資源,而國內的搜索引擎爬蟲只會抓取靜態數據,不會解析頁面中的js,這使得應用得不到良好的搜索引擎支持。同時因為nginx不會進行頁面的組裝渲染,需要把靜態頁面返回到瀏覽器,然后完成渲染工作,這加重了瀏覽器的渲染負擔。瀏覽器發起的請求經過nginx進行分發,URL請求統一分發到nodejs,在nodejs中進行頁面組裝渲染;API請求則直接發送到后端服務器,完成響應。

          3、如果遇到跨域問題,spring4的CORS可以完美解決,但一般使用nginx反向代理都不會有跨域問題,除非你把前端服務和后端服務分成兩個域名。JSONP的方式也被淘汰掉了。

          4、如果想玩多端應用,注意要去掉tomcat原生的session機制,要使用token機制,使用緩存(因為是分布式系統),做單點,對于token機制的安全性問題,可以搜一下jwt。

          5、前端項目中可以加入mock測試(構造虛擬測試對象來模擬后端,可以獨立開發和測試),后端需要有詳細的測試用例,保證服務的可用性與穩定性。

          十、總結

          前后端分離并非僅僅只是一種開發模式,而是一種架構模式(前后端分離架構)。千萬不要以為只有在擼代碼的時候把前端和后端分開就是前后端分離了,需要區分前后端項目。前端項目與后端項目是兩個項目,放在兩個不同的服務器,需要獨立部署,兩個不同的工程,兩個不同的代碼庫,不同的開發人員。

          前后端工程師需要約定交互接口,實現并行開發,開發結束后需要進行獨立部署,前端通過ajax來調用http請求調用后端的restful api。前端只需要關注頁面的樣式與動態數據的解析&渲染,而后端專注于具體業務邏輯。

          4、如果想玩多端應用,注意要去掉tomcat原生的session機制,要使用token機制,使用緩存(因為是分布式系統),做單點,對于token機制的安全性問題,可以搜一下jwt。


          最近無意中發現了一個巨牛的人工智能教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看小說一樣!覺得太牛了,所以分享給大家。點下面鏈接可以跳轉到教程。

          https://www.captainbed.net/suga

          者 | 六小登登

          責編 | 屠敏

          從 2013 年專科畢業開始,一路跌跌撞撞走了很多彎路,做過餐廳服務員,進過工廠干過流水線,做過客服,干過電話銷售可以說經歷相當的“豐富”。

          最后的機緣巧合下,走上了前端開發之路,作為一個非計算機專業且低學歷的人來說,自學編程其實不是件容易的事情,不過慶幸的是自己堅持下來了。

          目前工作還算不錯,收入在目前所在的城市不算高,不算低,生活也還過得去,繼續加油努力,也希望自己在今后更上一層。

          從 2016 年下半年開始,我真正接觸前端,到現在 2 年多的時間。開始之初,我沒有任何的語言基礎,完全從零的小白開始,就連「對象」我都弄不明白,更別說那些高深莫測的什么封裝、繼承、多態等。

          當時自己也不知從何入手,怎么辦呢?于是每當自己遇到困難時,就厚著臉皮去請教前輩大牛,然后就是去查閱資料,很多時候自己也很覺得不好意思,現在才發現人很多時候都恥于相別人請教,怕自己丟面子。

          但作為一個過來人,我要告訴你請教前輩大牛真的很重要,可以讓你少走很多的彎路,不要怕丟人,沒面子,面子值幾個錢?學到真本事才最重要。沒有技能才叫真的沒有面子。當然了我們在請教別人時,一定要掌握「度」,不要打擾到了別人的工作。

          我現在非常感謝前輩們的賜教,也感謝那些在網上寫博客、文章分享的大牛們,給了我們這些自學的小白很多的資料,經驗,心得。從中受益很多。

          向優秀的前輩們學習,我開始寫博客,希望也能幫到和我一樣,學渣、從零開始、喜歡技術的一群志同道合的人。

          我深知自己的技術并不高,還處在繼續學習的路上,離大牛還差的很遠,我本身也非常敬畏技術,也知道自己的渺小,只希望這篇文章的「學習之路」對于那些「從零開始」學習前端的同學有一些指引作用,不像自己一開始那樣的那么盲目,哪怕對你有一點點的幫助,就足夠了。

          說了這么多,下面我們直接進入正題,都是我平時學習和收集的一些資料希望能夠幫到你。

          前言

          1. 首先我得告訴你,自學是件很苦的事情,學習本身就是件反人性的過程,更何況在一個從零開始的全新領域獨自奮斗,這里不是要打擊你,而是要你認真想好,結合自身的環境、條件。不然半途而廢浪費的不僅是時間,還有精力、金錢。
          2. 如果你已經想好決定去做,那就不要猶豫,堅持下去你就可以成功,像我這樣的學渣都可以,你沒有什么不可以的,一定要相信自己。
          3. 興趣是最好的老師,很多人對這句話非常反感,被生活所迫,談興趣不可笑嗎?其實不是,問問自己對技術有沒有興趣,做自己喜歡和感興趣的事情才能夠走的更遠和更久,很多人不理解這一點,總有一天你會明白的,我當時轉前端的時候也是因為自己挺喜歡,而且最接近用戶,都是所見所得的東西很好玩,另外一方面也覺得工資也挺高,所以自己打心里覺得做前端挺好。
          4. 做好持續學習,時刻保持學習的心態,說實話現在社會,科技的發展非常之快,技術的更新更是如此,如果你覺得學習一門技術就可以吃到老,我勸你還是打住,可能考個公務員更適合你(不要杠精,我并不是說公務員不要學習,自己體會就好)。
          5. 永遠不要覺得遲,只要行動然后堅持下去,你就干掉了 80% 的人,自學的人很多,但是堅持下來的沒有幾個。就像郭德綱說過,不是我的相聲說的多好而是我活了下來。著名營銷人員「小馬宋」畢業時燒了很多年的鍋爐,但是自己對廣告營銷感興趣,所以離職從零開始,現在已經是很有名的營銷大師。
          6. 與其把時間花在學與不學的糾結上,不如把這個時間放在行動上,如果發現自己不合適也堅持不下去,那就換個賽道,專注的去做一件事情,會提高你的成功概率。

          工具篇

          工欲善其事,必先利其器,所以在開始之前選擇一個合適好用的編輯器是很重要的,工具不再多,在于好用就行,除了編輯器,我們也要掌握其他的一些工具,才能夠讓我們在學習的道路上更加的順暢。

          1. WebStorm

          不必多說,前端最強大的編輯器,特別是那無敵的智能提示,但是它的缺點在于如果項目多于大時,出現的卡頓讓很多人苦惱。

          • WebStorm 官網下載地址:https://www.jetbrains.com/webstorm/。
          • WebStorm 有哪些過人之處?(https://www.zhihu.com/question/20936155)
          • 激活 WebStorm2018(https://blog.csdn.net/qq_32135281/article/details/82696280)

          2. Visual Studio Code

          微軟開源免費產品,受到非常多技術人員的喜愛,基本上成為前端開發者的必備編輯器,強大的插件擴展,可以靈活的打造自己喜歡的風格。給你們送上常用插件列表拿走不謝。

          • Visual Studio Code 官網下載地址:https://code.visualstudio.com/。
          • VSCode 拓展推薦:https://github.com/varHarrie/varharrie.github.io/issues/10
          • 使用頂級 VSCode 擴展來加快開發 JavaScript:https://www.html.cn/archives/9507
          • vscode 插件推薦:https://segmentfault.com/a/1190000006697219

          3. atom

          也是一款免費開源的編輯器,受到很多人的喜愛,但是我本人用的較少,所以插件方面就不推薦了,大家可以按照自己的愛好去尋找。

          4. 科學上網

          每個程序員都應該具備的工具和能力,否則很多事情都無法辦到,至于怎么做,你可以自己查閱資料,這里不就不在多說了。而且下面推薦的很多資源都是需要科學上網之后才能訪問,所以一定要學會。

          5. Google

          在使用「Google」之前必須學會科學上網,不然無法訪問,學會使用搜索可以幫助我們解決很多問題,一個人的知識是有限的,掌握了搜索的技巧才能以不變應萬變,很多時候百度出來的東西重復性很大,最重要的是垃圾信息很多,在百度找不到的答案,在這里很容易找到,Google 是我的必備搜索。

          6. Github

          全球最大的「同性」開源交流社區,沒有賬號的趕緊注冊,在這有很多優秀的資源項目,各種大神。觀摩優秀代碼是我們學習的很好路徑。另外在開發過程中,很多時候任務重、時間緊,應該避免重復造輪子,這里能夠找到你需要的工具或代碼。

          7. Stack Overflow

          國外著名的技術問答交流社區,開發時碰到的很多問題在這里都能找到答案。

          8. SegmentFault

          對應的國內版的技術問答交流社區,如果你英文不好,也可以在這里找找答案。

          9. Markdown

          Markdown 輕量級標記語言,簡潔的語法,讓作者專注內容而非復雜的格式要求,我認為人人都應該掌握,特別是經常寫博客的人。想想你在用 world 時的場景,每次寫完文章之后,不得不話費很多時間進行格式的排版,使用它你就可以避免這些煩惱。

          • Markdown 中文文檔:https://markdown-zh.readthedocs.io/en/latest/

          HTML 篇

          一些準備就緒之后,開始我們的學習之旅,首先我們先從 HTML 開始。

          HTML名為「超文本標記語言」,是整個頁面的結構基礎,它承載了我們的頁面內容。

          1. 基礎

          • w3school 在線教程(http://www.w3school.com.cn/h.asp):內容非常的基礎,適合小白學習,對 HTML 有一個入門了解。
          • freeCodeCamp(https://www.freecodecamp.cn/):一個非常好的入門學習網站,采用闖關的模式,就像游戲打怪升級一樣,非常的有樂趣,準備自學的小伙伴不妨試試。

          2. 進階

          • MDN HTML(https://developer.mozilla.org/zh-CN/docs/Web/HTML):這里的內容質量更好,錯誤更少,內容也更加的全面。
          • HTML 和 CSS 編碼規范(https://codeguide.bootcss.com/):掌握一些代碼技巧,寫出更好,更高質量的代碼。

          CSS 篇

          HTML 承載了頁面的內容,但是有時候會略顯單調與「丑陋」,CSS 的作用就是為這些內容加上樣式,就像一個美女也要有漂亮的外衣去修飾才會更加漂亮,「人靠衣裝馬靠鞍」,網頁的內容也是需要穿上一件漂亮的外衣去吸引用戶。而 CSS 則完成了這個裝飾。

          1. 基礎

          • 學習 CSS 布局(http://zh.learnlayout.com/):帶你一步一步的完成 CSS 的學習。
          • CSS 參考手冊(https://css.doyoe.com/):對CSS可以有一個全面入門的學習。
          • w3school CSS 參考手冊(http://www.w3school.com.cn/cssref/index.asp):同上也是非常基礎的知識,適合入門。

          2. 進階

          書籍:

          《CSS揭秘》(https://book.douban.com/subject/26745943/):非常推薦的一本 CSS 書籍,可以學到很多鮮為人知的技巧。

          在線系列:

          • MDN CSS(https://developer.mozilla.org/zh-CN/docs/Web/CSS):和 HTML 都是 MDN 社區文檔,質量保障。
          • HTML和CSS編碼規范(https://codeguide.bootcss.com/):掌握一些代碼技巧,寫出更好,更高質量的代碼。
          • 大漠老師的CSS系列(https://www.w3cplus.com/CSS3):大漠老師對CSS有非常深入的認識和豐富的實踐經驗,《圖解CSS3:核心技術與案例實戰》的作者。
          • 大漠老師的SASS系列(https://www.w3cplus.com/blog/tags/302.html):大漠老師的 sass 文章系列。
          • SASS中文網(https://www.sasscss.com/):成熟、穩定、強大的 CSS 擴展語言解析器,它可以讓你使用變量,條件語句等書寫 CSS。
          • Stylus官網(https://stylus.bootcss.com/):同樣是 CSS 預編譯器,但它省去了一些符號,讓 CSS 寫起來更加的簡潔,清爽。
          • HTML5和CSS3(https://github.com/qianguyihao/Web/tree/master/07-HTML5%E5%92%8CCSS3):詳解HTML5 和 CSS3。

          知識點:

          • 別說你懂CSS相對單位(http://wuyuying.com/blog/archives/css-in-depth-relative-units/):深入了解 CSS 的相對單位rem,em區別。
          • CSS 進階內容(https://github.com/coconilu/Blog/issues/29):常見知識點的深入了解。
          • Flex 布局教程:語法篇(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html):阮一峰老師的flex講解。
          • Flex 布局教程:實例篇(http://www.ruanyifeng.com/blog/2015/07/flex-examples.html):阮一峰老師的flex講解。
          • “CSS相關”目錄存檔(https://www.zhangxinxu.com/wordpress/category/css/):張鑫旭大佬的CSS系列文章,深入淺出,《CSS世界》作者。
          • CSS繪制的40種形狀和圖形(http://www.open-open.com/lib/view/open1476240478941.html):利用CSS繪制出的40各種圖形形狀。
          • CSS-大前端(http://www.daqianduan.com/tag/css):一些 CSS 的知識點。

          JavaScript 篇

          有了 HTML 與 CSS,網頁也就有了內容和樣式,但是會缺少與用戶的互動,所有的內容都靜靜的躺在那里死氣沉沉。就好比一個美女穿著漂亮的衣服在你面前一動不動好像也沒有什么吸引力,但如果又唱歌,又跳舞,還向你拋媚眼,那可真就把持不住了。JavaScript 就是給網頁添加這樣的「行為」。

          Javascript 簡史(https://blog.csdn.net/qq_32135281/article/details/81667714):可以簡單了解下,JavaScript 發展由來。

          1. 基礎

          書籍

          • 《JavaScript權威指南 (第6版)》(https://book.douban.com/subject/10549733/):俗稱「犀牛書」,JS 的經典之作,提升JS技能的必備書籍,我的JS基礎知識全都是啃這本書啃下來的,剛開始讀時可能有會有些吃力,但是只要堅持下來收獲滿滿。
          • 《JavaScript高級程序設計(第3版)》(https://book.douban.com/subject/10546125/):俗稱「紅寶書」,JavaScript 超級暢銷書,全書闡述了JavaScript語言實現的各個組成部分,ECMAScript,DOM,BOM,事件,面向對象等等,隨時拿出來翻翻,更加深入了學習 JS。

          在線系列

          除了書籍之外,也有很多優秀的在線教程,可以幫助我們更好的學習。

          • 現代 Javascript 教程(https://zh.javascript.info/):非常全面的JavaScript 學習教程,從基礎到高階,非常詳細,相信你會愛上它的。
          • 廖雪峰的JavaScript教程(https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000):廖雪峰系列教程。
          • JavaScript 標準參考教程(alpha)(https://javascript.ruanyifeng.com/):阮一峰老師的系列教程,通俗易懂,案例豐富。

          2. 進階

          • JavaScript語言精粹(https://github.com/qibaoguang/Study-Step-by-Step/blob/master/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/javascript_the_good_parts.md):揭示JavaScript中的精華。
          • JavaScript 秘密花園(http://bonsaiden.github.io/JavaScript-Garden/zh/#other.timeouts):對 JS 一些的核心知識點進行梳理講解,例如:this,閉包/作用域,構造函數,原型等等,都是面試必考知識點。
          • ECMAScript 6 入門(http://es6.ruanyifeng.com/):阮一峰老師ES6入門書籍,全面介紹 ECMAScript 6 新引入的語法特性。
          • JavaScript使用技巧(http://www.jstips.co/zh_CN/):可以認識到一些你平時沒有接觸過的小技巧。
          • 深入理解javascript原型和閉包系列(http://www.cnblogs.com/wangfupeng1988/p/4001284.html):詳細解釋了原型和閉包,看完之后對原型與閉包讓你徹底明白。
          • 大漠老師的JavaScript系列(https://www.w3cplus.com/JavaScript):大漠老師的JavaScript系列文章。
          • JavaScript 算法與數據結構(https://github.com/trekhleb/javascript-algorithms/blob/master/README.zh-CN.md):基于 JavaScript 的算法與數據結構,讓你愉快的學習。
          • JavaScript中的正則表達式(https://blog.csdn.net/qq_32135281/article/details/78274563):我自己的一篇正則表達式的文章,希望對你有幫助。
          • 30分鐘掌握ES6/ES2015核心內容(上)(https://segmentfault.com/a/1190000004365693)
          • 30分鐘掌握ES6/ES2015核心內容(下)(https://segmentfault.com/a/1190000004368132):闡述了一些常用的ES6的知識點。
          • 學用 JavaScript 設計模式(https://www.oschina.net/translate/learning-javascript-design-patterns):闡述JavaScript編程語言中經典和現代的設計模式。
          • 你不懂JS(系列叢書)(https://github.com/getify/You-Dont-Know-JS/tree/1ed-zh-CN)
          • InterviewMap(https://yuchengkai.cn/docs/frontend/#%E5%86%85%E7%BD%AE%E7%B1%BB%E5%9E%8B):聚集了很多知識點,包括JS,瀏覽器,性能等。
          • 30 秒就能理解的 JavaScript 代碼片段(https://www.html.cn/30-seconds-of-code/):讓你更好的理解一些有用的JS代碼片段。

          TypeScript篇

          ES6 的超集擴展,嚴格的數據類型,帶來更好的維護,適合大型項目的開發工作,有人說它是未來的發展趨勢,你說要不要了解?

          • TypeScript 中文手冊(https://typescript.bootcss.com/):官網翻譯版。
          • TypeScript Handbook(中文版)(https://zhongsp.gitbooks.io/typescript-handbook/content/):中文版。
          • RxJS 中文文檔(https://cn.rx.js.org/):中文官網。
          • 30 天精通 RxJS (01):認識 RxJS(https://ithelp.ithome.com.tw/articles/10186104):繁體字可能閱讀起來并沒有那么順暢。

          Jquery篇

          雖說現在已經是單頁面應用時代,有React,Vue 這種強大的框架可以使用,但也不缺乏一些老的項目需要維護,而且在學習之初,可以用它做兩個簡單的應用還是不錯的,可以相對了解下基本用法,它可以讓你更好,更方便的操作DOM。但不建議再深度學習。

          • 《鋒利的jQuery(第2版)》(https://book.douban.com/subject/10792216/):一本很不錯的 Jquery 學習書籍。
          • jQuery API中文文檔(https://www.jquery123.com/):JQuery 中文教程。

          Ajax篇

          掌握了的HTML、CSS、JavaScript時,這時候可以嘗試自己做一些項目了,而項目中肯定會有數據的交互,這時候就是 Ajax 的用武之地了。

          • 廖雪峰AJAX(https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499861493e7c35be5e0864769a2c06afb4754acc6000):廖雪峰大佬的博客知識。
          • XMLHttpRequest 對象(https://wangdoc.com/javascript/bom/xmlhttprequest.html):阮一峰老師的AJAX詳解。
          • JSON風格指南(https://github.com/liuxiaodeng/free-programming-books/blob/master/free-programming-books-zh.md#javascript):前后端的交互數據通常都是 JSON 格式,所以了解 JSON 是必要的。

          NodeJS與模塊化

          NodeJs 的出現讓前端發展進入了一個新的領域,并且滋生出專業的 Node 工程師,不僅如此 Node 在前端模塊化,工程化起到很重要的作用,所以了解是必須的,如果感興趣的可以深入學習,可以向全棧工程師發展。

          • Javascript模塊化編程(一)(http://www.ruanyifeng.com/blog/2012/10/javascript_module.html):模塊的寫法
          • Javascript模塊化編程(二):AMD規范
          • Javascript模塊化編程(三):require.js的用法
          • 前端模塊化開發那點歷史(https://github.com/seajs/seajs/issues/588):了解下,前端模塊化的發展。
          • Node.js 官方(https://nodejs.org/zh-cn/)
          • 狼叔:如何正確的學習Node.js(https://github.com/i5ting/How-to-learn-node-correctly):狼叔江湖地位頗高,《更了不起的 Node.js》的作者。
          • 全棧工程師之路-Node.js(http://i5ting.github.io/nodejs-fullstack/)

          框架篇

          隨著日益復雜的用戶需求,與系統的復雜度上升,傳統的開發模式日漸的很難滿足,此時的三大框架孕育而生,讓開發者更加高效,可復用,把關注點都放在數據層的操作,免去那些繁瑣而又重復的視圖操作。

          現在框架的能力已經是前端開發人員必備的技能之一也是趨勢,三大框架的「最終目的」都是一致的,我認為開發者不必糾結于到底應該選擇哪一個學習,可以選擇其中的兩個是最好的。對于剛入門的人來說,建議選擇 Vue 入手,比較簡單,靈活。

          • MVC,MVP 和 MVVM 的圖示(http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html):在學習框架之前,你應該了解下MVVM的設計思想。
          • 框架原理(https://yuchengkai.cn/docs/frontend/framework.html):了解一些框架的基本原理。

          1. Angular

          • Angular(https://angular.cn/):Angular官方社區。
          • Angular開發者(http://www.ngfans.net/):大漠窮秋老師維護的站點,Angular中國布道者。
          • NG-ZORRO(https://ng.ant.design/docs/introduce/zh#%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83):Angular UI 組件庫,阿里巴巴出品。

          2. Vue

          • Vue(https://cn.vuejs.org/index.html):官網,最好的學習資料。
          • 我的Vue進階之路(https://blog.csdn.net/qq_32135281/column/info/29689)
          • 使用vue全家桶制作博客網站(https://www.cnblogs.com/xiaohuochai/p/9228543.html)
          • Element(http://element-cn.eleme.io/#/zh-CN):一個高質量的 Vue UI 組件庫。餓了么前端團隊出品。
          • Vue 項目里戳中你痛點的問題及解決辦法(更新)(https://juejin.im/post/5b174de8f265da6e410e0b4e):做項目難免回去到坑,這里你或許可以找到答案。

          3. React

          React我了解不多,所以就沒什么好推薦的了,大家可自行學習。

          • React官網(https://www.reactjscn.com/)

          圖形可視化

          隨著日益增長的數據,如何利用高效的利用數據,是每個企業都考慮的問題,而人的眼睛看到的東西要勝過閱讀的問題,俗話說「一圖勝千言」就是這個道理,所以數據的可視化就會格外的重要,以下都是我常看的一些技術,書籍,和關注的可視化開源庫。

          • 《HTML5 Canvas核心技術》(https://book.douban.com/subject/24533314/):學習 Canvas 比較好的一本書籍。
          • Canvas系列(https://www.w3cplus.com/search/node/canvas):大漠老師的 Canvas 系列。
          • Echarts(https://www.echartsjs.com/index.html)
          • D3(https://d3js.org/)
          • Highcharts(https://www.highcharts.com.cn/)
          • AntV(https://antv.alipay.com/zh-cn/index.html)
          • Mapv(https://mapv.baidu.com/)

          工程化與版本控制篇

          1. Git

          版本控制工具,很多新手往往把 git 與 github 傻傻分不清楚,二者是不同的東西,一定要去區分清楚。

          • Git教程(https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000):廖雪峰老師的教程。
          • Learn Git Branching(https://learngitbranching.js.org/):一種有趣的學習 Git 的方式。
          • GitHub 漫游指南(https://github.com/phodal/github):作者是一個極客。
          • git - 簡易指南:http://www.bootcss.com/p/git-guide/

          2. Gulp

          自動化構建工具,項目打包部署前的壓縮合并,節省時間,提高開發效率。

          • Gulp 中文網(https://www.gulpjs.com.cn/):官方教程。
          • gulp詳細入門教程(http://www.ydcss.com/archives/18):非常詳細的實現步驟。

          3. Webpack

          Webpack 是當下最熱門的前端資源模塊化管理和打包工具。它可以將許多松散的模塊按照依賴和規則打包成符合生產環境部署的前端資源。

          • Webpack中文文檔:https://www.webpackjs.com/
          • webpack原理:https://juejin.im/entry/5b0e3eba5188251534379615
          • Webpack揭秘——走向高階前端的必經之路:https://juejin.im/post/5badd0c5e51d450e4437f07a
          • Webpack HMR 原理解析:https://zhuanlan.zhihu.com/p/30669007
          • webpack 熱加載原理探索:http://shepherdwind.com/2017/02/07/webpack-hmr-principle/

          4. Babel

          JavaScript代碼編譯器,可以讓ES6及以上語法轉換成瀏覽器支持的語法,一般會在框架的腳手架中自行配置。

          • Babel(https://babel.bootcss.com/):官網教程。

          5. 代碼質量

          • ESLint(https://eslint.bootcss.com/):javascript代碼檢測工具幫助我們寫出更規范的代碼。

          瀏覽器與HTTP

          • 瀏覽器的常見知識點(https://yuchengkai.cn/docs/frontend/browser.html):需要我們了解的常見知識。
          • 網站安全(https://yuchengkai.cn/docs/frontend/safety.html):幾種常見安全問題。
          • 同源限制(https://wangdoc.com/javascript/bom/same-origin.html)
          • 從URL輸入到頁面展現到底發生什么?(https://github.com/ljianshu/Blog/issues/24)
          • 深入理解瀏覽器的緩存機制(https://github.com/ljianshu/Blog/issues/23)
          • 網頁性能管理詳解(http://www.ruanyifeng.com/blog/2015/09/web-page-performance-in-depth.html)
          • 關于Http協議,你必須要知道的(https://github.com/ljianshu/Blog/issues/22)
          • HTTP 協議(https://github.com/coconilu/Blog/issues/135)
          • HTTP2 協議(https://github.com/coconilu/Blog/issues/134)
          • 瀏覽器同源政策及其規避方法(http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html)
          • 跨域資源共享 CORS 詳解(http://www.ruanyifeng.com/blog/2016/04/cors.html)
          • 總結 XSS 與 CSRF 兩種跨站攻擊(https://segmentfault.com/a/1190000004623125)

          性能優化

          • 性能優化(https://yuchengkai.cn/docs/frontend/performance.html):常見性能優化。
          • 前端性能優化的七大手段(https://www.cnblogs.com/xiaohuochai/p/9178390.html)
          • 延遲加載(Lazyload)三種實現方式(https://zhuanlan.zhihu.com/p/25455672)
          • 詳解懶加載和預加載(https://www.geekjc.com/post/58d94d0f16a3655650d6fafe)
          • 前端優化帶來的思考,淺談前端工程化(http://www.cnblogs.com/yexiaochai/p/4901341.html)
          • 推薦幾本與Web性能優化有關的書籍(https://w3ctech.com/topic/108)
          • vue + webpack 前端性能優化(https://juejin.im/post/5bc5c106e51d450e7a253e1b)

          SEO

          • SEO優化實戰(https://imweb.io/topic/5682938b57d7a6c47914fc00)

          博客系列

          1. 個人

          現在是一個信息爆炸的時代,網上有很多優秀的博客文章,每個人的精力都是有限的,不可能關注到所有的博客,每個人關注點可能不太一樣,所以關注的個人博客也會不同,這些推薦幾個我比較常看的幾個高質量博客。而且是持續更新的。

          • 阮一峰的個人網站(http://www.ruanyifeng.com/home.html):阮一峰老師江湖地位不必多說,博客不止有技術,現在阿里任職。
          • 廖雪峰的官方網站(https://www.liaoxuefeng.com/):廖雪峰老師寫過很多優秀的系列教程,值得去學習。
          • 張鑫旭(https://www.zhangxinxu.com/):專注前端技術的大牛之一,出版《css世界》一書。
          • W3cplus(https://www.w3cplus.com/):大漠老師在手淘任職,CSS,HTML 有著豐富的經驗。
          • 前端入門和進階學習筆記(https://github.com/qianguyihao/Web):從零開始自學,然后進入京東,記錄作者一路走來的學習筆記。
          • 六小登登(https://blog.csdn.net/qq_32135281):我自己的個人博客,記錄自己的一些學習總結,個人成長,認識思維,雖然自己還是個菜鳥,但一直在路上。

          2. 團隊

          • 奇舞周刊(https://weekly.75team.com/):收集每周前端精華文章。
          • 美團技術團隊(https://tech.meituan.com/):分享一些美團的技術路線。
          • JavaScript Weekly(https://javascriptweekly.com/):每周都會分享一些 JavaScript 優質內容。
          • 印記中文周刊(https://weekly.docschina.org/):如果你對英文有閱讀障礙的話,印記幫你翻譯。
          • 凹凸實驗室(https://aotu.io/index.html):京東團隊。
          • 淘寶前端團隊FED(http://taobaofed.org/):淘寶前端團隊,不必多說了。
          • 網易FEG前端團隊(http://feg.netease.com/):網易的前端團隊,網易的產品一直都是我最喜歡的。
          • IMWeb前端博客(https://www.imweb.io/):騰訊公司前端團隊,負責QQ的相關業務你就知道了,都是億級別。
          • tutorialzine(https://tutorialzine.com/):高質量教程和文章庫。

          項目資源

          • 前端技能匯總(http://html5ify.com/fks/):一個前端工程師需要的技能點和學習資料。
          • You-need-to-know-css(https://lhammer.cn/You-need-to-know-css/#/):一個CSS的優質項目,純 CSS 實現我們項目中很多常用,不常用的樣式。
          • JavaScript libraries(https://www.javascripting.com/):一些優秀的JavaScript 開源庫。
          • awesome-web-dev-books(https://github.com/jobbole/awesome-web-dev-books):前端經典學習書單。
          • 前端 TOP 100(https://www.awesomes.cn/rank):基本涵蓋了所有前端在用的開源項目,我覺得收藏這一個就夠了。

          常用工具

          • CSS Sprites Generator(https://www.toptal.com/developers/css/sprite-generator):雪碧圖的在線制作工具。
          • Lorem Picsum(https://picsum.photos/):好用的圖片臨時占位符。
          • Md2All(http://md.aclickall.com/):優秀的現在 Markdown 編輯器。
          • 優波設計(https://ubuuk.com/):優秀的設計導航網站,幫助你更好的尋找資料。
          • 搬書匠(http://www.banshujiang.cn/):書籍搜索下載。
          • 史萊姆導航(http://www.slimegps.cn/):資源搜索。
          • codePen(https://codepen.io/):在線代碼編輯工具。
          • Iconfont(https://www.iconfont.cn/):阿里的字體圖標庫,支持多種格式,下載圖片,在線使用,SVG等等。
          • Can I use(https://www.caniuse.com/):可以查看瀏覽器兼容 CSS 情況。
          • 在線工具(https://tool.lu/):工具資源導航。

          最后

          以上是我這兩年多一路走來收藏的一些資料,整理這份資料也花了我好幾天的時間,希望能夠在自學的道路上幫到你。

          再次聲明,我并不是什么大神,我自認為技術也沒有到達這個層級,但是我會一直堅持學下去,另外一定不要誤會這里面的知識我全部都會,這些都是我學習的一些資料想整理出來,免去小白的一些不知道如何查閱資料。

          這里的資源可能并不適合每一個人,你也不一定全部都需要,只需要挑選自己想要的部分就行,任何事情并不是越多越好。

          作者:六小登登,個人公眾號:六小登登(ID:liuxiaodengdeng)。目前在某創業公司任職前端開發工作,近 3 年前端開發經驗,愛技術、愛寫作、愛分享。

          聲明:本文為作者投稿,版權歸其個人所有。


          主站蜘蛛池模板: 蜜桃无码一区二区三区| 国产精品被窝福利一区| 人妻无码一区二区三区| 少妇精品久久久一区二区三区 | 久久精品无码一区二区三区日韩 | 精品欧洲av无码一区二区| 亚洲国产成人久久一区WWW | 国产精品一区二区久久不卡| 全国精品一区二区在线观看| 久久精品成人一区二区三区| 亚洲av无码片区一区二区三区| 性无码一区二区三区在线观看| 台湾无码AV一区二区三区| 香蕉在线精品一区二区| 精品日本一区二区三区在线观看| 视频一区二区中文字幕| 国产在线观看一区二区三区| 日韩人妻无码免费视频一区二区三区| 呦系列视频一区二区三区| 无码av免费毛片一区二区| 日韩免费一区二区三区在线 | 精品视频一区二区三区四区 | 日韩人妻无码一区二区三区综合部 | 视频一区二区中文字幕| 无码AV动漫精品一区二区免费| 日本中文字幕在线视频一区| www亚洲精品少妇裸乳一区二区| 视频在线一区二区三区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲Av高清一区二区三区| 91在线精品亚洲一区二区| 国产对白精品刺激一区二区 | 亚洲一区日韩高清中文字幕亚洲| 精品国产一区二区三区AV性色 | 中文字幕一区二区三区久久网站| 日韩人妻无码一区二区三区99| 精品成人乱色一区二区| 成人免费视频一区| 一区二区三区四区电影视频在线观看| 久久亚洲色一区二区三区| 亚洲天堂一区二区|