如何确定网站速度缓慢的原因?

22

我曾经在一次面试中被问到这个问题:

"假设你拥有一个位于远程位置的网站服务器。有一天,某个用户打电话或发电子邮件告诉你该网站非常慢。你将如何确定网站为什么很慢?另外,当你像任何用户一样检查该网站时(使用浏览器),网站表现得非常良好。"

我只能想到一件事情(被否决了):

  • 检查服务器日志以分析传入的流量。也许是DoS攻击或异常高的流量。面试官告诉我假定服务器具有正常的流量和没有DoS。

我有点茫然,因为我从来没有考虑过这个问题。我几乎不知道运行服务器/网站的工作原理。所以如果有人能够指出一些方法,那就很好了。

在搜索时,我找到了仅有的这篇相关精彩文章。那篇文章对我来说有点太技术化了,但我正在慢慢分解和理解它。


如果您可以访问服务器日志,您可以进行分析。如果没有,那么这不是您的问题;p我会要求面试官澄清情况,以及您对服务器有多少访问权限,比如运行ssh和top命令。 - leppie
@leppie,top 有什么用处?对不起,我的原始问题遗漏了一个关键细节。请看编辑后的面试问题。 - Anish Ramaswamy
在这种情况下,可能不会有太大的问题。您能否模拟用户和确切的页面请求?如果对您来说速度很快,则问题可能是客户端(浏览器和/或网络)引起的。 - leppie
@leppie,我没有问面试官那个问题。不知道为什么没想到哈哈。无论如何,如果对我来说很快但对客户来说很慢,那么这绝对不是服务器的问题? - Anish Ramaswamy
这个网站可能与面试问题无直接关系,但它非常有用,可以分析原因:https://tools.pingdom.com - koders
显示剩余2条评论
9个回答

17

因为你已经说了当你自己检查网站时速度很快,这意味着(至少对于你检查过的页面)服务器没有问题,并且可以以良好的速度提供这些页面。此时你需要弄清楚的是,你与报告网站速度慢的用户之间的差异在哪里。可能有很多不同的原因:

  • 用户是否使用缓慢的网络连接(例如移动网络)?
  • 用户是否遇到同样的问题,而其他托管在同一网络托管商下的网站也有相同的问题?如果是这样的话,这可能表明存在网络问题。通常情况下,这也可能表明Web服务器存在资源问题,但在那种情况下,该网站对您也会很慢。
  • 如果以上两点都不能得出答案,你可以假设与服务器的连接和服务器本身都没有问题。这意味着问题必须在用户的设备中。找出他使用的浏览器/操作系统并尝试复制问题。如果失败,请找出他是否使用任何可能引起问题的杀毒软件或类似软件。

8

2
谢谢你的回答!很好的工具。更好的是,如果有人能解释一下那个工具是如何工作的就更好了。在面试中,我想我不能只是说,“哦,我可以使用PageSpeed Insights!” - Anish Ramaswamy
这很简单,只需输入您的网站URL并单击“分析”即可。在“建议摘要”中,它会告诉您需要优先改进的内容。单击摘要以查看有关如何改进的详细说明。 - Ovilia
@Ovilia - 我已经尝试了你建议的工具,效果还不错。但我需要向你澄清一些问题。我通过传递URL直接测试了我的Web应用程序。例如:用户创建表单,但在结果之后,我注意到结果是针对主页而不是我指定的页面。你能否帮我解决这个问题? - Anand Natarajan

4

我认为在上面的答案中缺失的一个重要因素是服务器位置,它对网站性能有着至关重要的作用。

当有人说打开网页需要更长的时间时,那意味着高延迟。高延迟可能是由于服务器位置引起的。 假设你是网页的所有者,那么服务器和客户端就是共同定位的,所以延迟很低。

但是,现在如果客户端跨越边境,那么延迟时间会急剧增加,从而导致性能下降。

另一个影响延迟时间的因素是缓存。

以Facebook为例,他们在全球各地都有服务器以减少延迟时间(以及提供其他多种优势),并使用庞大的缓存系统来缓存热数据(热门话题),而冷数据(旧数据)则存储在硬盘中,因此加载旧照片或帖子需要更长的时间。 因此,用户可能已经抱怨过这个问题,因为他们正在尝试加载一些冷数据。


谢谢你的回答!是的,缓存可能会导致速度变慢,这确实有点棘手。 - Anish Ramaswamy

2
我能想到以下几个原因(前两个已经在上面提到):
  1. 由于客户端位置而导致的高延迟
  2. 可能需要增加服务器内存
  3. 页面上服务调用的数量。
  4. 如果服务在投诉时宕机,可能会阻止页面加载。
  5. 在用户体验差的时候,服务器负载可能太高。服务器可能需要增加资源(例如向集群添加另一个服务器/ web服务器)。
  6. 检查服务器是否在运行任何后台作业。
