日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

一年時(shí)間,3萬(wàn)行Go代碼,我寫了一個(gè)博客程序

前言

地址: github.com/go-sonic/so…

Sonic [?s?n?k] ,Sonic 是一個(gè)用 Golang 開發(fā)的博客平臺(tái)。

寫這個(gè)項(xiàng)目的原因是我自己也是一名博主,喜歡寫博客,用過(guò) WordPress 、typecho 、Hexo 、Hugo 等,但是總有一些不滿意的地方

Halo 感覺非常不錯(cuò),典型的 C/S 架構(gòu),很符合我這個(gè)后端程序員的口味。雖然 Java 是一種高性能的語(yǔ)言,但是缺點(diǎn)是占用內(nèi)存較多,一些配置較低的主機(jī)并不符合要求,Go 的協(xié)程天然適合 Web 這種并發(fā)場(chǎng)景,并且內(nèi)存占用極低。而且 Halo 自身也有些小缺陷,比如 For 循環(huán)查庫(kù),遂決定基于 Go 寫一個(gè)高性能的博客框架

需要說(shuō)明的是,Sonic 的靈感來(lái)自 Halo ,也借鑒了 Halo 很多優(yōu)秀的設(shè)計(jì),后臺(tái)管理界面更是直接 Fork 自 Halo 。Sonic 未來(lái)的主要目標(biāo)是快、輕量、優(yōu)雅的代碼,希望能成為 Golang web 的 best practice 之一

預(yù)覽

一年時(shí)間,3萬(wàn)行Go代碼,我寫了一個(gè)博客程序一年時(shí)間,3萬(wàn)行Go代碼,我寫了一個(gè)博客程序

博客程序對(duì)比

靜態(tài) VS 動(dòng)態(tài)

靜態(tài)的優(yōu)點(diǎn) 靜態(tài)博客目前有Hugo、Hexo、Jekyll,動(dòng)態(tài)的且比較知名的則有WordPress、Typecho、Halo

  • 非常輕量,純文件訪問(wèn),高性能
  • 可以不需要自己的服務(wù)器
  • 安全
  • 方便結(jié)合 git 工作流

動(dòng)態(tài)的優(yōu)點(diǎn)

  • 實(shí)時(shí)的內(nèi)容更新
  • 實(shí)時(shí)的閱讀量排行
  • 動(dòng)態(tài)的圖片壓縮優(yōu)化
  • 保存點(diǎn)贊評(píng)論等用戶生成的內(nèi)容
  • 可以進(jìn)行數(shù)據(jù)分析
  • 復(fù)雜功能只能是基于動(dòng)態(tài)博客實(shí)現(xiàn),比如付費(fèi)文章、加密文章

動(dòng)態(tài)博客對(duì)比

博客系統(tǒng)

語(yǔ)言

數(shù)據(jù)庫(kù)

主題和插件生態(tài)

Markdown支持

Star數(shù)量

系統(tǒng)配置要求

WordPress

PHP

MySQL/MariaDB

非常多

否(需要安裝插件)

16.9K(僅做參考)

較低

Typecho

PHP

MySQL/SQLite

較多

9.6K

非常低

Halo

Java

MySQL/PostgreSQL

較少

25K

高(至少1GB內(nèi)存)

GHost

Node.js

MySQL

較多

42K

高(至少1GB內(nèi)存)

JPress

Java

MySQL

較少

2.5K

對(duì)比幾款比較主流的CMS系統(tǒng),體驗(yàn)比較好的應(yīng)該是Typecho,但是Typecho使用PHP開發(fā),使用PHP開發(fā)的系統(tǒng),包括WordPress,個(gè)人覺得其實(shí)槽點(diǎn)比較多:

  • 如果不使用Docker安裝,需要先安裝PHP環(huán)境,以及一大堆PHP擴(kuò)展,對(duì)于非開發(fā)人員并不友好。
  • 個(gè)人并不喜歡PHP,腳本語(yǔ)言、解釋執(zhí)行,以至于想搞個(gè)定時(shí)任務(wù)都特別麻煩,CGI FPM的設(shè)計(jì)也太奇葩。時(shí)代在前進(jìn),PHP的使用率在降低。(并不是想發(fā)起語(yǔ)言之爭(zhēng),以上僅代表我自己的看法)

