为了使它更具体,我主要关心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) 在什么条件下浏览器会缓存文件?有时确实如此,有时却没有.如果这里没有人知道,我的下一步将是测试各种文件格式,文件大小和htaccess场景.
如果你不知道,你能想到你建议测试的其他变量吗?
提前致谢!
多个问题实际上:
将importScripts始终使用GET请求加载脚本还是可以缓存脚本?
可以importScripts访问主线程或浏览器上下文中缓存的脚本吗?
工作者可以缓存主线程要访问的脚本吗?(简单地说是另一种方式)
我正在建立一个新闻网站,其中包含经常更新的动态内容(每天多次).在Windows Phone 7.5 IE 9.0 Mobile中报告此错误的用户数量:
预期结果:
单击后退按钮后,用户会在导航到文章页面之前看到首页,确切地看到她看到的内容.
实际结果:
用户看到一个非常旧的(一周左右)版本的首页.
有没有其他人在Mobile Internet Explorer 9中看到过这个bug?我怎么能防止这种情况发生?
更多细节:
我在服务器和客户端(浏览器)之间使用CDN来缓存我的ajax请求.
除了通常的标题,我还设置了Access-Control-Max-Age标头来缓存预检请求.(选项请求)
如何从Firefox浏览器中删除缓存的响应?
正常的Ctrl + Shift + Delete和清除缓存不会清除缓存的响应.
TIA
我有一个缓存所有静态资源的离线应用程序.目前,只缓存前15秒的视频资产.
下面显示了install和fetch事件侦听器的基本实现.
服务人员:
self.addEventListener('install', event => {
event.waitUntil(
caches.open('v1').then(cache => {
return cache.addAll([
'/',
'/videos/one.mp4',
'/videos/two.mp4'
]);
})
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
if (response) return response;
return fetch(event.request);
});
);
});
Run Code Online (Sandbox Code Playgroud)
并在 index.html
<video controls preload>
<source src="/videos/one.mp4" type="video/mp4">
</video>
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Web应用程序,它在Leaflet地图上显示动画标记.地图以编程方式缩放到第一个动画边界,然后播放动画,然后地图缩放到第二个动画边界并播放第二个动画,依此类推......
我的问题是OpenStreetMap图块加载时间有时会超过动画持续时间,因此当标记动画到达结束时,地图会被部分加载甚至不加载.
正如我从一开始就知道我将要放大的所有界限,我想提前调用ajax调用(在任何动画开始之前)下载所有有用的平铺图像,以确保它们在我需要时在浏览器缓存中他们.
我搜索了很多,但我找不到从Leaflet边界获取tile网址列表的方法.有没有办法在浏览器缓存中手动加载瓷砖以获得已知的边界和缩放级别?
解决方案感谢YaFred的回答:
这是使用20%填充在"mypolyline"周围预加载tile的代码:
var bounds = mypolyline.getBounds().pad(0.2);
var zoom = map.getBoundsZoom(bounds);
var east = bounds.getEast();
var west = bounds.getWest();
var north = bounds.getNorth();
var south = bounds.getSouth();
var dataEast = long2tile(east, zoom);
var dataWest = long2tile(west, zoom);
var dataNorth = lat2tile(north, zoom);
var dataSouth = lat2tile(south, zoom);
for(var y = dataNorth; y < dataSouth + 1; y++) {
for(var x = dataWest; x < dataEast + 1; x++) {
var url = 'https://a.tile.openstreetmap.fr/osmfr/' + zoom + …Run Code Online (Sandbox Code Playgroud) 我正在使用带有下一个配置的browserSync gulp(简化):
gulp.task('serve', ['compile_styles'], function() {
browserSync.init({
proxy: 'my-local-dev.site'
});
gulp.watch('/public/styles/**/*.scss', ['compile_styles']);
gulp.watch('/public/js/**/*.js').on('change', browserSync.reload);
gulp.watch('/**/*.php').on('change', browserSync.reload);
});
Run Code Online (Sandbox Code Playgroud)
SCSS更改被推送到.pipe(browserSync.reload({stream: true}))内部compile_styles任务,但正如您所看到的.js文件我使用简单browserSync.reload而且它无法正常工作因为浏览器(chrome 57.0.2987.133(64位))从其内部缓存加载静态文件所以我需要进行额外的重新加载刷新该缓存并强制浏览器再次加载该文件.
同样的事情可能与任何静态资源有关,如图像,字体等.那么如何在使用browserSync时处理浏览器缓存?
我读了这篇文章,但仍然遇到问题:
我有我的 Blazor WebAssembly 站点,其中有一个静态 index.html 文件,可以以正常方式引导 Blazor。在其中<head>,我有<link href="css/app.min.css" rel="stylesheet" />。该文件是使用部署时的 Dockerfile RUN 步骤从 SCSS 构建的。
根据该问题,我不需要缓存清除 URL,因为 Blazor 会根据需要自动请求一个新的 URL。然而,当我部署站点并在 Firefox 中打开它时,我得到了旧样式,并在 Firefox 开发人员工具网络选项卡中看到 app.min.css 是从磁盘缓存中检索的。我必须按 Ctrl+F5 才能获取新样式。
那么这个链条到底出了什么问题呢?在我看来,每次部署时我仍然需要 CSS 的缓存清除 URL。 需要进行哪些设置才能在站点二进制文件更改时下载我的 CSS(按照 Steve Sanderson 在该问题中建议的方式)?
browser-cache ×10
caching ×4
javascript ×3
.htaccess ×1
back ×1
browser-sync ×1
cors ×1
css ×1
firefox ×1
gulp ×1
history ×1
html ×1
html5 ×1
http ×1
interpreter ×1
jit ×1
leaflet ×1
preload ×1
proxy ×1
video ×1
web-worker ×1