19天:性能和缓存
以前在symfonyob娱乐下载
出现日历天过去了,你越来越适应symfony框架及其概念。ob娱乐下载开发一个应用程序(如使用不是很要求如果你遵循的良好实践敏捷开发。然而,你应该做的一件事只要你的网站准备好了的一个原型是测试和优化其性能。
带来的开销一个框架是一个普遍的问题,特别是如果你的网站托管在一个共享服务器。尽管symfonyob娱乐下载不减慢服务器响应时间,您可能希望看到它自己和调整加快页面的代码交付。所以今天的教程将集中在性能度量和改进。
负载测试工具
单元测试,在描述十五日,可以验证应用程序是否按预期运行如果只有一个用户连接到它。但当你在互联网上发布您的应用程序——至少我们可以祝你——成群的狂热的球迷会急于同时,可能发生和性能问题。web服务器甚至可能失败,需要手动重启,这是一个非常痛苦的经历,你应该不惜一切代价避免。这是特别重要的在您的应用程序的早期,当第一个用户迅速得出结论,并决定传播这个词。
为了避免性能问题,需要模拟大量并发访问你的网站,看看它的反应,之前释放它。这就是所谓的负载测试。基本上,你计划一个自动发布到您的web服务器的并发请求,并测量返回时间。
请注意
无论你选择何种负载测试工具,您应该执行它比运行一个不同的服务器上的网站。这是由于测试工具通常CPU消耗,和他们自己的活动可能会扰乱服务器性能的结果。此外,你的本地网络测试,以避免干扰由于外部网络组件(代理、防火墙、缓存、路由器、ISP、等等)。
JMeter
最常见的负载测试工具JMeter,它是一个开源的Java应用程序维护的Apache基金会。它有令人印象深刻的在线文档欧宝官网下载app帮助您开始使用它,包括一个很好的介绍负载测试。
安装它,检索最新的稳定版本(目前2.1.1)Jmeter下载页面。你还需要的最新版本Java运行时环境你可以找到吗太阳的网站。JMeter开始,定位和运行jmeter.bat
文件(在Windows平台上)或类型java jmeter.jar
(在Linux平台上)。
设置一个负载测试计划,叫做“Web测试计划”,详细描述相关页面JMeter的文档,所以我们欧宝官网下载app不会描述它。
请注意
不仅JMeter报告平均响应时间为一个或一组给定请求的请求,它还可以做断言它接收的内容页面。所以,除了使用JMeter作为负载测试工具,您可以构建场景做回归测试和单元测试。
Apache的ab
第二个工具推荐的symfony ApacheBench,或ob娱乐下载ab,另外一个很好的工具由Apache基金会。它的在线手册不如JMeter的详细,但ab是一个命令行工具,它更容易使用。
在Linux中,涉及标准Apache包,如果您有一个安装了Apache服务器,你应该找到它/usr/local/apache/bin/ab
。在Windows平台上,它是更难找到,所以你最好直接从下载它ob娱乐下载。
这个基准测试工具的使用是非常简单的:
/usr/local/bin/apache2/bin/ab - c - n 1美元的http://www.askeet.com/,这是ApacheBench版本2.0.41-dev < $修订:1.121.2.12 $ > Apache - 2.0版权1996年亚当•Twiss宙斯科技有限公司,http://www.zeustech.net/ 1998 - 2002版权Apache软件基金会http://www.apache.org/基准www.askeet.com .....(耐心)完成服务器软件:Apache服务器主机名:www.askeet.com服务器端口:80文档路径:/文档长度:15525字节并发级别:1测试所花费的时间:0.596104秒完成请求:1失败的请求:0写错误:0总转移:15874字节HTML转移:15525字节每秒请求:1.68(# /秒)每个请求(意味着)时间:596.104(女士)每个请求(意味着)时间:596.104(女士)(的意思是,所有并发请求)传输速率:25.16 (kb /秒)收到的连接次数(ms)分钟意味着(+ / -标准差)马克斯连接中位数:61 61 0.0 61 61处理:532 532 0.0 532 532等:359 359 0.0 359 359:593 593 593 - 0.0 593
请注意
您需要提供一个页面名称(至少/
就像在上面的例子中),因为只针对主机将给一个URL格式不正确的错误。
的- c
和- n
参数定义并发线程的数量,并执行请求的总数。最有趣的结果是最后一行中的数据:平均总连接时间(从左边第二个数字)。在上面的示例中,只有一个连接,连接时间不是很准确。有一个更好的视图页面的实际性能,您需要平均并行多个请求并启动:
10美元/usr/local/bin/apache2/bin/ab - c - n 20 http://www.askeet.com/…连接次数(ms)分钟意味着(+ / -标准差)马克斯连接中位数:59 88 19.9 89 130处理:831 1431 510.9 1446 3030等:632 1178 465.1 1212 2781:906 1519 508.4 1556 3089比例的请求服务在一个特定的时间(ms) 1827 1556 1761 1569 75% 66% 80% 50% 90% 2285 3089 3089 3089 3089 99% 98% 100% 95%(最长的请求)
你应该从一开始ab - c - n 1
有一个想法的时间由测试本身在执行之前它在更大数量的请求。然后,增加总请求的数量(如ab - c 1 - n 30
),直到你有一个相当低的标准偏差。只有这样你会有一个显著的平均连接时间衡量,你将准备好实际的负载测试。添加线程一点点(别忘了增加相应请求的总数ab - n - c 300
),看看连接时间增加服务器负载处理。当平均加载时间超过几秒钟,它意味着你的服务器数量和可能不支持更多的并发线程。你已经确定的最大充电服务。这就是所谓的压力测试。
负载测试将向您提供两个重要的信息:一个特定页面的平均加载时间,您的服务器的最大容量。第一个是非常有用的监测性能改进。
改善与缓存的性能
有很多方法可以提高给定页面的性能,包括代码分析,优化数据库请求,添加索引,创建另一个光web服务器专用的媒体网站,没有一点等。现有技术是跨语言或php专用的,和浏览网页或购买一本好书将教你如何成为一个性能大师。
ob娱乐下载Symfony将一定过载添加到web请求,因为框架的配置和装载类为每个请求,因为MVC分离和ORM抽象导致更多的代码执行。虽然这开销相对较低(比其他框架或语言),symfony还提供平衡的响应时间和方法ob娱乐下载缓存。一个动作的结果,或甚至一个完整的页面,可以写在一个文件在web服务器的硬盘,这文件是类似的请求再次请求时重用。这大大提高性能,因为所有的数据库访问,装饰,和行动的执行是完全绕过。你会发现更多关于symfony的缓存的信息ob娱乐下载缓存章symfonyob娱乐下载的书。
我们将尝试使用HTML缓存加速交付流行的标签页。因为它包含了一个复杂的SQL查询,这是一个很好的候选人缓存。首先,让我们看看需要多长时间来加载它与当前的代码:
ab - c 1 - n 30美元http://askeet/popular_tags…连接次数(ms)分钟意味着(+ / -标准差)马克斯连接中位数:0 0 0.0 0 0处理:147 148 2.4 148 154等:138 139 2.3 139 145:147 148 2.4 148 154…
把缓存中的行动的结果
警告
在symfony 0.6以下不会工作。ob娱乐下载请跳到下一节直到本教程是更新。
动作执行显示流行的标签列表标签/受欢迎
。把这个动作的结果缓存,我们要做的是创建一个cache.yml
文件使用/应用程序/前端/模块/标签/ config /
目录:
受欢迎:激活:类型:槽:一生:600
这激活槽
这个动作类型缓存。行动的结果(视图)将存储在一个文件中缓存/前端/刺激/模板/使用/ popular_tags / slot.cache
文件,该文件将使用,而不是调用行动为下一个600秒(10分钟)后创建的。这意味着,广受欢迎的标签页面将被处理每十分钟,在之间,将使用缓存版本。
在第一个请求缓存完成,所以你只需要浏览:
http://askeet/popular_tags
…创建一个缓存版本的模板。现在,所有调用这个页面在接下来的十分钟应该会更快,我们将检查,立即又通过运行Apache基准测试工具:
ab - c 1 - n 30美元http://askeet/popular_tags…连接次数(ms)分钟意味着(+ / -标准差)马克斯连接中位数:0 0 0.0 0 0处理:137 138 2.0 138 144等:128 129 2.0 129 135:137 138 2.0 138 144…
我们通过从平均148毫秒到138毫秒,增加了7%的性能。缓存系统提高了性能显著。
请注意
的槽
页面的类型不绕过装饰(即插入模板的布局)。我们不能把整个页面缓存包含元素,在这种情况下,因为布局取决于上下文(例如用户名在前栏)。但对于非动态的布局,symfony还提供了一个ob娱乐下载页面
类型更有效。
建立一个登台环境
默认情况下,缓存系统是在开发环境中释放和激活在生产环境中。这是因为缓存页面,如果没有正确配置,可以创建新的错误。一个很好的实践关于web应用程序的测试,包括缓存页面是建立一个新的测试环境,类似于生产,但所有的调试和跟踪工具在开发环境中。我们通常叫它“登台”环境。如果出现错误的登台环境但不是在开发环境中,还有很多机会,这个错误是由于缓存的问题。
当你开发一个功能,确保它能正常工作在开发环境中。然后,更改缓存参数相关的行动来提高性能,并再次测试它的登台环境是否缓存系统不会产生功能扰动。如果一切工作正常,你只需要在生产环境中执行负载测试测量的改进。如果应用程序的行为和在开发环境中不同,你需要检查你的配置缓存。单元测试这个过程可以很大的帮助系统。
为了创建交付准备环境,您需要添加一个新的前端控制器和定义环境的设置。
复制生产前端控制器(使用/ web / index . php
)到一个使用/ web / frontend_staging.php
文件,并改变它的定义:
< ? php定义(“SF_ROOT_DIR”,realpath(目录名(__FILE__)。“/ . .”));定义(“SF_APP”,“前端”);定义(“SF_ENVIRONMENT”,“暂存”);定义(“SF_DEBUG”,假);require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR。“应用程序”.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR。“配置”.DIRECTORY_SEPARATOR。“config . php”);sfContext::getInstance()- >getController()- >调度();? >
现在,打开使用/应用程序/前端/ config / settings.yml
,并添加以下行:
分段:.settings: web_debug:缓存:no_script_name:
就是这样,交付准备环境,与web调试和缓存激活,可以使用要求:
http://askeet/frontend_staging.php/
把一个模板片段缓存中
尽可能多的使用页面的动态元素(一个问题描述,例如,包含一个“感兴趣吗?的链接可能会变成简单的文本如果用户显示它已经点击它),并不多槽
在我们的行动中高速缓存类型的候选人。但我们可以把大块的模板缓存,比如标签列表中为一个特定的问题。这个比流行的标签云棘手,因为这一块必须清除缓存的每次用户添加一个标记这个问题。ob直播app不过别担心,symfony很容易处ob娱乐下载理。
测量的改进,我们需要知道当前的平均加载时间问题/显示
页面。
ab - c 1 - n 30美元,http://askeet/question/what-can-i-offer-to-my-step-mother
首先,标签的列表的问题有两个版本:一个未注册的用户(这是一个标签云),和其他注册用户(这是一个列表的标签删除链接为用户自己输入的标签)。ob直播app我们只能放在缓存未注册用户的标签云(另一个是动态的)。ob直播app它位于标签/ _question_tags
模板部分。打开它(使用/应用程序/前端/模块/标签/模板/ _question_tags.php
),附上的片段是一个特殊的缓存如果缓存()(!)
声明:
…< ? php如果(sf_user美元- >isAuthenticated()):? >…< ? php其他的:? >< ? php如果(缓存!(“question_tags”,3600年)):? >< ? phpinclude_partial(“标记/ tag_ob直播appcloud”,数组(“标签”= > QuestionTagPeer::getPopularTagsFor(美元问题)))? >< ? phpcache_save()? >< ? phpendif? >< ? phpendif? >
的如果缓存()(!)
语句将检查是否一个封闭(称为版本的片段fragment_question_tags.cache
在缓存中)已经存在,年龄不超过一个小时(3600秒)。在这种情况下,缓存版本,和之间的代码如果缓存()(!)
和endif
不执行。如果不是,那么代码及其结果保存在一个片段执行文件cache_save ()
。
让我们看看造成的性能改进片段缓存:
ab - c 1 - n 30美元,http://askeet/question/what-can-i-offer-to-my-step-mother
当然,进步不是一样重要的槽
类型的缓存,但这样做很多小的优化可以带来一个明显的增强您的应用程序。
请注意
即使最初叫的侧边栏/问题
行动,缓存片段文件位于缓存/前端/刺激/模板/使用/问题/ what-can-i-offer-to-my-step-mother / fragment_question_tags.cache
。这是因为代码的位置取决于主要动作。
明确的选择性部分缓存
的标记列表中的问题可以改变一生的片段。每次用户添加或删除一个标签,一个问题,标签列表可能会改变。这意味着相关的行动必须清除缓存的片段。这是由- >删除()
的方法viewCacheManager
对象。
只是修改添加
和删除
的行为标签
通过添加在每个模块一:
/ /明确的问题标记列表片段缓存这个美元- >getContext()- >getViewCacheManager()- >删除(“@question ? stripped_title = '。这个美元- >问题- >getStrippedTitle(),“fragment_question_tags”);
现在您可以检查标记列表片段缓存不会产生混乱的添加或删除一个标签页显示的一个问题,并相应地看到标签正确更新的列表。
你也可以在开发环境中启用缓存,看看哪部分页面缓存。改变你的settings.yml
配置:
戴夫:.settings:缓存:
现在,你可以看到一个页面时,片段或槽已经在缓存:
或者这是一个新的副本:
明天见
ob娱乐下载Symfony并不创建一个高开销,并提供简单的方法来准确地调整一个web应用程序的性能。缓存系统是强大的和自适应。再一次,如果本教程的某些地方似乎仍然模糊的你,不要犹豫,请参考缓存章symfonyob娱乐下载的书。它非常详细,包含许多新的例子。
明天,我们将开始考虑网站的管理活动。防止垃圾邮件或修正错误的条目在一个网站所需的功能,只要它愿意semi-anonymous出版。我们可以创建一个使用后台,或者给一套新的选项,用户与一个特定的配置文件。无论如何,它肯定会拿不到一个小时,因为我们用symfony将开发它。ob娱乐下载
确保你保持了解最新的使用欧宝平台是合法的吗新闻通过访问论坛或者看使用时间轴,你会发现bug报告,版本细节,和wiki的变化。
这个工作许可适用创作共用署名下衍生著作3.0 Unported许可执照。