go, iris , nuxt, 服務端渲染等技術在helloworld開發者社區中的應用與實踐

大家好,helloworld.net 上線已經有近半年的時間了,轉眼過的好快,在這半年的時間裏,迭代了近10多個版本,優化了很多的體驗,交互上的不足之處,同時也上線了我們的安卓 app, 蘋果的因為還在申請開發者賬號,所以暫時未上線

在這半年的時間內,網友很給力,也給出了很多的建議和優化,也有不少網友說願意為 helloworld開發者社區出一份力,在這裡我感謝這些支持我們的用戶,helloworld開發者社區會一如既往的堅持免費,分享,乾貨的精神做一個 程序員自己的技術社區

今天我們來聊聊 go, iris, nuxt 這些技術在 helloworld開發者社區中的應用
因為我們的用戶都是做研發的,所以大家看到網站的第一反應就是這個網站用什麼技術做出來的?

下圖是 helloworld.net 的框架圖

image

有幾個問題,用戶比較關心,先來回答幾個問題先

一 為什麼選擇了 Go 而不是 java ?

實在不想回答這個問題啊,因為很容易引起程序員之間的戰爭,語言之爭,是非多,扯不清道不明的,不過在這裡還是要說明一下

  1. Java是現階段最成熟,最穩定,相關的庫第三方的庫,解決方案都是最全的,這一點是毫無疑問的

  2. Go我個人認為是未來的語言,現在雖然各方面的庫,框架沒有Java的多,那是因為Java很多年了,Go 現在已經有的框架,庫,至少對於我寫這個網站來說,足夠用了

  3. Go真的很簡潔,Java那一套SpringBoot雖然強大,但是和Go 的 iris 框架相比,太重了,太重了,太重了

  4. 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

好了,下面我們再來看看下面的那框架圖
image

用戶在瀏覽器地址欄中輸入 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開發者社區的技術棧以及選型的過程
在技術選型的時候,一定要結合自己的實際情況來作選擇

而且要謹慎,也有考慮未來的技術趨勢等

最後 再次謝謝大家的支持,我們會一如既往的做一個體驗好的,程序員自己的技術社區