博客系统知多少:揭秘那些不为人知的学问(一)

点击上方蓝字关注“汪宇杰博客”

导语

在我们生活的年代,博客并不稀奇,甚至可以说是随处可见。从最早的搜狐、新浪博客,再到每个人都曾记录青春的 QQ 空间,再到现在的 Vlog 与 Plog,似乎拥有一个自己的博客并不是什么难事。然而想要自己从零开始搭建一个出色的博客系统,则并非那么简单。可能有些懂技术的小伙伴会说,看上去只是简单的对文章 CRUD 就行了,也没有那么复杂啊。然而,真的是这样吗,这背后可能隐藏着更多玄机等待着我们去挖掘。掐指一算,我建设自己的博客已有11年,也见过许多程序员自己编写博客系统,但真正按规范和标准设计的功能完备的博客少之又少。本文我将分享自己在博客系统设计中积累的经验,介绍一些鲜为人知的博客技术,帮助想要搭建博客的小伙伴们进一步了解如何设计一个优秀的博客系统。

目录

由于文章篇幅较长,本文将分为4篇推送,目录如下:

1.“博客”的前世今生

2.我的博客故事

3.谁是博客的受众?

4. 博客基本功能设计要点

    4.1 文章(Post)

    4.2 评论(Comment)

    4.3 分类(Category)

    4.4 标签(Tag)

    4.5 归档(Archive)

    4.6 页面(Page)

    4.7 订阅

    4.8 版本控制

    4.9 主题及个性化

    4.10 用户及权限

    4.11 插件

    4.12 图片及附件的处理

    4.13 脏词过滤及评论审查

    4.14 静态化

    4.15 通知系统

5. 博客协议或标准

    5.1 RSS

    5.2 ATOM

    5.3 OPML

    5.4 APML

    5.5 FOAF

    5.6 BlogML

    5.7 Open Search

    5.8 Pingback

    5.9 Trackback

    5.10 MetaWeblog

    5.11 RSD

    5.12 阅读器视图

6. 设计博客系统有哪些知识点

    6.1 时区真的全用UTC?

    6.2 HTML还是Markdown

    6.3 MVC还是SPA

    6.4 安全

7. 结束语

“博客”的前世今生

博客一开始不叫 Blog,而叫 Weblog,可能让很多人诧异的是,它并不诞生于Web 2.0时代,而是早在1997年已经问世。博客从最早的单用户(单独作者),逐渐发展为多用户(一个团队),即博客平台。而 Web 2.0 时代赋予了博客社交属性,可以让读者进行评论、订阅(RSS/ATOM),博客作者之间可以互相抱团(FOAF)、引用文章(Pingback),才让博客逐渐热门了起来。

博客系统也是各有千秋,PHP 有 WordPress,.NET 有BlogEngine。而最终,WordPress 几乎成为了事实上的博客系统的标准,它同时具备一些 CMS 的功能,微软官方 .NET 团队的博客也是采用 WordPress 搭建。

图 | 网络

阅读博客的用户除了使用浏览器,还会使用 RSS/Atom 阅读器。在 iPad 刚出来的年代,阅读器应用曾经风靡一时。订阅的博客一旦有新文章,阅读器就会自动收入,读者无需每天人肉检查是否有新文章发布。Microsoft 365 的 Outlook 至今保留着 RSS 阅读器的功能。

博客至今依然是表达自我、传播信息并与社区互动的最佳途径之一,就算微博(microblogging)出现,也没能使博客变得不再流行。所以说,博客之于互联网,就如同电子邮件一样,“姜还是老的辣”,博客作为一种文化载体,历久弥新,持久散发着光芒。

我的博客故事

我的博客项目最早可追溯到2003年,那时候我正在上初中,课余时间自学了 ASP 及 Access,构建了我的第一个个人网站,主题居然是黑客技术(年少无知,以为非常酷炫)。除了原创及转载技术文章,也提供常用软件工具下载等服务,有时候还假装大学生帮人完成ASP的毕业设计(毕竟说自己是初中生没人会相信)以换取Q币、QQ秀等(太有年代感…)。这个系统一直维护到2007年我上高二,它长这样:

