我用GWT编写了应用程序.它适用于客户端.但是,当我在我的应用程序中更改某些内容,重新编译然后部署到服务器和客户端访问我的应用程序时,他的浏览器没有获取应用程序的新版本,而是使用以前的缓存版本.这会触发RPC错误和其他问题.
如何在访问我的页面时强制客户端浏览器获取应用程序的新版本,如果它与服务器上的版本匹配,则使用缓存版本.
为了使它更具体,我主要关心Firefox中的SpiderMonkey解释器.
因此,假设我想加快浏览器中特定网站的加载速度,或者加快加载所有具有流行脚本的网站,例如JQuery.据推测,所涉及的脚本不会在页面重新加载之间发生变化.SeaMonkey会理解那么多并避免完全重新编译吗?
如果SpiderMonkey不会,还会有其他翻译吗?或者这基本上是一个潜在的新功能,没有人关心,因为计算机速度很快?
我正在尝试找出最好的HTTP标头,以便为四个用例发送.我希望得到不依赖于用户代理/协议版本嗅探的标题,但我会接受,如果没有别的东西适合.所有URL都是通过完全自定义处理程序获取的,因此我可以根据需要选择所有标头,这完全是关于中间代理和用户代理.如果可能,这应该与HTTP/1.0和HTTP/1.1客户端兼容.如果存在多个解决方案,则最好的解决方案将是通过线路发送的最短解决方案.
静态公共内容
所有"静态公共内容"都是HTTP真正关注的东西:如果URL相同,则内容是相同的.我可以轻松地做到这一点:例如,我将用户个人资料图标放入http://domain.com/profiles/xyz/icon/1234abcd,其中"1234abcd"是图标文件内容的SHA-1.如果我将来更改为图标,我将创建一个新URL并修改应使用新图标的所有现有引用.什么是最好的标头声明这可以永久缓存并可以共享?我正在考虑一些事情:
Date: <current time>
Expires: <current time + one year>
Run Code Online (Sandbox Code Playgroud)
这是否足以允许用户代理和代理进行缓存?我需要Last-Modified还是Pragma?
静态非公开内容
所有"静态非公开内容"都是静态的,但并非每个人都可以使用.实际上,此内容仅对选定的登录用户可用(会话保持会话cookie保持会话UUID).如果URL相同,则内容相同.但是,回应不公开.用例可以是在社交网络服务中与所选朋友共享的图像.我正在考虑一些事情:
Date: <current time>
Expires: <current time>
Cache-Control: private, max-age=<huge number>, s-maxage=0
Run Code Online (Sandbox Code Playgroud)
这是否足以允许用户代理缓存并禁用代理?我需要Pragma吗?
不稳定的公共内容
所有"易变的公共内容"都是易变的东西,可供所有人使用.当没有登录时,有点像http://slashdot.org/的首页.目的是允许在不变的URL中快速更新内容.请注意,我不想破坏用户代理历史记录机制(即,从易失性页面单击某些内容然后点击后退按钮不应导致从服务器获取易失性页面 - 但是,单击指向该服务器的链接首页应该从服务器获取资源).我正在考虑一些事情:
Date: <current time>
Expires: <current time>
Cache-Control: public, max-age=0, s-maxage=0
Run Code Online (Sandbox Code Playgroud)
这是否足以阻止缓存但允许历史记录机制(后退按钮)?我知道,如果我发送,Cache-Control: no-store, must-revalidate我可以强制重装,但这不是我想要的,因为这也会打破后退按钮.我需要Last-Modified还是Pragma?
尽管这是公开的,但允许中间代理缓存它可能没有意义,因为它是不稳定的.
不稳定的非公开内容
所有"易变的非公开内容"都是易变的东西,并不是每个人(私人)都可以使用.当你登录时,有点像http://slashdot.org/的首页.目的是允许在不变的URL中快速更新内容.请注意,我不想破坏用户代理历史记录机制(即,从易失性页面单击某些内容然后点击后退按钮不应导致从服务器获取易失性页面 - 但是,单击指向该服务器的链接首页应该从服务器获取资源).我正在考虑一些事情:
Date: <current time>
Expires: <current time>
Cache-Control: …Run Code Online (Sandbox Code Playgroud) 我正在使用WebDriver运行我的Selenium测试.我正在用一些循环重复测试,所以现在我想在JAVA中开始新的测试之前清除缓存.
@Test
public void ffAndIe() throws InterruptedException {
int i = 0;
while(i < 5000){
driver.get("http://dit-map.appspot.com/");
Thread.sleep(15000);
driver.get("http://dit- map.appspot.com/#home:zoom=7&lat=37.04&lng=25.05&display=weather");
Thread.sleep(15000);
driver.get("http://dit-map.appspot.com/#home:zoom=9&lat=37.55&lng=23.83&display=weather,wind");
Thread.sleep(10000);
driver.get("http://dit-map.appspot.com/#home:zoom=9&lat=37.84&lng=23.22&display=weather,wind,cloud");
Thread.sleep(10000);
driver.get("http://dit-map.appspot.com/?lang=en#home:zoom=10&lat=38.13&lng=22.59&display=weather,wind,meteogram");
Thread.sleep(10000);
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
在这个while循环中,我想要做的第一件事是清除我的CACHE(IE,MOZILLA&CHROME)
任何想法我怎么能实现这一目标?
谢谢
在使用Devise进行身份验证后,我发现存在一个安全漏洞,在用户注销后,会话变量被保留.这允许任何人按下后退按钮并访问登录用户的上一屏幕.
我将这些行添加到application_controller中
before_filter :set_no_cache
def set_no_cache
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
Run Code Online (Sandbox Code Playgroud)
在_form.html.erb中,我在顶部添加了这个
<%if user_signed_in? %>
<%=link_to "Sign Out", destroy_user_session_path, :method => :delete %><br/>
<%= form_for(@listing) do |f| %>
<% if @listing.errors.any? %>
...........
Run Code Online (Sandbox Code Playgroud)
然后我在Firefox,Chrome和Safari上测试了该应用程序.
Firefox和Chrome很好,因为我退出并点击了后退按钮,无法看到用户的上一个屏幕,但是,在Safari和Opera中,不安全的行为仍然存在.此代码没有效果.
对于如何解决这个问题,有任何的建议吗?
谢谢
我正在使用swipe.js(http://swipejs.com)为平板电脑和台式机构建HTML5杂志.
一切似乎工作正常,在一个HTML页面中,我已经设置了彼此全屏列表元素.整个杂志都是在一个静态的html文件中构建的.我可以通过在平板电脑上滑动以及使用桌面版本的按钮来浏览页面(请参阅swipe.js主页上的示例,然后使用全屏幻灯片).
页面彼此相邻放置,并具有屏幕的尺寸.
[ |0||1||2| .. |i-1||i||i+1| .. |n| ]
Run Code Online (Sandbox Code Playgroud)
使用translate3d()css函数,在css3的帮助下完成了swipe.js转换.在这种情况下,使用硬件渲染.
在台式机(Chrome,Safari,FF),iPad1和(甚至更好的)iPad2上,这具有我想要的效果; 平滑过渡.完善!但是,在iPad3上,页面第一次进入(通过转换)时似乎呈现"慢".即使没有设置背景图像(只是颜色),转换页面的"渲染"也会被认为有点"慢"; 该页面由"闪烁"块构建.
假设:我的假设是(在阅读主题之后),这是因为浏览器只呈现屏幕内的元素,并且只会暂时刷新刷过的页面,然后清理缓存以控制内存管理.
我的问题:有没有办法控制屏幕外渲染和缓存,这样我就可以强制(预)渲染页面元素i-1,i + 1(并刷新所有其他页面元素的缓存),以加快我的过渡渲染?
注意:在StackOverflow的几个主题中,提到了css3过渡的"闪烁".我已经实现了建议的CSS技巧,但不会解决我的问题.
-webkit-backface-visibility: hidden;
-webkit-transform:translate3d(0,0,0);
Run Code Online (Sandbox Code Playgroud) 即使我发送"缓存控制:必须重新验证",Google Chrome在浏览器中使用来回按钮时也会使用本地缓存页面.
这是原始回复的一部分:
HTTP/1.1 200 OK
cache-control: private, must-revalidate
etag: "c9239b5d4b98949f8469a05062e05bb999d7512e"
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
如果我刷新页面,我得到一个"HTTP/1.1 304 Not Modified"响应但是当我使用后退按钮时,我得到以下响应:
Request URL:example.com
Request Method:GET
Status Code:200 OK (from cache)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的响应是304或200 OK,是否有可能实现这一目标?
在http://www.polymer-project.org/docs/polymer/polymer.html上查看 Chrome的DevTools,我注意到一些有趣,好奇和无法解释的事情:
浏览器缓存实际的Polymer组件,因此后续<link rel="import"对组件的调用不需要服务器往返.
浏览器将这些组件缓存为数据URL


显然,这样做可以非常快速地加载缓存的组件(0毫秒延迟)

我的问题
如何控制组件的缓存,以便在需要时可以使缓存无效?(查看http://www.w3.org/TR/2014/WD-html-imports-20140311/上的规范,我没有看到缓存)
是否值得将我的整个网站结构分解为Web组件(又名"小部件"),以便我网站的各个部分加载速度快?示例,我不是总是使用相同的nav来提供相同的布局,而是使用<my-nav>组件部署它,导航的数据(它有意义的地方)都包含在组件本身中,因此不需要与组件本身进行交互.服务器一旦缓存.
我使用google pagespeed Insights来测试我的nodejs网站的性能.对于一些外部文件,它说利用浏览器缓存,但我不知道如何做到这一点?
利用浏览器缓存
在静态资源的HTTP标头中设置到期日期或最长期限会指示浏览器从本地磁盘而不是通过网络加载以前下载的资源.利用浏览器缓存以获取以下可缓存资源:
http://maps.googleapis.com/ ... kwPPoBErK _-- SlHZI28k6jjYLyU&sensor = false(30分钟)
http://www.google-analytics.com/analytics.js(2小时)
有人请帮帮我.
以前,如果有新版本,我使用以下方法强制浏览器重新加载我的JavaScript文件.
<script src="common.js?version=1337"></script>
<script src="app.js?version=1337"></script>
Run Code Online (Sandbox Code Playgroud)
我的HTML是自动生成的(例如使用PHP),因此很容易实现自动化.
现在我想使用ES6模块并导入我的公共代码.我的HTML成为:
<script src="app.js?version=1337" type="module"></script>
Run Code Online (Sandbox Code Playgroud)
并app.js包含导入:
import {foo, bar} from './common.js';
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:我如何影响common.js新场景中的缓存?
我不想每次编辑时app.js都手动编辑common.js.如果可能的话,我也不想动态生成/预处理我的任何JavaScript文件.