在开发中,我们的rails app运行缓慢。在使用javascript时,由于某些响应时间较慢,在浏览器中预览会很麻烦。有没有办法让浏览器只是重新处理请求,仍然加载新资产,而无需重新请求页面本身?
理想的解决方案是使用chrome或firefox。
感谢。
答案 0 :(得分:3)
通常,您可以利用缓存。只要服务器提供了正确的Last-Modified
,ETag
,Expires
和Cache-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。所以,你可以:
所以,现在浏览器认为它正在往服务器,但fiddler正在拦截请求并返回相同的静态内容。