Web 应用程序 - 如何动态显示公告
Web Apps - How to Dynamically Present Announcements
我正在开发一个 web 应用程序,它有一个显示更新和公告的页面。我不熟悉其他网站是如何做到这一点的。人们是否将他们的 announcements/updates 存储在数据库中,并在有新公告时更新他们的数据库?
人们用来大规模完成此类任务的标准方法是什么?
我不知道您使用的编程语言或技术是什么。但是,我想你想要实时更新和公告。我建议您使用像 FCM 这样的实时数据库来处理它:
https://firebase.google.com/docs/cloud-messaging/concept-options?hl=id
在此示例中,它使用 NodeJS:
https://thecodebarbarian.com/sending-web-push-notifications-from-node-js.html
这取决于你想如何处理它。
有些人使用这种存储在数据库中并更新它的技术。
另一种方法是,如果您从其他网站获取参考资料,则可以简单地使用网络爬虫来导入 announcement/notices,而您也不需要创建数据库。但是,您的网站会有点慢,但会节省数据库内存。
在不进行硬编码的情况下将文本放到网页上的标准方法是使用内容管理系统或 CMS。这可以是大而复杂的,也可以是简单而轻量级的。
我见过的最有效的方法是使用“无头 CMS”,它为 non-technical 人提供 UI 来输入内容,以及 API 允许您的应用程序以获取该内容(例如 JSON),并在您使用的任何框架中呈现它。这适用于“公告”或其他文本内容,如常见问题解答、条款和条件等。
另一种方法是使用“静态站点生成器”,它获取特定格式的文本并将其输出为 HTML。您可以使用它来构建一个管道,以获取以 markdown 编写并提交给 Git 的“公告”,这些公告由静态站点生成器转换为 HTML 片段,然后您可以使用您的 NodeJS 应用程序呈现该片段.
如前所述,CMS(内容管理系统)可能是可行的方法。如果您还没有决定如何构建您的网络应用程序,我强烈建议您使用网络框架。
如果您正在寻找好的解决方案,我会推荐 Django 和 Django CMS。
两者都有详细记录,open-source 并且可以根据需要扩展。
姜戈:
https://docs.djangoproject.com/en/3.1/contents/
Django 内容管理系统:
有很多可能的解决方案,都有不同程度的难度和灵活性:
1.在您的 HTML 页面
中对所有内容进行硬编码
这是短期内更容易的解决方案,但随着项目的增长,它会变得越来越难。即使对于较小的项目,我也不建议这样做。
2。将列表保存在已提交的数据源上
例如,在您的项目中创建一个具有以下结构的 JSON 文件:
[
{
"type": "announcement",
"date": "2020-08-18",
"title": "New announcement!",
"content": "Bla bla bla...",
},
{
"type": "update",
"date": "2020-08-18",
"title": "Version 2.1.0",
"content": "Here is the changelog: ...",
},
]
然后您的网络应用程序可以加载此文件并相应地呈现它。这种方法有一些优点:
- 您不需要每次都重写所有样板文件html
- 更新页面上的更改已提交,因此更容易查看或取消
但是,您仍然需要在 content
字段中插入 html,而且每次手动操作都可能会有问题(尤其是当您需要添加图像、表格或更复杂的元素时) .此外,更改在代码库中,因此不能委托给 not-technical 人(例如营销经理)。
另外,每次加载和解析一个json文件效率不是很高。您可以添加一些缓存,但它的性能仍然不如数据库
3。在数据库中手动保存列表
这个解决方案与编号(2)非常相似。它提供了一些性能改进,但大多数其他缺点仍然存在。
4。使用数据库并为 creating/editing/publishing 公告
实现 GUI
理想的解决方案是使用数据库,同时在后端实现一个限制区域,可以使用所见即所得的编辑器管理公告。
优点:
- 最大的灵活性,不需要每次都手写HTML
- 任何人都可以编写和发布公告,不一定是开发人员
缺点:
- 你需要开发整个editing/publishing系统
基本上你想要的是一个后端,它运行一个供客户端绑定的 websocket 端口。因此,客户端会将他的请求发送到 post 公告,这可以通过网络套接字或任何其他 API(REST、SOAP、GraphQL)。
服务器然后可以将公告保存在其数据库中 or/and 向所有连接的客户端推送更新,通知是通过 websocket 端口添加的。然后客户端可以根据自己的逻辑处理服务器的响应。
要通过 websocket 获取在通知时未连接的客户端的通知,您可以只回复客户端断开连接后发出的所有通知。
我正在开发一个 web 应用程序,它有一个显示更新和公告的页面。我不熟悉其他网站是如何做到这一点的。人们是否将他们的 announcements/updates 存储在数据库中,并在有新公告时更新他们的数据库?
人们用来大规模完成此类任务的标准方法是什么?
我不知道您使用的编程语言或技术是什么。但是,我想你想要实时更新和公告。我建议您使用像 FCM 这样的实时数据库来处理它: https://firebase.google.com/docs/cloud-messaging/concept-options?hl=id
在此示例中,它使用 NodeJS:
https://thecodebarbarian.com/sending-web-push-notifications-from-node-js.html
这取决于你想如何处理它。 有些人使用这种存储在数据库中并更新它的技术。
另一种方法是,如果您从其他网站获取参考资料,则可以简单地使用网络爬虫来导入 announcement/notices,而您也不需要创建数据库。但是,您的网站会有点慢,但会节省数据库内存。
在不进行硬编码的情况下将文本放到网页上的标准方法是使用内容管理系统或 CMS。这可以是大而复杂的,也可以是简单而轻量级的。
我见过的最有效的方法是使用“无头 CMS”,它为 non-technical 人提供 UI 来输入内容,以及 API 允许您的应用程序以获取该内容(例如 JSON),并在您使用的任何框架中呈现它。这适用于“公告”或其他文本内容,如常见问题解答、条款和条件等。
另一种方法是使用“静态站点生成器”,它获取特定格式的文本并将其输出为 HTML。您可以使用它来构建一个管道,以获取以 markdown 编写并提交给 Git 的“公告”,这些公告由静态站点生成器转换为 HTML 片段,然后您可以使用您的 NodeJS 应用程序呈现该片段.
如前所述,CMS(内容管理系统)可能是可行的方法。如果您还没有决定如何构建您的网络应用程序,我强烈建议您使用网络框架。
如果您正在寻找好的解决方案,我会推荐 Django 和 Django CMS。 两者都有详细记录,open-source 并且可以根据需要扩展。
姜戈:
https://docs.djangoproject.com/en/3.1/contents/
Django 内容管理系统:
有很多可能的解决方案,都有不同程度的难度和灵活性:
1.在您的 HTML 页面
中对所有内容进行硬编码这是短期内更容易的解决方案,但随着项目的增长,它会变得越来越难。即使对于较小的项目,我也不建议这样做。
2。将列表保存在已提交的数据源上
例如,在您的项目中创建一个具有以下结构的 JSON 文件:
[
{
"type": "announcement",
"date": "2020-08-18",
"title": "New announcement!",
"content": "Bla bla bla...",
},
{
"type": "update",
"date": "2020-08-18",
"title": "Version 2.1.0",
"content": "Here is the changelog: ...",
},
]
然后您的网络应用程序可以加载此文件并相应地呈现它。这种方法有一些优点:
- 您不需要每次都重写所有样板文件html
- 更新页面上的更改已提交,因此更容易查看或取消
但是,您仍然需要在 content
字段中插入 html,而且每次手动操作都可能会有问题(尤其是当您需要添加图像、表格或更复杂的元素时) .此外,更改在代码库中,因此不能委托给 not-technical 人(例如营销经理)。
另外,每次加载和解析一个json文件效率不是很高。您可以添加一些缓存,但它的性能仍然不如数据库
3。在数据库中手动保存列表
这个解决方案与编号(2)非常相似。它提供了一些性能改进,但大多数其他缺点仍然存在。
4。使用数据库并为 creating/editing/publishing 公告
实现 GUI理想的解决方案是使用数据库,同时在后端实现一个限制区域,可以使用所见即所得的编辑器管理公告。
优点:
- 最大的灵活性,不需要每次都手写HTML
- 任何人都可以编写和发布公告,不一定是开发人员
缺点:
- 你需要开发整个editing/publishing系统
基本上你想要的是一个后端,它运行一个供客户端绑定的 websocket 端口。因此,客户端会将他的请求发送到 post 公告,这可以通过网络套接字或任何其他 API(REST、SOAP、GraphQL)。
服务器然后可以将公告保存在其数据库中 or/and 向所有连接的客户端推送更新,通知是通过 websocket 端口添加的。然后客户端可以根据自己的逻辑处理服务器的响应。
要通过 websocket 获取在通知时未连接的客户端的通知,您可以只回复客户端断开连接后发出的所有通知。