Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c602586

Browse files
committed
尽可能 cdn 化
1 parent f407061 commit c602586

File tree

11 files changed

+150
-68
lines changed

11 files changed

+150
-68
lines changed

config/env.sample.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ is_master = 1
1313
; 搜索引擎,避免阅读次数非人为增加
1414
spider = spider,bot,nutch,yahoo,gougou,scooter,lilina
1515

16+
; 静态资源是否使用 CDN
17+
use_cdn = false
18+
1619
[listen]
1720
host = 127.0.0.1
1821
port = 8088

src/global/app.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,14 @@ type app struct {
5858
Host string
5959
Port string
6060

61+
BaseURL string
62+
6163
// CDN 资源域名
6264
CDNHttp string
6365
CDNHttps string
6466

67+
Domain string
68+
6569
locker sync.Mutex
6670
}
6771

@@ -94,6 +98,10 @@ func init() {
9498
App.CDNHttps = config.ConfigFile.MustValue("qiniu", "https_domain", DefaultCDNHttps)
9599
}
96100

101+
func (this *app) Init(domain string) {
102+
this.Domain = config.ConfigFile.MustValue("global", "domain", domain)
103+
}
104+
97105
func (this *app) SetUptime() {
98106
this.locker.Lock()
99107
defer this.locker.Unlock()

src/http/http.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ func executeTpl(ctx echo.Context, tpl *template.Template, data map[string]interf
307307

308308
// websocket主机
309309
if global.OnlineEnv() {
310-
data["wshost"] = config.ConfigFile.MustValue("global", "domain", logic.WebsiteSetting.Domain)
310+
data["wshost"] = global.App.Domain
311311
} else {
312312
data["wshost"] = global.App.Host + ":" + global.App.Port
313313
}
@@ -317,11 +317,17 @@ func executeTpl(ctx echo.Context, tpl *template.Template, data map[string]interf
317317
isHttps := CheckIsHttps(ctx)
318318
cdnDomain := global.App.CDNHttp
319319
if isHttps {
320+
global.App.BaseURL = "https://" + global.App.Domain + "/"
320321
cdnDomain = global.App.CDNHttps
322+
} else {
323+
global.App.BaseURL = "http://" + global.App.Domain + "/"
321324
}
325+
322326
data["app"] = global.App
323327
data["is_https"] = isHttps
324328
data["cdn_domain"] = cdnDomain
329+
data["use_cdn"] = config.ConfigFile.MustBool("global", "use_cdn", false)
330+
data["is_pro"] = global.OnlineEnv()
325331

326332
data["online_users"] = map[string]int{"online": logic.Book.Len(), "maxonline": logic.MaxOnlineNum()}
327333

src/server/studygolang/main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"http/controller/admin"
1313
"http/controller/app"
1414
"io/ioutil"
15+
"logic"
1516
"math/rand"
1617
"os"
1718
"path/filepath"
@@ -44,6 +45,8 @@ func main() {
4445

4546
savePid()
4647

48+
global.App.Init(logic.WebsiteSetting.Domain)
49+
4750
logger.Init(ROOT+"/log", ConfigFile.MustValue("global", "log_level", "DEBUG"))
4851

4952
go keyword.Extractor.Init(keyword.DefaultProps, true, ROOT+"/data/programming.txt,"+ROOT+"/data/dictionary.txt")

template/common/analytics.html

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<!-- 谷歌 -->
2+
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
3+
<script>
4+
(adsbygoogle = window.adsbygoogle || []).push({
5+
google_ad_client: "ca-pub-4512014793067058",
6+
enable_page_level_ads: true
7+
});
8+
</script>
9+
<script>
10+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
11+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
12+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
13+
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
14+
15+
ga('create', 'UA-18275235-2', 'auto');
16+
ga('send', 'pageview');
17+
18+
</script>
19+
20+
<!-- 百度 -->
21+
<script>
22+
var _hmt = _hmt || [];
23+
(function() {
24+
var hm = document.createElement("script");
25+
hm.src = "https://hm.baidu.com/hm.js?224c227cd9239761ec770bc8c1fb134c";
26+
var s = document.getElementsByTagName("script")[0];
27+
s.parentNode.insertBefore(hm, s);
28+
})();
29+
</script>
30+
<script>
31+
(function(){
32+
var bp = document.createElement('script');
33+
var curProtocol = window.location.protocol.split(':')[0];
34+
if (curProtocol === 'https') {
35+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
36+
} else {
37+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
38+
}
39+
var s = document.getElementsByTagName("script")[0];
40+
s.parentNode.insertBefore(bp, s);
41+
})();
42+
</script>

template/common/common.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<link rel="stylesheet" href="/static/css/fonts_googleapi.css">
2+
<link rel="stylesheet" href="//cdn.bootcss.com/bootswatch/3.2.0/css/cosmo/bootstrap.min.css">
3+
<link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css">
4+
<link rel="stylesheet" href="/static/css/main.css"/>
5+
<link rel="stylesheet" href="/static/css/zoom.css"/>

template/common/common.css.cdn

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<link rel="stylesheet" href="{{.cdn_domain}}cssjs/fonts_googleapi.css">
2+
<link rel="stylesheet" href="//cdn.bootcss.com/bootswatch/3.2.0/css/cosmo/bootstrap.min.css">
3+
<link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css">
4+
<link rel="stylesheet" href="{{.cdn_domain}}cssjs/main.css">
5+
<link rel="stylesheet" href="{{.cdn_domain}}cssjs/zoom.css">

template/common/common.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<script src="/static/js/libs/jquery.timeago.zh-CN.js"></script>
2+
<script src="//cdn.bootcss.com/zoom.js/0.0.1/zoom.min.js"></script>
3+
<script src="/static/js/libs/md5.js"></script>
4+
<script type="text/javascript">
5+
var uid = {{.me.Uid}};
6+
var isHttps = {{.is_https}},
7+
cdnDomain = "{{.cdn_domain}}";
8+
if (isHttps) {
9+
var wsUrl = 'wss://{{.wshost}}/ws?uid='+uid;
10+
} else {
11+
var wsUrl = 'ws://{{.wshost}}/ws?uid='+uid;
12+
}
13+
var GLaunchTime = {{timestamp .app.LaunchTime}}*1000;
14+
</script>
15+
<script src="/static/js/common.js"></script>
16+
<script type="text/javascript" src="/static/js/libs/paste-upload-image.js"></script>
17+
<script src="//cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js"></script>
18+
<script type="text/javascript">
19+
$.views.settings.delimiters("[%", "%]");
20+
// $.views.settings.debugMode(true);
21+
</script>
22+
<script src="//cdn.bootcss.com/emojify.js/1.1.0/js/emojify.min.js"></script>

template/common/common.js.cdn

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<script src="{{.cdn_domain}}cssjs/jquery.timeago.zh-CN.js"></script>
2+
<script src="//cdn.bootcss.com/zoom.js/0.0.1/zoom.min.js"></script>
3+
<script src="{{.cdn_domain}}cssjs/md5.js"></script>
4+
<script type="text/javascript">
5+
var uid = {{.me.Uid}};
6+
var isHttps = {{.is_https}},
7+
cdnDomain = "{{.cdn_domain}}";
8+
if (isHttps) {
9+
var wsUrl = 'wss://{{.wshost}}/ws?uid='+uid;
10+
} else {
11+
var wsUrl = 'ws://{{.wshost}}/ws?uid='+uid;
12+
}
13+
var GLaunchTime = {{timestamp .app.LaunchTime}}*1000;
14+
</script>
15+
<script src="{{.cdn_domain}}cssjs/common.js"></script>
16+
<script src="//cdn.bootcss.com/lscache/1.1.0/lscache.min.js"></script>
17+
<script src="{{.cdn_domain}}cssjs/paste-upload-image.js"></script>
18+
<script src="//cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js"></script>
19+
<script type="text/javascript">
20+
$.views.settings.delimiters("[%", "%]");
21+
// $.views.settings.debugMode(true);
22+
</script>
23+
<script src="//cdn.bootcss.com/emojify.js/1.1.0/js/emojify.min.js"></script>

template/common/layout.html

Lines changed: 30 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@
99
<link rel="apple-touch-icon" type="image/png" href="/static/img/logo2.png">
1010
{{template "seo" .}}
1111
<meta name="author" content="polaris <[email protected]>">
12-
<!--<link href="http://studygolang.qiniudn.com/fonts_googleapi.css" rel="stylesheet">-->
13-
<!-- <link href="//cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> -->
14-
<link href="/static/css/fonts_googleapi.css" rel="stylesheet">
15-
<link href="/static/css/cosmo_bootstrap.min.css" rel="stylesheet">
16-
<!--<link href="http://studygolang.qiniudn.com/cosmo_bootstrap.min.css" rel="stylesheet">-->
17-
<!--<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css" rel="stylesheet">-->
18-
<link rel="stylesheet" href="//cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.min.css">
19-
<link href="/static/css/main.css?v=1.5" rel="stylesheet"/>
20-
<link href="/static/css/zoom.css" rel="stylesheet"/>
12+
<link rel="canonical" href="{{.app.BaseURL}}" />
13+
14+
{{if .use_cdn}}
15+
{{include "common/common.css.cdn" .}}
16+
{{else}}
17+
{{include "common/common.css" .}}
18+
{{end}}
19+
2120
{{template "css" .}}
2221
<style type="text/css">
2322
#bottom .nav-content {
@@ -165,34 +164,6 @@
165164
</div>
166165
</footer>
167166

168-
<!-- <footer class="footer">
169-
<div class="container">
170-
<div>
171-
<div class="pull-left" style="margin-right:10px;">
172-
<a href="http://studygolang.com" target="_blank">
173-
<img src="/static/img/logo2.png" widht="48px" height="48px" alt="golang logo">
174-
</a>
175-
</div>
176-
<p class="links">
177-
{{range $i, $el := .setting.FooterNavs}}
178-
{{if gt $i 0}} | {{end}}<a href="{{.Url}}">{{.Name}}</a>
179-
{{end}}
180-
</p>
181-
<p class="copyright">&copy;{{.app.Copyright}} 采用 <a href="https://golang.org" target="_blank">Go语言</a> + <a href="https://www.mysql.com/" target="_blank">MYSQL 构建</a>
182-
&nbsp;&nbsp;当前在线:<span id="onlineusers">{{.online_users.online}}</span>人&nbsp;&nbsp;历史最高:<span id="maxonline">{{.online_users.maxonline}}</span>人&nbsp;&nbsp;运行时间:<attr>{{.app.Uptime}}</attr>
183-
<br/>
184-
<b>网站编译信息</b>&nbsp;版本:{{.app.Version}}/{{.app.Build}},时间:<attr class="timeago">{{.app.Date}}</attr>
185-
<br/>{{.setting.Slogan}}
186-
{{.setting.Beian}}
187-
</p>
188-
<p class="text-center">
189-
{{range .setting.FriendLogos}}
190-
<a href="{{.Url}}" title="{{.Name}}" target="_blank"><img src="{{.Image}}" alt="{{.Name}}" width="{{.Width}}" height="{{.Height}}" /></a>
191-
{{end}}
192-
</p>
193-
</div>
194-
</div>
195-
</footer> -->
196167
<div id="gotop"></div>
197168

198169
{{if .me.Uid}}
@@ -247,35 +218,28 @@
247218
<div id="sg-overlay"></div>
248219
{{end}}
249220

250-
<!--<script type="text/javascript" src="//apps.bdimg.com/libs/jquery/1.11.1/jquery.min.js"></script>-->
251-
<script type="text/javascript" src="/static/js/libs/jquery-1.11.1.min.js"></script>
252-
<!--<script src="//apps.bdimg.com/libs/bootstrap/3.2.0/js/bootstrap.min.js"></script>-->
253-
<script type="text/javascript" src="/static/js/libs/bootstrap-3.2.0.min.js"></script>
254-
<script src="/static/js/libs/jquery.timeago.js?v=1.5.4"></script>
255-
<script src="/static/js/libs/jquery.timeago.zh-CN.js?v=1.5.4"></script>
256-
<script src="/static/js/libs/zoom.min.js"></script>
257-
<script src="/static/js/libs/md5.js"></script>
258-
<script type="text/javascript">
259-
var uid = {{.me.Uid}};
260-
var isHttps = {{.is_https}},
261-
cdnDomain = "{{.cdn_domain}}";
262-
if (isHttps) {
263-
var wsUrl = 'wss://{{.wshost}}/ws?uid='+uid;
264-
} else {
265-
var wsUrl = 'ws://{{.wshost}}/ws?uid='+uid;
266-
}
267-
var GLaunchTime = {{timestamp .app.LaunchTime}}*1000;
268-
</script>
269-
<script src="/static/js/common.js?v=1.7"></script>
270-
<script src="//cdn.bootcss.com/lscache/1.1.0/lscache.min.js"></script>
271-
<script type="text/javascript" src="/static/js/libs/paste-upload-image.js"></script>
221+
<script src="//cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
222+
<script src="//cdn.bootcss.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
223+
<script src="//cdn.bootcss.com/jquery-timeago/1.6.1/jquery.timeago.min.js"></script>
224+
225+
{{if .use_cdn}}
226+
{{include "common/common.js.cdn" .}}
227+
{{else}}
228+
{{include "common/common.js" .}}
229+
{{end}}
230+
272231
{{template "js" .}}
273-
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsrender/0.9.84/jsrender.min.js"></script>
274-
<script type="text/javascript">
275-
$.views.settings.delimiters("[%", "%]");
276-
// $.views.settings.debugMode(true);
277-
</script>
278-
<script type="text/javascript" src="/static/js/libs/emojify.min.js"></script>
279-
<script type="text/javascript" src="/static/js/sidebar.js?v=1.12"></script>
232+
233+
{{if .use_cdn}}
234+
<script src="{{.cdn_domain}}cssjs/sidebar.js"></script>
235+
{{else}}
236+
<script type="text/javascript" src="/static/js/sidebar.js"></script>
237+
{{end}}
238+
239+
{{if .is_pro}}
240+
<!-- 统计分析、广告脚本等 -->
241+
{{include "common/analytics.html" .}}
242+
{{end}}
243+
280244
</body>
281245
</html>

template/index.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@
354354

355355
{{end}}
356356
{{define "js"}}
357-
<script type="text/javascript" src="/static/js/libs/identicon.js"></script>
357+
<!-- <script type="text/javascript" src="/static/js/libs/identicon.js"></script> -->
358+
<script src="//cdn.bootcss.com/identicon.js/2.3.1/identicon.min.js"></script>
358359
<script type="text/javascript">
359360
// 需要加载的侧边栏
360361
SG.SIDE_BARS = [

0 commit comments

Comments
 (0)