std::stack_MEAN vs. LAMP Stack:优点和缺点

随着技术和后端语言的发展, Web堆栈已经发展了数十年。 当前最流行的两个Web堆栈是LAMPMEAN 。 他们依靠两种不同的技术来实现后端语言,数据库和服务器环境。 “堆栈”一词是指相互堆叠以创建Web服务器环境的技术

在本文中,我想通过查看它们的技术选择(优缺点)来阐明这两个Web堆栈。 每个堆栈在哪里都有优势? 哪种类型的项目将从这两种选择中受益最多? 如果您不熟悉Web技术,或者只是想了解这两个堆栈,那么本指南将为您提供所需的一切。

传统的LAMP开发

大多数开发人员应该了解传统的LAMP堆栈,因为它早在Web时代就已经存在。 LAMP代表Linux,Apache,MySQLPHP 。 所有这些都是独立的软件包,这些软件包组合在一起构成了通用的服务器解决方案。

坚持使用LAMP的最大原因是安全性和广泛的支持 。 它已经存在了数十年,并且是托管网站的一种行之有效的方法。

所有后端技术(例如PHP和MySQL)都是众所周知的,并受到每个主要托管服务提供商的支持 。 如果您使用LAMP堆栈,则基本上可以在任何地方托管。 此外,您还可以访问最受欢迎的CMS引擎 。 WordPress,Drupal和Joomla都在PHP / MySQL上运行。

灯堆栈图标

LAMP体系结构中有一些可自定义的选项 ,例如LEMPnginx替换Apache。 您还可以在Windows服务器上以WAMP堆栈的形式运行变体。

但是,所有核心软件(包括Apache,MySQL和PHP) 都是开源的 ,并且主要是针对Linux制作的。 这就是为什么Linux在服务器环境中最有意义,这就是LAMP经受了现代Web开发时间的考验的原因。

大多数开发人员都选择这条路线,因为这是使网站在线的最简单方法 。 您将在论坛上找到很多支持,这些支持涵盖了配置LAMP环境和对LAMP环境进行故障排除所需的一切。 例如,您可以查看此ServerFault问题以获取更多信息。

带有MEANJavaScript后端

Node.js是开发人员的最新技术,他们决心运行使用JavaScript构建的可伸缩应用程序。 节点MEAN堆栈提供了动力 ,并提供了一个主要优势:一切都以一种语言运行

MEAN代表MongoDBExpress.jsAngular ,当然还有Node.js。 该首字母缩写词对服务器操作系统或服务器软件没有要求。 MEAN堆栈可以在任何OS上运行 ,并且Node甚至带有自己的服务器来处理后端的JS。

均值

您可以在MeanJS网站上找到许多文档和支持。

尽管此堆栈已引起了广泛的关注,但与传统的LAMP堆栈相比,它仍然远远没有达到稳定的支持量。

那么,为什么有人会选择MEAN? 因为它最终更快更容易扩展MongoDB是一个NoSQL数据库 ,可以优化查询。 全栈JavaScript的使用还可以改善开发,因为一种语言适用于所有前端和后端工作。

加上许多其他JS框架作为稳定的解决方案投放市场。 例如,可以将MEAN切换到MEEN堆栈,将Angular替换为Ember

Ember.js

程序员会喜欢MEAN堆栈,因为它为保持可维护性和增长将代码分开 。 这样可以更轻松地组织JavaScript Web应用程序,使其在自然环境中运行

在这个问题上有很多东西要学习,这可能是新开发人员进入的最大障碍。 学习管理MEAN应用程序所需的所有技术可能需要几个月的时间。 但是,如果您喜欢Node,并且想在JavaScript上运行所有程序,那是值得的。

以下是一些初学者的入门指南。

PHP与节点

PHP从90年代中期开始出现,并且确实是最流行的后端语言。 许多Web开发人员从(或最终学习)PHP开始,因为它在Web平台和托管提供商中占主导地位。

Node.js现在无处不在。 您今天使用的许多Web应用程序都可以使用带有NPM的 Node.js作为事实上的软件包管理器,其中包括强大的前端框架(例如Angular)

角度2

Node的另一个好处是它带有自己的Web服务器 。 JavaScript是MEAN堆栈上所有内容的根本,因此,如果您喜欢JS,那么您将非常喜欢构建MEAN Web应用程序。

许多开发人员认为PHP是一种设计不良的语言,因为创建者Rasmus Lerdorf实际上并未将其设计为语言。 PHP最初是网站通用解决方案,后来Swift发展为一个庞大的不相关功能的库。

但是,随着PHP 7尝试修复该语言的许多错误,以及使用OOP框架(如Laravel) ,PHP现在比以往任何时候都更好。

代码编辑器中的Lavarel代码
图像:Stackoverflow

因此,语言辩论取决于您的个人选择 。 您真的喜欢编写JavaScript吗? 那么具有MEAN堆栈的Node可能值得考虑。

