在接受采访时我被问到这个问题:
“假设您拥有一个服务器位于某个远程位置的网站。有一天,有些用户打电话/发电子邮件说您的网站速度非常慢。您如何确定网站速度慢的原因?你自己检查网站就像任何用户一样(使用你的浏览器),网站表现得很好。“
我只想到一件事(被击落):
我有点失落,因为我从未想过这个问题。我几乎不知道如何运行服务器/网站。所以如果有人能突出一些方法,那就太好了。
在谷歌搜索时,我可以找到only this relevant, wonderful article。那篇文章现在对我来说太技术了,但我正在慢慢分解并理解它。
答案 0 :(得分:17)
由于您已经说过,当您自己检查网站时速度很好,这意味着(至少对于您检查的页面)服务器没有任何问题,它可以很快地为这些页面提供服务。此时您应该弄清楚的是,您和报告您网站的用户之间的区别很慢。这可能是很多不同的事情:
答案 1 :(得分:6)
这是一个很好的工具,可以找到网页的速度,并告诉你它变慢的原因:https://developers.google.com/speed/pagespeed/insights
答案 2 :(得分:3)
我认为上述答案中缺少的重要一点是服务器位置,这对网络性能起着至关重要的作用。
当有人说打开一个意味着高延迟的网页需要更长的时间时。由于服务器位置可能导致高延迟。 假设您是网页的所有者,那么服务器和客户端位于同一位置,因此它具有低延迟。
但是,现在如果客户端越过边界,则延迟时间将急剧增加。因此行动缓慢。
另一个因素是缓存会显着影响延迟时间。
以facebook为例,他们在世界各地拥有服务器以减少延迟时间(并提供其他一些优势),他们使用巨大的缓存系统来缓存他们的热门数据(趋势主题)而冷数据(旧的)数据存储在硬盘中,因此加载较旧的照片或帖子需要较长时间。 因此,当用户尝试加载一些冷数据时,用户可能会抱怨这一点。
答案 3 :(得分:1)
通常,用户会将页面加载时间作为衡量网站运行速度的指标。但是如果你真的想知道花费最多时间的是什么,你可以按f12打开浏览器调试器。如果您的浏览器是Chrome,则单击网络并查看您的应用程序正在进行的调用以及哪些调用占用了最多时间。如果您使用的是Firefox,则需要安装firebug。如果你有,那么再次按f12并点击Net。
答案 4 :(得分:1)
一个原因可能是用户的角色与您的角色不同。您可能假设具有管理员权限(某些事情,如超级用户角色),并且代码可能只允许此类角色的所有内容,这意味着它实际上没有进行大量条件检查以查看允许的内容。有时候,获得用户的所有权限并进行条件检查是非常重要的,当然如何实现授权的实施方式。这意味着,对于特定角色,页面可能非常慢。因此,您应该找出用户的角色,看看是否是一个原因。
答案 5 :(得分:1)
显然连接到您网站的人的连接存在问题,或者这可能是一个临时问题,当您检查网站时,一切都很花哨。您可以检查日志或询问主机是否在发生减速时出现问题。
答案 6 :(得分:1)
我可以想到这几个原因(上面已经提到了前两个):
检查批处理作业的日志和计划以确定当时正在运行的所有内容非常重要。
希望这有帮助。
答案 7 :(得分:0)
尽管您的问题很明确,但是网站优化是一个非常广泛的主题。
大多数流行的Web开发框架由于某种原因而导致处理器效率极低。
开发n层Web应用程序的老式方法仍然非常重要,并且根据W3C仍然被认为是最佳实践。如果您花一点时间阅读最流行的Web开发框架的源代码结构,您会发现它们在服务器上运行的代码超出了必要。
这似乎是一个简单的答案,但是,在服务器上运行的代码越少,在客户端运行的代码越多,则服务器运行得越快。 有时将框架代码与老式的方法进行对比是了解这一点的最佳方法。这是一个指向完全正常工作的迷你Web应用程序的链接,该应用程序代表W3C最佳实践,并在服务器上运行最少的代码,在客户端上运行最小的代码:http://developersfound.com/W3C_MVC_EX.zip此代码库也符合MVC。>
此代码库带有MySQL数据库转储,php和客户端代码。要查看此代码的实际效果,您将需要将SQL转储还原到MySQL实例(SQL转储来自MySQL 8社区),并添加在php文件(conn_include.php)中找到的用户和架构权限。设置用户对模式具有执行权限。
如果将此代码库与所有最流行的Web框架进行对比,那么,它们的确会使您惊讶地发现这些框架的效率如何。声称是MVC框架的流行PHP框架实际上根本不符合MVC。这是因为它们依赖于将PHP标签嵌入HTML标签或反之亦然(根据W3C认为这是非常糟糕的做法)。同样,大多数流行的节点框架在客户端运行的代码数量也超过了必需的数量。除非框架支持诸如Yii 2之类的AJAX转储,否则嵌入式标签还会阻止异步调用正常工作。
遵循MVC的两个最重要规则是:永远不要在HTML标记中嵌入服务器端标记(例如PHP标记),反之亦然(除非有很好的借口,例如SEO),并且永远不要写如果可以在客户端上运行,则在服务器上运行的代码。同样,真正的MVC基于层分离,而MVC框架则基于代码分离。真正符合MVC要求的处理器效率很高。不要误会我的意思MVC框架在很多方面都非常有用,但是如果您要开发的网站将获得数百万次点击,那么它们将毫无用处,或者至少它们将使您的云计算费用如此之高确实会吞噬您公司的利润。
总而言之,框架不能很好地控制在客户端或服务器上运行什么代码,效率很低,但是您可以使用更少的代码来快速启动和运行原型。
相比之下,老式的方法需要更多的肘部润滑脂,但是您可以完全控制服务器上运行的内容和客户端上运行的内容。
作为优化的其他建议,请避免使用传递查询和触发器,而应选择存储过程。历史上存储过程并不是在MVC出现时就发明的,但是它无疑增加了层之间关注点的分离,并且处理器效率更高。
希望此建议会有所帮助。
答案 8 :(得分:-1)
这通常是内存问题,可以通过增加托管应用程序的Web服务器的堆大小来解决。如果应用程序在Weblogic Server上运行。堆积大小可以在" setEnv"文件位于Application Home中。 祝好运! Michael Orebe