我正在尝试用javascript预加载音频文件.我正在使用chrome,当我的文件的http请求长大的文件数被chrome取消时...为什么?我能做什么?这是我的代码:
filesToLoad = 44;
filesLoaded = 0;
for ( var ni = 1; ni < filesToLoad; ni++) {
console.log("start::: " + ServerPath + 'audio/' + ni + '.mp3');
loadAudio(ServerPath + 'audio/' + ni + '.mp3');
}
function loadAudio(uri) {
var audio = new Audio();
audio.addEventListener('canplaythrough', isAppLoaded, true); // It
audio.src = uri;
return audio;
}
function isAppLoaded() {
filesLoaded++;
if (filesLoaded >= filesToLoad) {
cb();
}
console.log("load::: " + ServerPath + 'audio/' + filesLoaded + '.mp3');
}
function cb() { …Run Code Online (Sandbox Code Playgroud) 想象一下,给出以下情况:
我们的网站已经触发了大约20个请求(甚至更多).这些可以是任何类型的请求 - 我们不知道如何再次触发它们.在此网站上,所有请求都以同一网址为目标.请求可以具有订阅的事件侦听器.
如果使用Chrome,则会发送前6个请求,其他请求将在队列中等待发送(因为每个域的并行请求限制).
此时网页触发一个非常重要的请求(称之为"VIR"),该请求具有更高的优先级,然后发送到服务器,然后发送前20个请求.其他请求(及其事件监听器)也很重要,因此我们不能只是中止它们立即发送VIR.
我们需要一个解决方案来获取所有待处理的请求(6个已发送+ 14个队列中),中止它们,然后发送VIR,然后使用之前附加的相同事件侦听器再次发送其他请求.
如果没有其他(开箱即用)解决方案,2个基本问题是:
还有一个相关问题:
请注意,所有请求都必须在同一个域中发送.(意味着使用VIR定位不同的域不是此处的选项).但是,使用websocket或http/2可以解决基本问题,这些不是当前问题中的选项.
我很欣赏这个想法!Thx提前!
pm.:是的,这是一个javascript问题:)
我们都知道我们应该缩小 JS、CSS 和精灵图像。不仅可以减少发送的大小,还可以减少发送的 HTTP 请求的数量。这就是我的问题 -限制浏览器并行 AJAX 请求的原因是什么(/sf/answers/1033778651/ - 有关限制的更多详细信息)?
AJAX 是异步的,我们不知道它什么时候完成。并行化程度越高,等待的时间就越短。限制请求数量使得初始页面加载更加同步,因为我们必须等待、阻塞,直到 AJAX插槽空闲才能再次使用。
我对此确实有一些想法 - 但我真的很感激一个好的解释。
我正在开发一个带有 PouchDB 的 Ionic 应用程序,需要将表与远程 CouchDB 服务器同步。在我的database.ts提供者的构造函数中,我有6个方法:
this.initialiseDB_Ord();
this.initialiseDB_IngProd();
this.initialiseDB_Ing();
this.initialiseDB_Prod();
this.initialiseDB_OrdProd();
this.initialiseDB_Ut();
Run Code Online (Sandbox Code Playgroud)
这些方法中的每一个都执行以下操作(我选择第一个作为示例):
this._DB_Ord = new PouchDB('orders');
this._remoteDB_Ord = this.addressIP + '/orders';
this._syncOpts_Ord = { live : true,
retry : true,
continuous : true};
this._DB_Ord.sync(this._remoteDB_Ord, this._syncOpts_Ord)
.on('change',(info) => {
console.log('Handling syncing change');
console.dir(info);
}).on('paused',(info)=> {
console.log('Handling syncing pause');
console.dir(info);
}).on('active', (info) => {
console.log('Handling syncing resumption');
console.dir(info);
}).on('denied', (err) =>{
console.log('Handling syncing denied');
console.dir(err);
}).on('complete', (info) =>{
console.log('Handling syncing complete');
console.dir(info);
}).on('error', (err)=>{
console.log('Handling syncing error');
console.dir(err);
});
Run Code Online (Sandbox Code Playgroud)
然后我有一个handleSyncing方法,如下所示: …
我正在尝试使用服务器发送的事件 (SSE) 作为实时数据推送的 websockets 的替代方案(我的应用程序中的数据主要是单向的)。
这将有多大的可扩展性?我知道每个 SSE 连接都使用一个 HTTP 请求——这是否意味着 Web 服务器可以处理与 HTTP 请求一样多的 SSE 连接(类似于这个答案)?我觉得可能是这种情况,但我不确定 SSE 连接是如何工作的,以及它是否比简单的 HTTP 请求更复杂/更需要资源。
我主要想知道这与浏览器可以保持打开的并发 websockets 数量相比如何。这个答案表明服务器只能同时处理 ~1400-1800 个套接字。
有人可以对此提供一些见解吗?
(澄清一下,我不是在问有多少 SSE 连接可以从客户端保持打开状态;我问的是 Web 服务器可以合理地保持打开多少个连接。)
背景
我注意到几乎所有的代理提供程序都允许“最大线程数”的概念,根据我的理解,这意味着一次并发/并行浏览器请求的最大数量。由于现代网站可以有许多并行请求,我如何在 Chrome 中限制并行请求(全局针对整个浏览器,不仅针对每个主机/服务器,而且针对所有这些请求的组合)?
例子
网站 A 从自己的域中获取资源,此外还使用了 9 个 CDN 和 10 个跟踪器。假设 Chrome 有最多 6 个并发请求/域,所以这是 120 个并发请求。高于此的任何事情都必须等待轮到它。例如,我想将其限制为最多 10 个。
笔记
我已经看到在 Firefox 中可以使用“ network.http.max-connections ”来完成,但我没有找到适用于 Chrome 或 Chromium 的任何东西。
如果有帮助,我正在使用 Selenium 和 ChromeDriver (C#) 来启动浏览器。
如果我们比较网页和链接的 JavaScript 文件的这两个选项:
<script src="...">网页末尾,而不是<head>部分但使用<script defer src="..."> 如果怎样的机制defer的工作原理是在本页面描述的,这个其他页面,在Mozilla,而defer在几乎所有的现代浏览器都支持,那么是不是它只是更好地利用选项#2以上?
原因是,选项 1 和 2 的工作方式完全相同,除了选项 #2,JavaScript 文件的下载可以与 HTML 文件的解析(和呈现)并行。所以如果下载时间是0.2s或0.5s,这个时间就可以省了。如果 JS 向页面添加元素或启动页面中的任何动态或交互元素,则这对于 SPA(单页应用程序)或旧式网页来说是正确的。
唯一的例外是,如果浏览器足够聪明,在解析上述选项 1 中的整个 HTML 文件之前,它已经“收集”了所有 JS 文件 URL 并在 HTML 文件解析到最后或到<script>标签的点。但这将使选项 1 和 2 的工作完全相同,因此对于不这样做的浏览器,选项 2 仍然会更快?
PS话虽如此,我认为有一个问题:由于HTTP / 1.1规范建议浏览器一次最多从同一主机名下载2个项目,因此如果正在下载JS文件并占用一个位置,则一些图像文件可以更慢地到达。(如果 JS 和图像来自相同的主机名)
我们尝试在我们公司的 ERP 中实现基于长轮询的通知服务。类似于 Facebook 通知。
使用的技术:
timeout设置为 60 秒和 1 秒sleep。经过近一个月的编码,我们进入了生产阶段。部署几分钟后,我们不得不回滚一切。事实证明,我们的服务器(8 核)无法处理来自 20 名员工的长请求,每个员工使用约 5 个浏览器选项卡。例如:用户使用我们的 ERP 打开了 3 个选项卡,每个选项卡上都有一个长轮询 AJAX。打开第 4 个选项卡是不可能的 - 它会挂起,直到前 3 个选项卡中的一个被杀死(因此 AJAX 停止)。
“Apache 的局限性”,我们认为。所以我们去谷歌搜索。我找到了一些关于 Apache 的 MPM 模块和配置的信息,所以我试了一下。我们的服务器使用preforkMPM,apachectl -l如图所示。所以我在配置中更改了几行,看起来像这样:
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 16
MaxSpareServers 32
ServerLimit 50%
MaxClients 150
MaxClients 50%
MaxRequestsPerChild 0
</IfModule>
Run Code Online (Sandbox Code Playgroud)
有趣的是,它可以在我的本地机器上使用类似的配置运行。在服务器上,看起来 Apache 忽略了配置,因为MinSpareServers设置为 16,它在重新启动后启动 8。当他不知道该怎么做。
我们有一个JavaScript小部件,可以从URL加载数据.
为了减少往返,我想避免第二个HTTP请求并将数据放入HTML页面.
如果我可以保持JavaScript小部件保持不变,那将会很棒.
是否有URL方案从当前HTML页面读取数据?
示例:而不是https://....这个dom://....
我该怎么做$q.all但限制同时执行多少个promises?
我的问题就像我如何限制Q promise并发?
我希望一次产生的过程不超过5个
对于另一个问题,接受的答案是为了与Q一起工作而承诺的图书馆.但我特别感兴趣的是Angular的解决方案,而不是.$qQ
背景:问题正在解决:
我有两个步骤下载的文件:a)获取URL b)下载文件.
浏览器限制了可以同时检索多少文件,因此当直接使用promises时$q.all会触发所有下载,只有 N会立即发生,例如Chrome中的6,而其余文件会延迟.(请参阅浏览器中的Max并行http连接?)
问题是URL已过期,因此当浏览器执行第 N + 1次 文件下载时,URL不再有效.
所以我想做的事情throttled.all(6, promises)而不是$q.all(promise)
javascript ×5
ajax ×3
http ×3
angularjs ×1
apache ×1
browser ×1
chromium ×1
concurrency ×1
dom ×1
frontend ×1
html5-audio ×1
long-polling ×1
php ×1
pouchdb ×1
promise ×1
proxy ×1
script-tag ×1
selenium ×1
url ×1
webserver ×1
websocket ×1