在作家页面的个人简介和作品页面的作品简介中,发现:
<p>
标签)
// 原始JS方案(已弃用)
document.querySelectorAll('.bio').forEach(el => {
el.innerHTML = el.textContent
.split('\n')
.map(p => `<p style="text-indent: 2em">${p}</p>`)
.join('');
});
缺陷:
通过DeepSeek建议,改用Go的strings.Split
在服务端完成文本分割:
// 在Go中传递已分割的段落数组
type Author struct {
Bio []string `json:"bio"` // 已按\n分割的简介段落
}
// 处理逻辑示例
func formatBio(rawBio string) []string {
paragraphs := strings.Split(rawBio, "\n")
// 过滤空段落
return filterEmptyParagraphs(paragraphs)
}
<div class="bio">
{{range .Bio}}
{{if .}}
<p style="text-indent: 2em; margin: 0.5em 0">{{.}}</p>
{{end}}
{{end}}
</div>
方案 | 执行时机 | 耗时(1000字测试) | 内存占用 | 兼容性 |
---|---|---|---|---|
前端JS处理 | 客户端渲染 | 15-200ms | 较高 | 需JS支持 |
Go后端预处理 | 服务端渲染 | <1ms | 可忽略 | 通用 |
空行过滤:
func filterEmptyParagraphs(paragraphs []string) []string {
result := make([]string, 0)
for _, p := range paragraphs {
if strings.TrimSpace(p) != "" {
result = append(result, p)
}
}
return result
}
多分隔符支持(如\r\n
):
strings.Replace(rawBio, "\r\n", "\n", -1) // 统一换行符
敏感词过滤(可结合处理):
paragraphs[i] = filterSensitiveWords(paragraphs[i])
通过这次优化,验证了能在服务端做的事,就不要交给客户端的原则。AI工具在提供思路后,仍需开发者根据实际场景选择最优解。
还没有留言,来留下第一条吧!