相关疑难解决方法(0)

jQuery中的并行AJAX请求

我的应用程序最多运行180个AJAX作业,这些作业在服务器端是IO密集型的(长时间运行的SELECT查询).

我想优化我可用的多个CPU内核的负载,从每个AJAX调用顺序执行的设计切换到执行这些请求的设计,最多并行执行4个请求.

一个可能但丑陋的解决方案可能是在客户端上同时发出所有180个请求,并让服务器使用Semaphore存储的Session或者Application级别.我将在稍后讨论应用程序工作负载.

我想找到一个更好的解决方案,其中调用全部按顺序启动(表上的每一行是一个不同的检查查询)但是当任何终止时,下一个启动并且有一些(即4个)并发AJAX请求与各自的装载机指标.

我曾尝试使用Threadpool-js,但我发现自己无法使用工作者的jQuery

我目前的代码如下

function GlobalCheck() { //entry point
        if (ValidateDate()) {
            //Below are global variables
            list = $(".chkClass:checked"); //Only checked rows deal to AJAX request
            num = $(".chkClass:checked").length; //Total number of ajax calls
            done = 0; //Count of complete calls. When it reaches num we are done!

            if (list.length == 0) {
                alert('...');
                return;
            }

            $(".pMessage").fadeOut();
            $(".tbStatus").html('');
            $(".submit").hide();
            $(".exportFunctions").fadeOut();
            $(".loader").show();
            $(":checkbox").attr('disabled', true);

            SingleCheck(0); //simplification, I do other …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery

11
推荐指数
1
解决办法
2697
查看次数

Javascript包含以后不在页面中加载

我们有一个Rails应用程序,我们在html头中包含我们的应用程序依赖项application.js:

//= require jquery
//= require analytics
// other stuff...
Run Code Online (Sandbox Code Playgroud)

然后在单个页面上,我们在页面底部有一个脚本标记,用于analytics:

<script>
  analytics.track('on that awesome page');
</script>
Run Code Online (Sandbox Code Playgroud)

这通常很好,但偶尔我们会看到错误analytics is not defined,最近一次是在Chrome 43上.因为所有内容都应该同步加载,这似乎应该是开箱即用,但我将脚本更改为:

<script>
  $(document).ready(function () {
    analytics.track('on that awesome page');
  });
</script>
Run Code Online (Sandbox Code Playgroud)

而现在我们偶尔会看到$ is not defined.我们没有看到来自同一IP的任何其他错误,否则我会怀疑出现了问题application.js.任何其他想法为什么它可能会破裂?您可以在此处查看示例页面.

完整的application.js:

// Polyfills
//= require es5-shim/es5-shim
//= require es5-shim/es5-sham
//= require polyfills
//
// Third party plugins
//= require isMobile/isMobile
//= require jquery
//
//= require jquery.ui.autocomplete
//= require jquery.ui.dialog …
Run Code Online (Sandbox Code Playgroud)

javascript analytics ruby-on-rails

11
推荐指数
2
解决办法
1234
查看次数

Web Worker对每个域上每个浏览器的最大http连接的影响

此问题是Max HTTP Connections的扩展

Web工作者给这个等式带来了什么样的影响,限制会增加吗?如同3个网络工作者能够发送(3*浏览器限制)请求?

html5 web-worker httpconnection

11
推荐指数
0
解决办法
410
查看次数

在企业应用程序框架中包含js/css文件的最佳实践是什么?

我正在ASP.NET MVC3中进行企业应用程序开发.当然,我有不同的主布局和多个视图.

我的担忧

  • 在主布局中包含所有js/css文件可能会影响页面的性能
  • 在视图中包含文件(在需要的地方)正在创建重复的引用(启动jquery /其他库)
  • 更多参考,客户端和服务器之间的来回请求越多 - 这反过来又会影响输出页面的性能

我的想法

  1. 创建所需资源的自定义列表并将其存储在ViewBag中.让主布局引用此对象以包含js/css文件
  2. 或者添加引用具有某个键的操作的链接(用于标识正在呈现的页面的唯一值),并动态生成包含所有必需资源的输出作为单个响应.并使用唯一键为后续请求缓存输出(inmem/staticfile).一种自定义资源捆绑.

请分享您的想法,欢迎任何想法和建议!

编辑:2012年9月1日

下面的答案更多地讨论了Web应用程序开发领域的优化技术 - 欣赏这些答案.

我想从体系结构的角度讨论,重点是创建正在呈现的页面所需的动态资源集合.

例如,在特定的视图中,我想使用需要jquery-ui-1.8.11.min.js的jQuery UI,在某些视图中我想使用需要MicrosoftMvcAjax.js和jquery.unobtrusive-ajax的MVC3 ajax. min.js

我不想在主布局中包含永久引用,这将导致为所有视图加载这些j.相反,我想在运行时包含动态的js文件.

希望这可能会增加清晰度!

谢谢你的帮助 - 维诺德

html javascript css asp.net-mvc razor

10
推荐指数
1
解决办法
3302
查看次数

使用RequireJS加载jQuery - 哪个更好,本地版本还是CDN?

编辑澄清:

性能方面(虽然这仍然是一个狂野的术语,我知道),哪个更好 - 通过RequireJS加载本地版本或jQuery的CDN版本?

为了记录,RequireJS在线文档包含一些似乎阻止CDN使用的段落,虽然我不太确定100%的含义:

不要在构建中混合使用CDN加载和shim配置.示例场景:您从CDN加载jQuery但使用shim配置加载类似于依赖于jQuery的Backbone的股票版本.在进行构建时,请确保在构建的文件中内联jQuery,并且不要从CDN加载它.否则,Backbone将在构建文件中内联,并且将在加载CDN的jQuery之前执行.这是因为shim配置只会延迟加载文件,直到加载依赖项,但不会对define进行任何自动换行.在构建之后,依赖关系已经内联,shim配置不能延迟执行非define()'d代码,直到以后.define()模块在构建之后可以使用CDN加载的代码,因为它们正确地将它们的源包装在定义工厂函数中,该函数在加载依赖项之前不会执行.所以上课:shim config是非模块化代码遗留代码的一种权宜之计.define()'d模块更好.

理论上,使用CDN jQuery文件会导致另外一个HTTP请求(不能使用r.js与其他JS文件合并),但是具有潜在的好处,即访问者可能已经从其他网站缓存了CDN版本.访问过.

但是,如果我从googled信息中得到了正确的结果,你仍然需要向r.js提供一个本地jQuery副本,因为生成的缩小的JS文件仍然需要包含jQuery模块的副本以确保依赖性的一致性.这将导致在本地和CDN上加载jQuery.(希望我得到这个部分吧?)

那么,哪种方式更好?

javascript jquery cdn requirejs

9
推荐指数
3
解决办法
1757
查看次数

Web API服务 - 如何使服务器上的请求同时执行

我正在使用由IIS 7.5托管的WebApi休息服务控制器,我从这篇文章中了解到:

是否所有Web请求都是并行执行的并且是异步处理的?

的WebAPI服务,默认情况下,并行执行所有传入的请求,但只有目前的多个请求(在某一时刻)的来源不同的会话. 也就是说,如果单个客户端将同时向服务器发送一些请求,则所有这些请求将按顺序执行,并且不会同时执行.

这种行为对我们来说是一个真正的问题,因为在某些情况下,我们的客户端会异步地(通过浏览器)从不同客户端的侦听器发送大量请求,并且所有这些请求实际上都会排队,而不是在服务器上同时执行.因此,在某些情况下,我们遇到了严重的性能问题,这些问题在客户的网页上非常明显.

我们怎样才能解决这个问题?我知道我们可以 禁用会话状态,但这不是正常的事情.

c# asp.net-mvc multithreading session-state asp.net-web-api

9
推荐指数
2
解决办法
7292
查看次数

Javascript DataTransfer 项目不通过异步调用持久化

我使用 Vuejs 和 DataTransfer 异步上传文件,并且我希望允许拖放多个文件一次上传。

我可以进行第一次上传,但是在上传完成时,Javascript 已经垃圾收集或更改了 DataTransfer 项目对象。

我怎样才能重新设计这个(或克隆事件/DataTransfer 对象),以便在整个 ajax 调用过程中我仍然可以使用数据?

我已经遵循了关于如何使用 DataTransfer 的 MDN 文档,但我很难将它应用于我的特定案例。我也试过复制事件对象,正如你在我的代码中看到的那样,但它显然没有做深复制,只是传递了引用,这没有帮助。

    methods: {
        dropHandler: function (event) {
            if (event.dataTransfer.items) {
                let i = 0;
                let self = this;
                let ev = event;

                function uploadHandler() {
                    let items = ev.dataTransfer.items;
                    let len = items.length;

                    // len NOW EQUALS 4

                    console.log("LEN: ", len);
                    if (items[i].kind === 'file') {
                        var file = items[i].getAsFile();
                        $('#id_file_name').val(file.name);
                        var file_form = $('#fileform2').get(0);
                        var form_data = new FormData(file_form); 

                        if (form_data) { …
Run Code Online (Sandbox Code Playgroud)

html javascript drag-and-drop data-transfer-objects vuejs2

9
推荐指数
2
解决办法
1297
查看次数

是否可以通过HTTP接收无序响应?

第8.1.2.2节流水线说:

"服务器必须按照收到请求的相同顺序发送对请求的响应".

所以,我想,如果我从浏览器发出多个AJAX请求,它们仍将按照服务器接收它们的顺序进行处理.

但后来,我正在阅读Alex Maccaw的这篇文章,他说:

"最后一个问题是与并行发送的Ajax请求.如果用户创建记录,然后立即更新同一记录,将同时发送两个Ajax请求,一个POST和一个PUT.但是,如果服务器在"创建"之前处理"更新"请求,它就会吓坏.它不知道哪条记录需要更新,因为还没有创建记录.

解决方案是管道Ajax请求,并以串行方式传输它们.Spine默认执行此操作,排队POST,PUT和DELETE Ajax请求,以便一次发送一个.只有在前一个请求成功返回后才发送下一个请求."

那么,我如何以编程方式创建Alex Maccaw提到的场景?

ajax asynchronous web-applications http

7
推荐指数
1
解决办法
5747
查看次数

为什么当我动态加载脚本时,firefox随机停止加载标签脚本?

为什么Firefox随机停止加载<script>用js动态添加的标签?
在这张图片上,我动态加载这些脚本,然后将它们添加到dom中

  • "/assets/js/lib/socket.io-1.3.6.js"
  • "/assets/js/lib/tweenmax.min.js"
  • "/assets/js/lib.js"
  • "/assets/js/module.js"
  • "/资产/ JS /模块"

相当随机,结果就是这样,动态加载的随机脚本和其他脚本(7-15s之间)之间存在很大的滞后

显示时间线装载ressources的萤火虫Pic

我实际上加载了我的脚本

function(url, callback){
    var elem = document.createElement("script");
    elem.async = true;
    elem.src = url;
    elem.type = "text/javascript";
    elem.onload = callback;
    document.getElementsByTagName("body")[0].appendChild(elem);
}
Run Code Online (Sandbox Code Playgroud)

编辑:
当我在我的html页面中添加脚本标签时,滞后不会出现,它只会在我用JavaScript加载脚本时出现.但实际上我需要用JavaScript加载这些脚本.

有一个小 提示的错误https://jsfiddle.net/ccgb0hqr/如果警报显示立即刷新页面,直到错误发生

javascript browser firefox loading script-tag

7
推荐指数
1
解决办法
479
查看次数

http请求在javascript html5音频预加载时被取消

我正在尝试用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)

javascript http persistent-connection html5-audio

6
推荐指数
1
解决办法
1109
查看次数