Halo使用Java開發(fā),比較不錯(cuò),但是也有我不滿意的點(diǎn):

  • 服務(wù)器要安裝JRE
  • 內(nèi)存占用太高。個(gè)人博客一般都是運(yùn)行在配置比較低的小主機(jī)上
  • 不支持SQLite(雖然支持H2這種嵌入式數(shù)據(jù)庫(kù),但是官方并不推薦在生產(chǎn)環(huán)境使用),需要單獨(dú)安裝MySQL/PostgreSQL,但是個(gè)人博客其實(shí)并不需要這種比較重的數(shù)據(jù)庫(kù)系統(tǒng),單個(gè)文件的SQLite可能才是最好的選擇,數(shù)據(jù)庫(kù)的備份也特別方便
  • 代碼質(zhì)量比較低,很多For循環(huán)查庫(kù)。
  • 綜上,運(yùn)行Halo需要 Java Run Time Halo MySQL,成本較高

我期望的博客系統(tǒng)應(yīng)該是:

  • 無(wú)需安裝任何依賴,如PHP、Java、Nginx、MySQL等
  • 數(shù)據(jù)庫(kù)使用 SQLite 這種,不需要單獨(dú)安裝數(shù)據(jù)庫(kù)服務(wù)
  • 只有一個(gè)可執(zhí)行文件
  • 系統(tǒng)資源占用非常低,即使在256MB的機(jī)器上,也可以高速運(yùn)行

有了上面的幾個(gè)訴求,我發(fā)現(xiàn)目前并沒(méi)有能滿足我要求的開源博客系統(tǒng),于是決定自己寫一個(gè)!Golang非常適合作為開發(fā)語(yǔ)言,有著高性能、編譯產(chǎn)物是一個(gè)可執(zhí)行的二進(jìn)制程序、編譯產(chǎn)物的體積也比較小、生態(tài)比較完善等優(yōu)點(diǎn)。最終,Sonic來(lái)了,完美實(shí)現(xiàn)了上面的幾個(gè)訴求:

  • 只有一個(gè)二進(jìn)制程序,無(wú)需安裝任何依賴
  • 輕量,安裝包只有14MB
  • 高性能,文章詳情頁(yè)最高可達(dá) 2500 QPS (Intel Xeon Platinum 8260 4C 8G SQLite)
  • 內(nèi)存占用極低,10MB的內(nèi)存占用
  • 支持SQLite,方便備份
  • 支持Linux、Windows、Mac OS等操作系統(tǒng). 并且支持x86、x64、Arm、Arm64、MIPS等指令集

功能

  • 文章管理
  • 分類管理
  • 標(biāo)簽管理
  • 附件管理,支持OSS(MINIO、Google Cloud、AWS、AliYun)
  • 支持多主題(目前有2款主題)
  • 支持自定義頁(yè)面
  • 菜單編輯
  • 評(píng)論管理
  • 日志功能
  • 圖庫(kù)功能
  • Markdown導(dǎo)入,支持從Hugo、Hexo、Jekyll導(dǎo)入,支持導(dǎo)出文章為Markdown
  • RSS/Atom支持
  • SEO優(yōu)化
  • 支持MySQL/SQLite

代碼量

language

Files

code

comment

blank

total

Go

304

28,345

913

4,535

33,793

Go Template File

37

2,033

0

158

2,191

YAML

16

1,662

24

193

1,879

Markdown

11

740

4

180

924

SQL

1

269

0

28

297

JSON

3

160

0

2

162

Docker

1

20

0

10

30

Shell Script

1

14

1

5

20

TODO

目前Sonic還是有些不太完善的地方,后面會(huì)將開發(fā)重心放在以下幾個(gè)方面:

  • 插件系統(tǒng)(基于Wasm)
  • i18n
  • 更多的主題
  • 代碼的重構(gòu)優(yōu)化,希望能讓項(xiàng)目的代碼更優(yōu)雅
  • PostgreSQL支持

作者:GoSonic
鏈接:https://juejin.cn/post/7179097961811411001

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部
行唐县| 宁津县| 安福县| 句容市| 方正县| 奉节县| 通州区| 中方县| 宽甸| 上林县| 郎溪县| 锡林浩特市| 敖汉旗| 共和县| 清镇市| 大洼县| 清河县| 洛川县| 门源| 正蓝旗| 凌海市| 三亚市| 达尔| 安远县| 莱西市| 同德县| 灵山县| 西乌珠穆沁旗| 永州市| 伊金霍洛旗| 孝感市| 射洪县| 璧山县| 临泉县| 澎湖县| 七台河市| 岳西县| 女性| 甘德县| 京山县| 华宁县|