go, iris , nuxt, 服務端渲染等技術在helloworld開發者社區中的應用與實踐
大家好,helloworld.net 上線已經有近半年的時間了,轉眼過的好快,在這半年的時間裏,迭代了近10
多個版本,優化了很多的體驗,交互上的不足之處,同時也上線了我們的安卓 app, 蘋果的因為還在申請開發者賬號,所以暫時未上線
在這半年的時間內,網友很給力,也給出了很多的建議和優化,也有不少網友說願意為 helloworld開發者社區
出一份力,在這裡我感謝這些支持我們的用戶,helloworld開發者社區
會一如既往的堅持免費,分享,乾貨的精神做一個 程序員自己的技術社區
今天我們來聊聊 go, iris, nuxt 這些技術在 helloworld開發者社區中的應用
因為我們的用戶都是做研發的,所以大家看到網站的第一反應就是這個網站用什麼技術做出來的?
下圖是 helloworld.net
的框架圖
有幾個問題,用戶比較關心,先來回答幾個問題先
一 為什麼選擇了 Go 而不是 java ?
實在不想回答這個問題啊,因為很容易引起程序員之間的戰爭,語言之爭,是非多,扯不清道不明的,不過在這裡還是要說明一下
-
Java是現階段最成熟,最穩定,相關的庫第三方的庫,解決方案都是最全的,這一點是毫無疑問的
-
Go我個人認為是未來的語言,現在雖然各方面的庫,框架沒有Java的多,那是因為Java很多年了,Go 現在已經有的框架,庫,至少對於我寫這個網站來說,足夠用了
-
Go真的很簡潔,Java那一套SpringBoot雖然強大,但是和Go 的 iris 框架相比,太重了,太重了,太重了
-
Go的簡潔讓我喜歡它,Go的性能,讓我選擇用它,用 go iris 和 java的springboot我作過一個簡單的測試,寫過一個接口,用go和 java返回博客的前50篇內容,go的性能是java的將近3倍
所以最終選擇了go,而不是java,雖然我更熟悉java
關於go和java之爭,就像當年 java和php之爭一樣,既然有爭議了,出結果肯定是要一個過程的,在這個過程中,可能有很多的人戰隊 ,但是最終都是好的代替老的。就像後來java慢慢的把php給擠下去了一樣
以上只是個人看法,不要噴我
go的web框架也有很多,比如 beego, gin , iris ,Echo等,最知名的要數beego了,現在用的比較多的是 gin
iris 因為是demo比較全,而且mvc的功能很完善,當時就選了 iris , 其實當時也糾結過gin和 iris 的選擇,不過最終還是選擇了demo更豐富的iris
二 服務端渲染怎麼做?
做技術社區嘛,就不能用vue, react 單純的寫單頁面的方式了來寫網站了
要不百度不認識啊,不收錄啊
vue 和 react 各種一個非常好的 ssr
的解決方案
vue 就是nuxt
了,官方也推薦的。
react 就是 next
,這倆哥們,ssr
方案起的名字都很像,就差一個字母
helloworld.net
初期的時候,就創建人,也就網名待兔的,一個人在搞,而且還不會寫前端,現學的前端,因為vue學起來比react
簡單,當時就學了vue
,那nuxt
自然也是要用的了。
三 服務器配置
服務器是在騰訊雲買的,買了4台,花了5萬多,4核8G的,帶寬也還行。目前來說夠用了
在此之前還有一台100M的,16核32G的從機房租的,這台現在是當測試機了
數據庫就沒有什麼好說的了 mysql
好了,下面我們再來看看下面的那框架圖
用戶在瀏覽器地址欄中輸入 www.helloworld.net
並回車的時候
請求首先發到了nginx,在nginx做了轉發處理,把所有的請求都打到了 node服務器上
也就是nuxt那台服務器
nuxt 會請求接口服務,這個就是我們通常開發業務的時候,返回json數據,並解析數據
nuxt 收到接口返回的json後,動態生成網頁,並返回給nginx,nginx再返回給用戶
這樣用戶瀏覽器收到的就是已經渲染好的html了,就不是客戶渲染了
現在要明白 ,nginx是http服務,node上跑nuxt也是http服務,api接口也是http服務
等於說, 一個請求,經過了好幾個http服務
- nginx http是負責轉發請求的
- node 上的nuxt http是負責ssr的,也就是請求接口服務,把返回的數據,動態渲染成 html
- api服務器上跑的http是負責從緩存 ,數據庫中取出數據的
有人可能會擔心 ,中間的node上跑的nuxt,畢竟是node,有的公司對服務器上跑node很排斥,會不會有問題
我們也有過這樣的擔心,不過後來實際測試用的時候,並沒有什麼大的問題
所以,放心的用吧
api 接口後面是 redis和es搜索,mysql主從服務器
以上就是整個helloworld開發者社區的技術棧以及選型的過程
在技術選型的時候,一定要結合自己的實際情況來作選擇
而且要謹慎,也有考慮未來的技術趨勢等
最後 再次謝謝大家的支持,我們會一如既往的做一個體驗好的,程序員自己的技術社區