【问题标题】:Is there a way to simulate network conditions from JavaScript?有没有办法从 JavaScript 模拟网络条件?
【发布时间】:2020-06-27 10:07:08
【问题描述】:

在 Firefox 的开发者工具中,可以选择模拟某些类型的移动数据连接等条件。有没有办法从 JavaScript 激活它,而不需要用户打开开发者控制台?

【问题讨论】:

  • 我认为不是。但是,根据您的具体用例,也许您可​​以在 JavaScript 中实现一个模拟请求问题的服务工作者。
  • @CherryDT - 好吧,它可以通过许可或其他方式激活。但是,如果您想充实并发布答案,那么这种服务工作者方法是一个好主意。非常聪明。

标签: javascript networking browser developer-tools


【解决方案1】:

根据您的用例,您也可以

  1. 安装一个监听“fetch”事件的服务工作者,然后延迟调用event.respondWith(需要HTTPS);
  2. 在应用程序范围内拦截对 fetch / XMLHttpRequest 的调用以执行相同的操作(覆盖 window.fetch 和/或 window.XMLHttpRequest) - 请注意,这不会影响直接从 HTML 加载的图像/资源;
  3. 设置 HTTP cookie 或标头并在响应之前使您的服务器/延迟(但是很多用户这样做可能会降低服务器并发性)

请注意,如果您想使用流式资源(例如渐进式 JPEG、HTML)来模拟这种行为,最好的选择是 service worker 路由,您可以在其中直接构造 ReadableStream(请参阅此处获取一些灵感:https://developers.google.com/web/updates/2016/06/sw-readablestreams)。

对于实际的流媒体行为本身,我会考虑使用 RxJs 管道之类的东西,这样您就可以轻松引入延迟、任意停止等来模拟不同的网络条件。

【讨论】:

  • 谢谢!我真的很喜欢这些想法,虽然我还不确定是否接受它,因为它实际上并没有激活网络条件模拟。我想如果目前不可能,我可能应该接受一种解决方法,直到它成为可能。如果有人发现这是可能的,我会等待其他答案。如果我在星期二之前还没有接受,请提醒我;)
  • 如果您想实际激活这些功能,那么不,这些 API 不会暴露给应用程序代码。总体而言,他们享有很高的特权——他们可以检查诸如仅 HTTP cookie(用于保护身份验证令牌免受 XSS 攻击)之类的东西,因此任何类似的东西都可能成为攻击的旁道。您在这方面 AFAIK 的唯一其他选择是自定义浏览器扩展,它可以比不受信任的 JavaScript 执行更多特权操作。
  • @Luc - 找到其他方法了吗?
  • 确实,不,这似乎是目前执行此操作的方法。再次感谢:)
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多