如果您已经了解PHP,并且想坚持自己的知识,那么LAMP也是一条可行的路线。

总体利弊:

每个Web堆栈都有多个要比较的 ,包括操作系统,服务器软件,数据库和后端语言。

  1. MEAN堆栈包括Angular ,这是一个前端框架。 LAMP堆栈中没有任何必需的框架,但是您始终可以将自己的框架添加到所构建的任何应用程序中。
  2. 关于操作系统,LAMP堆栈寻找Linux的派生版本。 无论堆栈如何, Linux通常都是服务器环境的最佳选择 ,MEAN也是如此。
  3. 现在,服务器的操作系统只是计算机软件,而不是Web服务器软件 。 为此,您需要一个类似Apache或nginx的程序。 LAMP使用Apache,因为它是可用的最稳定的选择之一。
  4. Nginx的
  5. MEAN使用Node.js服务器 ,它是Node软件包的一部分 。 它仍然是相当新的,尽管那里有很多支持,但是Node的社区规模与Apache差不多。
  6. 另外,节点服务器需要JavaScript后端 (无扩展名)。 Apache 支持大多数后端语言 ,并且有许多免费扩展以提供更好的支持。 但是到目前为止,Apache尚无Node支持。
  7. 数据库管理是您发现最大差异的地方 。 LAMP使用MySQL进行关系数据存储,而MEAN使用MongoDB这是一个非关系数据库 。 非关系型数据库的速度要快得多 ,并且提供了一种更轻松的扩展方式以提供更高的流量。
  8. MongoDB徽标
  9. 请记住, PHP不仅限于MySQL 。 它可以使用MongoDB和其他替代方法,例如PostgreSQL或SQLite。 只是大多数PHP开发人员都知道MySQL,因此它是典型LAMP堆栈的主要竞争者。
  10. MEAN堆栈通常运行速度更快规模更大 ,但是需要更多的时间和服务器知识来学习系统。 LAMP堆栈经过了反复试验 ,它们开箱即用,具有最安全的基础架构和可想象的最广泛的支持。
  11. 编程语言在这两个堆栈之间有很大的不同。 LAMP主要在包含WordPress和Laravel框架PHP上工作。 MEAN在后端使用ExpressJS / NodeJS,而在前端使用AngularJS。
  12. MEAN是全栈式JavaScript ,您需要学习很多才能使其运行。 新创业公司经常选择愿意突破Web应用程序开发的界限。 LAMP更传统, 前端JS,后端为PHP 。 它是为那些只希望使网站在线而不必担心太多的人而设计的
结语

我想说大多数网站都倾向于LAMP堆栈,因为它已经过测试,并且在Google中有很多有用的问答线程。 MEAN仍在增长,并且也有足够的支持,但可能比大多数人想要处理的技术更多。

随意尝试两者,并亲自体验一下。 可以将这两个安装程序本地安装在您的计算机上,并在不使用远程服务器的情况下基于它们进行构建。

而且,如果您要在任一堆栈上查找更多信息,我在下面收集了一组方便的链接。


翻译自: https://www.hongkiat.com/blog/mean-vs-lamp-stacks/

这是上题的代码:def infix_to_postfix(expression): precedence = {'!': 3, '&': 2, '|': 1, '(': 0} op_stack = [] postfix_list = [] token_list = expression.split() for token in token_list: if token.isalnum(): postfix_list.append(token) elif token == '(': op_stack.append(token) elif token == ')': top_token = op_stack.pop() while top_token != '(': postfix_list.append(top_token) top_token = op_stack.pop() else: # operator while op_stack and precedence[op_stack[-1]] >= precedence[token]: postfix_list.append(op_stack.pop()) op_stack.append(token) while op_stack: postfix_list.append(op_stack.pop()) return ' '.join(postfix_list) class Node: def __init__(self, value): self.value = value self.left_child = None self.right_child = None def build_expression_tree(postfix_expr): operator_stack = [] token_list = postfix_expr.split() for token in token_list: if token.isalnum(): node = Node(token) operator_stack.append(node) else: right_node = operator_stack.pop() left_node = operator_stack.pop() node = Node(token) node.left_child = left_node node.right_child = right_node operator_stack.append(node) return operator_stack.pop() def evaluate_expression_tree(node, variable_values): if node.value.isalnum(): return variable_values[node.value] else: left_value = evaluate_expression_tree(node.left_child, variable_values) right_value = evaluate_expression_tree(node.right_child, variable_values) if node.value == '!': return not left_value elif node.value == '&': return left_value and right_value elif node.value == '|': return left_value or right_value expression = "!a & (b | c)" postfix_expression = infix_to_postfix(expression) expression_tree = build_expression_tree(postfix_expression) variable_values = {'a': True, 'b': False, 'c': True} result = evaluate_expression_tree(expression_tree, variable_values) print(result)
最新发布
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值