草庐IT

无头CMS vs 解耦CMS,如何抉择?

陈峻 2023-03-29 原文

译者 | 陈峻

审校 | 徐杰承

如果你的企业正处于数字化转型初期,那么你很可能会对该如何选择内容管理解决方案感到困惑。毕竟,在市场上,我们可以找到各种CMS产品。然而它们就像巴别塔一样,虽然有着相似的功能,也传达相同的信息,但是它们很可能源自不同类型的语言。

因此,在考虑对数字化项目进行CMS迁移之前,更好地理解相关概念是非常必要的。下面,我将向您介绍两个典型的概念:无头(headless)CMS和解耦(decoupled)CMS的定义、差异、以及优劣势。

1、什么是无头CMS?

在传统的CMS架构中,head代表了前端而body代表着后端。无头CMS是与前端分离的内容管理系统。换句话说就是前端被淘汰了,只留下了后端,而且后端充当着内容存储库的作用。这代表着即使我们可以使用无头CMS来编写、保存和发送内容,但内容仍然需要被独立地呈现。此外,由于原本紧密联系的前端表示层不再管理后端,因此内容将可以被推送到任何地方。

在使用无头CMS时,开发人员可以通过多种方式对表示层进行处理。例如,开发人员可以根据他们所理解的Web项目应该如何运行,去选择Angular等动态JS框架,以及Gridsom、Nextjs、TezJS或Gatsby等静态站点生成器。

那么,针对Web开发的无头CMS对于开发者而言有何意义呢?最主要的方面在于,它能够让开发人员快速地创建前端的用户界面,并允许他们选择任何语言进行编码。

2、无头CMS的优势

下面,让我们详细讨论使用无头CMS给Web开发带来的优势:

  • 全渠道体验——开发者可以通过单一的后端,高效地实现跨不同平台或系统的内容分发。
  • 原生的灵活性——由于没有内置的模板,因此开发人员和营销人员可以选择不同的技术,打造出独特的用户体验。
  • 可扩展性——由于前端和后端是分开的,因此开发人员可以升级和自定义数据信息,而不影响系统的整体性能。
  • 节约时间——可以将相同的内容,快速地分发到多个不同的站点,并且可以在不产生任何额外成本的情况下实施灵活的调整。
  • 轻松的改造——开发者只需进行局部调整,而无需对整个系统进行重新设计。

3、无头CMS的劣势

下面,让我们来看看无头CMS的劣势:

  • 较强的依赖性——由于缺乏自行生成页面布局所需的可视化工具,因此营销人员需要通过与开发人员开展密切合作,来可视化其内容发送到渠道之中的整个过程。
  • 无内容预览——开发人员无法在内容上线之前,轻松地进行预览,这一点只能依赖第三方工具予以解决。
  • 没有轮廓的表示层——一旦缺乏预制的模板或主题,开发人员就需要使用各项技术来充当“头部”。

4、什么是解耦CMS?

前端和后端的分离是导致CMS解耦的主要原因。与经常将后端和前端开发结合在一起的传统CMS不同,解耦CMS的开发和交付内容策略是分离且互相独立的。

同时,解耦的CMS也不会对项目做出任何假设。相反,它能够提供模板和开发工具,来帮助开发者创建所需的组件。

与无头CMS不同,解耦CMS有一个可选的头部。简而言之,解耦的CMS可以在考虑表示层的同时,去执行与无头CMS相同的所有操作。

虽然解耦CMS提供了截然不同的前端和后端的灵活性,但是它们也需要发布的支持。开发者可以在无需更改CMS实施方式的基础上,对目标网站执行完全改造。这使得解耦CMS更适合轻松地打造面向未来的网站。因此,解耦CMS正在成为各个企业中的热门选择。

5、解耦CMS的优势

下面,让我们来讨论使用解耦CMS进行Web开发的优势:

  • 面向未来——其适应性更适合对用户界面方面进行修改。
  • 原生快速——与标准的CMS相比,其内容的分发更快、更灵活、更通用。
  • 更快地发布——由于部署更简单,因此新的架构可以更快地被投入使用。
  • 合作伙伴的应用与协作——它与第三方的集成更为简单,中断也更少。
  • 依赖性低——与无头CMS相比,它对于开发人员和发布者的依赖性更小。

6、解耦CMS的劣势

解耦CMS的缺点主要体现在如下方面:

  • 成本上升——合并与集成第三方应用会增加平台的标准化成本,并且容易出现管理上的问题。
  • 增强的用户需求——由于它比传统的CMS更复杂,因此内容创建者需要对系统有更深入的了解,才能执行各种内容策略。
  • 对于技术能力的需求——与无头系统相比,解耦CMS需要更多的开发工作,尤其是在创建前端方面。

7、无头CMS和解耦CMS的区别

为了能帮助你顺利的做出适当的选择,下面我们来重点讨论无头CMS和解耦CMS之间的区别:

  • 解耦CMS可以被视为一种主动的方式,而无头CMS则是一种被动的途径。也就是说,一旦我们在后台准备好相关内容,解耦CMS架构就会主动地向多个渠道交付和呈现已格式化的内容。
  • 无头CMS缺乏自行向最终用户交付内容的功能,并只能作为纯内容的数据源。也就是说,尽管相关内容已经被创建和维护,但它们只是停滞在那里,等待着各种的API请求,才能将其提供给不同的系统和应用。

8、小结

如今,众多大厂已将我们带入了物联网时代,各种内容信息纷至沓来。我们可以选用无头CMS或解耦CMS的方法,来构建自己的内容管理系统。希望本文中所罗列的有关两者的基本描述,优劣势等信息,可以协助你从设备、渠道和品牌等方面,顺畅地评估哪一种架构,更能够有效地为你的企业和业务目标交付出更加完备的前端与后端系统,并为应用提供必要的支持和管理。

原文链接:https://readwrite.com/cms-architecture-difference-between-headless-cms-and-decoupled-cms/

译者介绍:

陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

有关无头CMS vs 解耦CMS,如何抉择?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