(图:2003-2007年的个人网站)

高考之后,我终于有大量的时间学习自己想了解的技术,且不用担心被家长埋怨不好好学习。那会我自学了ASP.NET(VB),构建了我的第二代个人网站,主题不再是黑客技术,而是常规的计算机技术分享,主打原创技术文章(日志),同时也开发了相册、播客等 SNS 功能,并于2009年上线,它长这样,一直维护到2011年。

(图:2009-2011年的个人网站)

2012年毕业以后,我当了一名工程师(程序猿),没有精力维护软件下载、相册和播客等栏目,于是决定只做技术文章,大刀阔斧地改版了我的网站,博客的雏形就出来了。为了构建博客,我参考了同样是 .NET 的 BlogEngine 项目。其实国内某著名的 .NET 博客平台,最早就使用了 BlogEngine 项目,甚至它当年还有个中文版,叫博易。不过与其直接魔改他人的项目,我选择看懂代码以后,自己用不同的方式去实现。本文之后要介绍的许多内容也来源于这段时间的学习。

毕业7年后,发现各项技术发展迅猛,.NET 技术与其他主流技术的竞争非常激烈,而长期在外企的我主要运用的还是 .NET 的技术。此时我下定决心,在业余时间里,用 .NET Core 重写我的博客系统,命名为 Moonglade,并开源到GitHub(https://github.com/EdiWang/Moonglade)目前博客地址是 https://edi.wang。内容面向国外社区,部署在微软Azure的海外服务器上(国内访问可能较慢)。

刨除初中时代牛刀小试的 ASP 不说,从2009年到2020年这11年间,我的博客代码横跨十几年 .NET 发展历程,从ASP.NET WebForm 2.0 VB.NET + Access 到现在的ASP.NET MVC Core, C# 8 及 Azure SQL Database,也整合了 Azure App Service、Azure DNS、Azure DevOps、Azure Active Directory、Azure Blob、Azure AD、Azure CDN 和 Application Insights 等技术。

(图:Moonglade博客系统使用的Azure服务)

谁是博客的受众?

在谈设计博客之前,我们首先要明确,你的读者从何而来?搞清楚这一点后,才能够联想出用户将如何使用你的产品。这也正是本文所要介绍的博客的设计方法和要点。

开发和运营博客11年的经验积累和数据统计告诉我,对于一个常规技术博客,95%以上的流量来自于搜索引擎,并且多数情况下读者只查看这一篇他们所需要的文章,固定读者或订阅用户占总流量的比例相当少。这是由于技术博客分享的内容多数为解决一个具体的技术问题。而技术人员遇到技术问题的第一反应就是去搜索引擎查找有没有人曾经遇到过并已经解决,有可能复制粘贴文章里的代码去解决自己项目里的问题后,就忘记了博主的存在。只有真正觉得博主的文章有一定水平,才会开始浏览博客里的其他内容。

不难发现,我们的用户入口几乎就是搜索引擎,所以一个优秀的博客系统,并不是只做好文字功夫,需要大量考虑SEO及其他针对机器和系统之间交互的博客协议,时刻考虑SEO也是贯穿本文的重点

本文并不教大家代码的设计、技术实现,而是教大家博客系统的设计思路和要点。至于技术方面,大名鼎鼎的WordPress、前辈们的 BlogEngine.NET,以及我的Moonglade,目前都已开源的,可供大家随时研究。

下篇我将介绍【博客基本功能设计要点】

敬请关注

汪宇杰博客

.NET | Azure | 微软MVP

长按扫码关注我们

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 分片

MongoDB 分片 高数据量(消耗内存)和高吞吐量(消耗CPU)的数据库应用会对单机的性能造成较大压力,为了解决这些问题,一般采用两种方法:水平扩展(将数据集分布在多个服务器上&#xff…

How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)

题目: 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m)。游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标有的能量。 2.机器人只能向右或者向下走,并且每走一步消耗一单位…

Sql Server之旅——第七站 复合索引和include索引到底有多大区别?

