golang template 模板性能怎样呢?有相关对比的文章吗?与静态 html 文件比起来相差多少呢?

2022-03-26 11:06:14 +08:00
 sciel
假设一个小说网站,走 template 模板方式的话,模块操作里面就去 redis 缓存获取一下数据最后渲染生成 html 返回展示。

走 html 方式的话,就需要一开始生成所有章节页面的 html 文件。

想请问这两种方式就加载一个页面的速度来说的话相差会是多少呢?如果有相关解说文章就更好啦。
2843 次点击
所在节点    Go 编程语言
13 条回复
seakingii
2022-03-26 11:23:19 +08:00
如果光是”模板“这个很简单,你自己写个代码例子测试一下不就清楚了。

实际上问题会更复杂,比如你要根据模板生成,你的数据来源要快,假如你数据库放国内,生成服务器放国外,那就慢的不得了(实际上可能不会这么极端),那样的话,先在本地生成所有的 HTML 再上传会更好。

还有就是服务器的 CPU 性能,内存性能等。如果是垃圾服务器,那也是先生成 HTML 比较好。

如果数据来源够快,我是建议用 模板生成,那样单个即时生成所费的时间很小,毫秒级别。再加上各种缓存(缓存在磁盘上,REDIS 中,CDN 中),能大大缓存生成压力。模板即时生成的最大好处就是可以随时修改样式模板,随后再次访问就是新的样式了。也不用随便小修改就要重新生成一次所有页面,那可能会费很多时间。
xiaoyiyu
2022-03-26 11:39:49 +08:00
pca7a2
2022-03-26 14:35:26 +08:00
建议还是前后端分离,适合分工。
Jooooooooo
2022-03-26 15:01:24 +08:00
这...到了考虑这种东西的性能问题的时候吗.

数据库稍微设计合理点性能提升估计要比这个大一万倍.
keepeye
2022-03-26 15:09:14 +08:00
性能测试可以参考 2 楼,再说静态文件,如果服务器磁盘垃圾 html 还真不一定有 go 模板渲染快,别忽略了磁盘 io 瓶颈,不建议生成 html ,go 没那么慢,等你遇到瓶颈了花钱加服务器都是开心的
Goat121
2022-03-26 15:15:13 +08:00
你问的实际上不是 template 包的问题,是采用服务端渲染或前端渲染的问题。
对于服务端来说,返回 json 还是 html 性能差距微乎其微。
前端渲染的性能,视客户端环境和执行的 js 代码可能会慢上数秒,但现代浏览器都会预编译 js 并缓存,实际上只会在你第一次打开网页时有影响。
采用服务端渲染一般都是为了做 seo ,但会极大增加代码耦合度。某些大厂的做法是再加一层,服务端返回 json 到中间层渲染为 html ,再返回给客户端。除了工作量大增之外,啥都好。
看你用户量和开发人员具体做技术选型把
Goat121
2022-03-26 15:16:48 +08:00
@Goat121 抱歉 没看清楚贴。无视我吧
sciel
2022-03-26 15:19:04 +08:00
@keepeye 有道理,可以愉快的使用模板啦
buliugu
2022-03-26 15:25:06 +08:00
其实生成静态 html 直接走 cdn 分发也是一种方案,广告部分走动态请求就行,可以大幅减少主站的流量压力
seakingii
2022-03-26 15:26:20 +08:00
楼主的这个问题我以前也经历过。

两种做法各有各的好处,静态的最大好处在于,你任意一个 WEB 服务器都可以部署,甚至可以用 GITHUB 部署。。。

如果用即时模板,坏处是要运行可执行程序,好处是可以再加一些动态功能,比如 搜索啥的。。
WispZhan
2022-03-26 15:29:03 +08:00
参考 hugo ?
wonderfulcxm
2022-03-26 17:02:01 +08:00
小说网站,如果小说数量大的话,并且一个页面跟另一个页面有关联,列表分页,tag 页,主页等等。修改一次,整站重新生成一次得几百万上千万个页面。
hugo 那种只适合个人博客这种小玩意
veightz
2022-03-31 13:09:57 +08:00
我觉得可以看业务的场景.. 看读写比例, 高频写的话, 是不是会经常构建, 导致代价较大?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843000

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX