浏览器调试 - 如何在不重新请求的情况下让浏览器从服务器重新加载响应?

时间:2011-03-30 02:23:05

标签: firefox dom browser google-chrome refresh

在开发中,我们的rails app运行缓慢。在使用javascript时,由于某些响应时间较慢,在浏览器中预览会很麻烦。有没有办法让浏览器只是重新处理请求,仍然加载新资产,而无需重新请求页面本身?

理想的解决方案是使用chrome或firefox。

感谢。

7 个答案:

答案 0 :(得分:3)

通常,您可以利用缓存。只要服务器提供了正确的Last-ModifiedETagExpiresCache-Control标头,浏览器就不应该重新请求该网址,除非您按下F5浏览器

例如,您可以在IFRAME或旧学校FRAME中加载您的应用程序,并添加一些快速导航离开该页面的JavaScript代码,然后返回到相同的网址。这会强制浏览器从缓存重新加载URL 并重新解释它。

当然,在进行更改后(例如,在URL查询字符串中添加版本号或类似内容),请确保从服务器确保URL 重新加载

不幸的是,浏览器缓存并不总是可以准确预测。

希望这有帮助。

答案 1 :(得分:1)

我在考虑几种可能的解决方案:

也许最简单的方法是将整个页面保存到html文件(文件/另存为浏览器中),并将生成的HTML页面放在服务器上的相同上下文中。使用此解决方案,您可以使用相同的域策略。您可能需要至少预取一次数据或为您的用户提供活动会话,但这就是全部。显然,如果繁重的工作是针对ajax请求,这将无法工作。

第二种解决方案是使用Web服务器(如apache)作为应用程序服务器的代理。您使用不同的域或上下文来确保不缓存普通应用程序,而只是缓存到UI /设计测试保留的域中。然后可以微调将被缓存的内容(ajax requests,html,css ......)。如果要强制刷新,只需清空缓存即可。使用代理允许您不修改默认应用程序行为

答案 2 :(得分:1)

好的,如何抓取DOM元素(可能通过使用jquery contents()函数)并将其保存到浏览器本地存储。然后使用类似的东西重新加载js和css(来自Can't append <script> element,我在Facebook js动态加载时看到了类似的语法工作)

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
$("#someElement").append( script );

重新加载js和css后,用浏览器本地存储中的值替换DOM元素。

没试过,但似乎策略可行。

答案 3 :(得分:0)

听起来你需要ajax。当您在浏览器中请求页面时,整页通常会加载 - 它会中断用户的进程并且需要时间。如果你使用ajax,只有一些页面重新加载:

browser       ajax      server
  |            |         |
  |--js event->|         |
  |            |--HTTP-->|
  |            |<--data--|
  |<--handler--|         |

你的ruby代码只需要返回新的数据部分 - 有时甚至只是“OK”或“error”,例如登录。 Meawhile,因为ajax实际上是javascript,您的用户看不到中断:新数据在他们仍在阅读或继续填写表格时被引入。

答案 4 :(得分:0)

我刚刚在互联网上捅了一下,发现了一个名为CSS Refresh的firefox插件,看起来它可以在不加载页面的情况下刷新你的css,但我还没有尝试过,所以不确定是否它有效。

对于您的javascript,您可以使用javascript控制台(例如firebug command line)手动触发通常在加载等时触发的事件/功能。

我确信有更好的方法,但至少它看起来是可能的。

答案 5 :(得分:0)

用于FF或Chrome的Web开发人员工具栏和用于Chrome的Pendule都可以从源代码重新加载CSS和JS,而无需重新加载HTML。

答案 6 :(得分:0)

您可以使用Fiddler。它是一个在您的计算机上本地运行的HTTP代理,可以让您轻松记录通过它的所有流量(类似于Firebug中的网络选项卡)。它可以选择自动响应与给定模式匹配的URL。所以,你可以:

  1. 向rails应用程序发出初始请求,等待它完成。
  2. 将响应保存到本地HTML文件
  3. 为该网址设置自动回复,以便使用本地文件进行响应。
  4. 所以,现在浏览器认为它正在往服务器,但fiddler正在拦截请求并返回相同的静态内容。