重要的是要检查日志和批处理作业的计划,以确定在此期间运行了什么。
希望这可以帮助您。

1
显然是与连接您网站的人员的连接有问题,或者可能是临时问题,并且在您检查您的网站时一切正常。 可以检查日志或询问主机是否在减速发生时出现问题。

1

可能的原因之一是用户的角色与您的角色不同。您可能拥有管理员权限(类似于超级用户角色),而代码可能只允许此类角色的所有内容,这意味着它并没有真正进行条件检查以查看允许或不允许什么。有时候,获取用户的所有特权并进行条件检查是一个相当繁琐的过程,这取决于授权实现的复杂程度。这意味着,对于特定角色,页面可能会非常缓慢。因此,您应该找出用户的角色,并查看是否存在这样的原因。


1

通常,用户会以页面加载时间作为测量网站速度缓慢的标准。但如果你真的想知道什么占用了最长时间,可以按下F12键打开浏览器调试器。如果你使用的是Chrome浏览器,则点击“Network”查看应用程序正在进行哪些调用,并且哪些调用需要最长时间。如果你使用Firefox浏览器,则需要安装Firebug。如果已经安装了Firebug,则再次按下F12键并单击“Net”。


您似乎误解了问题(也许是因为我表述不清)。在这种情况下,我是网站的所有者,而另一位用户报告说我的网站速度很慢。 - Anish Ramaswamy
你的回答实际上让我想起了面试官问的另一个细节。请现在看一下编辑后的问题。 - Anish Ramaswamy

0

虽然您的问题非常明确,但网站优化是一个非常广泛的主题。

大多数流行的Web开发框架由于某种原因,非常低效。

传统的n层Web应用程序开发方式仍然非常重要,并且根据W3C的最佳实践仍然被认为是最佳实践。如果您花一点时间阅读最受欢迎的Web开发框架的源代码结构,您会发现它们在服务器上运行比必要的代码更多。

这可能看起来有点简单,但是您在服务器上运行的代码越少,客户端上运行的代码越多,您的服务器就会工作得越快。有时将框架代码与传统方式进行对比是了解此问题的最佳方法。这里是一个完全工作的迷你Web应用程序链接,代表W3C最佳实践,并在服务器上运行最少量的代码和客户端上运行最多量的代码:http://developersfound.com/W3C_MVC_EX.zip,此代码库也符合MVC标准。

这个代码库附带有一个MySQL数据库转储文件、php和客户端代码。要查看此代码运行情况,您需要将SQL dump恢复到MySQL实例(sql dump来自MySQL 8 Community)并添加在php文件(conn_include.php)中找到的用户和模式权限;设置用户对模式具有执行权限。
如果您将此代码库与所有最流行的Web框架进行比较,它会让您认识到这些框架是多么低效。声称是MVC框架的流行PHP框架实际上根本不符合MVC标准。这是因为它们依赖于将PHP标记嵌入HTML标记或反之(根据W3C的规定,这被认为是非常不好的做法)。此外,大多数流行的node框架运行的服务器代码比必要的要多得多。嵌入的标记也会阻止异步调用正常工作,除非该框架支持像Yii 2这样的AJAX dump。

遵循MVC规范的两个最重要的原则是:永远不要将服务器端标签(如PHP标签)嵌入HTML标签或相反(除非有非常好的借口,比如SEO),并且如果可以在客户端运行,就要坚决不编写在服务器上运行的代码。真正的MVC基于层次分离,而MVC框架则基于代码分离。真正的MVC兼容性非常高效。不要误解,MVC框架对很多事情都非常有用,但如果您正在开发一个将获得数百万点击次数的网站,则它们毫无用处,或者至少会让您的云计费飙升,从而真正影响公司的利润。

总之,框架不能够对在客户端或服务器上运行的代码进行精细控制,而且效率非常低,但使用更少的代码可以更快地建立原型。

相比之下,传统的方法需要更多的努力,但您完全控制在服务器上运行的内容和客户端运行的内容。

作为优化的额外建议,请避免使用透传查询和触发器,而选择存储过程。从历史上看,存储过程并不是在MVC作为一种范式存在的时候发明的,但它确实增加了层之间的关注点分离,并且更加高效。

希望这些建议有所帮助。


0
这通常是一个内存问题,可以通过增加托管应用程序的 Web 服务器的堆大小来解决。如果应用程序正在运行 Weblogic 服务器上,则可以在位于应用程序主目录中的 "setEnv" 文件中增加堆大小。 祝你好运! Michael Orebe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接