索引和锁,这两个主题对我们开发工程师来说,非常的重要。。。只有理解了这两个主题,我们才能写出高质量的sql语句,在之前的博客中,我所说的索引都是单列索引。。。当然数据库不可能只认单列索引,还有我这篇的…

掌握了Docker Layer Caching才敢自称精通Dockerfile

长话短说:本次原创将向您展示在Docker中使用Layer Cache以加快镜像构建。“这个话题的初衷在于:应用打包过程是很慢的(下载并安装框架&第三方依赖包、生成assets),这个过程在Docker中也不能避免。About Layer Caching in DockerDocker使…

How Many Answers Are Wrong HDU - 3038(带权并查集)

题意: TT写一个数列,现在TT会选择一个区间,然后让FF计算这个区间里面所有数的和,FF准备捉弄一下TT,有时候她会故意计算出来一个错的答案,当然TT也比较聪明,他会发现这个答案跟以前的答案会有冲…

ASP.NET Core on K8s学习之旅(14)Ingress灰度发布

【云原生】| 作者/Edison Zhou这是恰童鞋骚年的第236篇原创文章上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,然后我还录了一个快速分享小视频介绍了一下蓝绿发布和灰度发布策略的基本概念,本篇介绍一下如何实战使用Nginx Ingress实现…

[汇编语言]实验:应用更灵活的寻址方式来定位内存地址

实验内容: (1)将datasg段中每个单词的头一个字母改成大写字母。 datasg段中的数据为: (2) 将datasg段中每个单词的字母改成大写字母。 datasg段中的数据为: ibm dec dos vax …

你需要了解操作系统发展历程

本文我们大概回顾计算机操作系统发展历程,这里不会记录关于操作系统的完整历史记录,只是记录那些里程碑事件,看看各位接触计算机时,操作系统发展正处于哪个年代起初没有操作系统,没有编程语言或编译器,甚至…

基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据

上一篇文章完成了项目的全局异常处理和日志记录。在日志记录中使用的静态方法有人指出写法不是很优雅,遂优化一下上一篇中日志记录的方法,具体操作如下:在.ToolKits层中新建扩展方法Log4NetExtensions.cs。//Log4NetExtensions.cs using log4…

第一讲 工作区和GOPATH

此为 《极客时间&Go语言核心36讲》 个人笔记,具体课程详见极客时间官网。 Table of Contents generated with DocToc 第一讲 工作区和GOPATH 1. 环境变量配置2. 配置GOPATH的意义 2.1 Go语言源码的组织方式2.2 源码安装后的结果(归档文件、可执行文…

开发大会上,前微软CEO放出的狠话!.NET开发随时起飞,你准备好了吗?

“开发者,开发者,开发者,开发者”,微软前任CEO史蒂夫鲍尔默(Steve Ballmer)用这种略带疯狂、又唱又跳的方式表达他对开发者的热爱。不夸张的说,相比二十年前那个如日中天的巨无霸微软,现在的微软比以往任何…

程序员过关斩将--为微服务撸一个简约而不简单的配置中心

点击上方蓝字 关注我们毫不犹豫的说,现代高速发展的互联网造就了一批又一批的网络红人,这一批批网红又极大的催生了特定平台的一大波流量,但是留给了程序员却是一地鸡毛,无论是运维还是开发,每天都会担心服务器崩溃&a…

Just a Hook HDU - 1698(查询区间求和+最基础模板)

题意: 给你一个1~n的区间,起始区间内均为1,然后对子区间进行值更新,最后求区间和。 题目: In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is ma…

DDIA笔记——数据复制

Table of Contents generated with DocToc 此篇为《数据密集型应用系统设计》(DDIA)读书笔记,笔记可能存在遗漏,建议直接阅读原书。 第五章 数据复制 主从复制 复制滞后复制滞后带来的问题 多主节点复制 适用场景处理写冲突拓扑结…

基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理

上一篇文章成功使用了Redis缓存数据,大大提高博客的响应性能。接下来,将完成一个任务调度中心,关于定时任务有多种处理方式,如果你的需求比较简单,比如就是单纯的过多少时间循环执行某个操作,可以直接使用.…