3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
你应该考虑在构建高性能的Web应用程序的常见的原则(特别是在后端部分)。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
以下讨论的概念在这里可以适用于任何语言和框架。虽然这篇文章将介绍一些具体的实例,设计模式和工具,主要用于PHP生态系统。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
how to build a Web架构?3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
在我们开始的基本规则,快速构建Web应用程序,我想推荐我们建立一个基于SaaS架构可靠的云近的博客3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
TL;DR的基本规则快速构建Web应用程序:3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则1、避免过早优化3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则2、做的工作的低数额来解决问题3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则3、推迟你不需要马上做的工作3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则4、当你可以使用缓存3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则5、了解和避免N 1查询问题与关系型数据库3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则6、准备你的应用程序时可能的横向扩展3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则1:避免过早优化3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
其中著名的高德纳的名言说:3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
Knuth注意到,很多软件开发商普遍浪费大量时间思考性能的非关键零件,他们所写的代码。为了避免陷入过早优化陷阱你应该不用担心性能写代码的第一个版本。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
然后你可以使用Profiler来检测你的代码和看到的瓶颈在哪里。这样你就可以专注于真正需要你关注的部分改进。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
Knuth的话并不意味着你不需要在所有关于优化护理并不是写烂代码的借口然后放弃它。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
它应该被视为一种鼓励学习如何“优化灵活”,你应该读它的方式。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
如果你的工作是在PHP的土地有很多工具,你可以很容易地通过测试你的代码:
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
Xdebug:可能是著名的PHP调试器和profiler,它必须安装在一个PHP扩展和它在大多数的IDE容易积。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
xhprof:一个php函数层次轮廓。它配备了一个简单的基于HTML的导航界面,提供了一些很酷的区分能力比较代码的不同版本的性能。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
symfony的轮廓:symfony的分析器的symfony框架好的特点一一。它允许你检查每个请求的执行时间,展示一个很好的时间,让你轻松了解代码的哪些部分是耗时的。它是自动启用的“发展”模式,不需要任何PHP扩展来安装。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
秒表的组成部分:这是用在symfony的廓线测量一段PHP代码的执行时间,低水平的图书馆。它可以很容易地集成在任何PHP项目和不需要任何扩展。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
blackfire.io:探查器优化PHP提供了一个很好的Web界面,可以直观了解你的代码在CPU的大部分时间。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
天堂Blackfire:一个很有前途的替代,提供了大量的图形化的工具(时间,调用图等)使它很容易找到瓶颈。它的意思是连续运行(在生产)。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则2:只做你需要做的。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
很多时候你的代码比它需要做更多的事情。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
如果你在你的代码中使用复杂的库和框架,这是真实的。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
有一些设计模式和技术,可以帮助你避免这些情况,达到更好的性能。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
自动装填它是一个:PHP的特征允许你需要包含类定义的只有你要使用这个类是当文件(实例化,静态方法的调用,访问一个常数,等)。这样,你不应该担心它的文件包括在您的脚本,但只使用类,你需要。自会为你做的休息。配置自动加载在过去有点复杂,特别是因为每一个图书馆都使用自己的习俗,但今天感谢psr-0和psr-4的标准和工具,如作曲家是一块蛋糕,使用自动装填。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
依赖注入:这是一个非常常见的设计模式在java的世界,在过去的几年中有很多牵引甚至在PHP的世界也感谢symfony框架一样努力,Zend和Laravel提倡广泛使用。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
懒加载:另一个重要的设计模式用于推迟一个对象初始化直到需要它。它的主要使用对象与数据库连接这样的重资源或基于文件的数据源。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则3:我明天再做!3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
有多少次你需要发送一封邮件到用户在他/她引发你的Web应用程序的特定事件(如密码更改或订单完成)?有多少次你需要调整大小的图像在用户上传的吗?3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
这是很常见的在发送成功的消息给用户做这些“重”的操作。换句话说,我们的用户希望在他们的浏览器尽快看到一些消息,我们需要确保任何额外的任务(不直接相关,与创建的消息)应递延。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
做的常见的方式是使用工作队列,这意味着你必须存储需要执行的延迟任务到队列的一种数据量小(例如数据库、消息代理)和忘记它。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
你得马上回来你的主要任务:为用户产生的输出!3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
会有一些什么样的工人到位的目标从队列中读取并执行定期的推迟的工作(如发送电子邮件或生成图像的缩略图)。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
一个简单的排队系统可以轻松完成任何数据存储(经常使用或MongoDB使用)或消息代理一样RabbitMQ和ActiveMQ3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
Rule 4: Gotta Cache ’ 他们 所有 的 !3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
目前Web应用程序真的是件复杂的代码。为了生成每一个要求我们做很多事情的反应:连接一个或多个数据库,调用外部API读取配置文件、计算和汇总数据,将结果为解析的格式(XML、JSON等)或使它与模板引擎进入一个奇妙的HTML页面。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
使用我们可以为每个请求得到这样幼稚的做法,我们的服务器将永远不会厌倦做重复性的工作。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
但有一个聪明的和更好的方式来做重复工作,避免计算相同的结果一次又一次。这就是所谓的缓存。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
缓存被广泛应用于计算机科学和你几乎可以到处找到它。例如,内存本身可以被视为一种方式来缓存运行的程序的代码来避免读取CPU(慢)硬盘疏亿万次。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
一般有几种不同的级缓存重点在Web开发。从字节码缓存,应用缓存,代理缓存。看看这篇文章从卢西亚诺了解更多关于这些缓存类型
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
一旦你得到了缓存的概念,通过它真的很容易。问题出现时,你需要了解是否有改变和缓存版本的数据可能不相关了。在这种情况下,您需要删除的数据缓存来确保它得到正确的情况下它的要求。这个过程被称为“缓存失效”,通常是开发商的一点,一个非常著名的报价存在的疯狂:3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
没有银弹使缓存失效容易,它真的取决于你的代码的架构和应用程序的要求。一般不缓存层你有更好的:总是避免增加复杂度!3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则5:避免该死的N 1的查询问题3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
“then 1查询问题“是一个很常见的反模式中使用尤其是在处理关系数据库。基本上它是从数据库记录的查询生成N 1(一读N IDS和1的每一个记录)。看看下面这段代码有一个真实的案例(嗯…真的)例子:3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
代码加载一个用户列表先给定一块,为每一个用户,它负载他的后登录时间从数据库。这段代码产生以下N 1查询:3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
这显然是低效的,它经常与“有很多数据库”的关系,尤其是当你使用某种魔法的ORM,你不知道它是从盒子做(也许你还没有配置好)。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
通常你可以通过产生一个查询如下解决这个问题:
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
或用语法尽可能加入3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
这个问题只能解决当你在你的SQL查询控制或如果你有一个清楚的了解你所使用的ORM库(如果你使用一个)。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
无论如何,记住,你一定不要在N 1查询的陷阱,尤其是当你处理大数据集。很多PHP分析器允许你检查生成的查询每次请求页面时,他们可以理解如果你正在做的事情正确避免N 1查询问题方面非常有用的同伴。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
规则6:横向规模!3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
“可扩展性”是不完全相同的“表演”,但只这两件事是紧密交织在一起的。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
给你我个人的定义,“可扩展性”是一个系统的适应和保持功能没有明显的性能问题,当用户数增长的能力(要求)。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
这是一个非常复杂的话题,我不想在这里广泛进入细节。但为了表现值得了解和记住一些简单的事情你可以做,以确保您的应用程序可以很容易地扩展水平。3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
水平缩放is a particular调整策略你在其中添加更多的机器集群在您的应用程序部署。这样的负荷分在所有的机器,从而使整个系统能够保持高性能即使有大量的并发请求。
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联
考虑到当准备水平缩放两大问题用户会话和用户文件的一致性3XF北京网站设计开发,小程序开发,公众号,微信开发-云智互联