gpt4 book ai didi

multithreading - 使用 angularJS 应用程序提高 Symfony2 的性能

转载 作者:行者123 更新时间:2023-12-04 16:14:27 25 4
gpt4 key购买 nike

我们有一个使用 AngularJS 在 Symfony2 中构建的应用程序。随着用户数量的增加,应用程序的性能正在下降。

应用程序网页需要不断更新;除此之外还有一些模态,需要更新。目前我依赖于常规的 Ajax 请求。为了使页面保持最新状态,我每 2 秒发送 2 个 Ajax 请求。每当用户拉起模态时,应用程序就会停止更新页面,发送 Ajax 请求以获取该模态的数据,然后每 2 秒连续发送 Ajax 请求以更新该模态。一旦用户关闭了模态应用程序,它就会恢复对页面的 Ajax 请求。

由于此场景可复制到 100 个工作站;服务器变得忙碌,Ajax 请求需要更长的时间才能完成。通常,Ajax 对模态的请求需要大约 1 秒,但是一旦服务器变得繁忙,请求需要 2 到 3 秒,这对用户来说是显着的延迟。

在谷歌搜索很长时间后,我遇到了几个解决方案,但不确定哪个解决方案是最好的,因为我无法尝试测试每个解决方案:

我的第一个解决方案包括 长轮询保持常规的 Ajax 请求来更新页面并使用长轮询来更新模式,因为它们不经常更改。这样做的缺点是来自第一个客户端的长时间轮询将使服务器保持忙碌,这将导致其他客户端的延迟。除了延迟之外,服务器将很难检测取消/中止的长轮询。

网络套接字
web sockets 似乎是一个很好的竞争者,但 Apache 不支持它。对于这个问题,我可以使用 Ratchet,但 IE-9 默认不支持它。很少有 polyfills 可以做到这一点;但请求仍然在队列中处理。所以重用连接节省的时间不会有任何积极的影响。

服务器发送事件
我们已经将它用于另一个应用程序。它也可以重用连接,但服务器将很难检测应用程序关闭;此外,此服务器将保持忙碌状态,并且可能需要更长的时间来处理多个客户端连接。

多线程
PHP 现在能够运行多个线程。我可以为每个 Ajax 请求创建一个线程,但是这种设置会创建大量线程,因为 PHP 不擅长垃圾收集,这会导致内存泄漏。

我也在考虑长轮询和多线程或服务器发送事件和多线程的组合。

我们的环境有一些限制,例如

  • 我们必须支持所有浏览器,但 IE-9 是其中之一。
  • 工作站的范围从瘦客户端到 PC 再到虚拟桌面。
  • 用户数量在一天中波动。
  • 此外,我们使用的 Angular 应用程序实际上并不是一个单页应用程序。
  • 应用程序在智能屏幕上持续运行。
  • 我们希望为 Modals 预加载数据,因此用户不会等待 modal 出现。

  • 我相信我已经研究了所有可能的解决方案。如果我错过了什么,请告诉我。

    欢迎每一个建议

    最佳答案

    我不确定您的问题出在哪里,但是如果您使用 ajax 不断更新每 2 秒,您可能会在一次来自一个客户端的多个请求,因此您的服务器很难。我更喜欢不每 2 秒发出一次请求,但在响应(成功与否)后添加另一个等待时间为 2 秒的请求,因此您创建请求链,并且只有一个来自一个客户端的请求。
    接下来是你服务器上的性能,因为 1-3s 响应时间很长,在 prod env 上运行,查看分析器,看看需要这么长时间,也许使用 twig,对于 json 请求等......

    关于multithreading - 使用 angularJS 应用程序提高 Symfony2 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377218/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com