VS 2017中本地主机上.NET核心MVC项目的Javascript性能缓慢

VS 2017中本地主机上.NET核心MVC项目的Javascript性能缓慢,javascript,asp.net-core,visual-studio-2017,localhost,iis-express,Javascript,Asp.net Core,Visual Studio 2017,Localhost,Iis Express,简介: render(); requestAnimFrame(main); function render() { renderMapBuildings() } function renderMapBuildings(list) { //var count = 0; for(var i=0; i<list.length; i++) { if ((list[i].pos[1] + camera.pos[1]) < CANVAS_HEIGHT

简介:

render();
requestAnimFrame(main);

function render() {
    renderMapBuildings() 
}

function renderMapBuildings(list) {
    //var count = 0;
    for(var i=0; i<list.length; i++) {
        if ((list[i].pos[1] + camera.pos[1]) < CANVAS_HEIGHT && (list[i].pos[0] + camera.pos[0]) < CANVAS_WIDTH && (list[i].pos[1] + camera.pos[1]) > -60 && (list[i].pos[0] + camera.pos[0]) > -60) {               
            if (list[i].id == Building.Current.id && list[i].type == 1)
                ctx.shadowBlur = 20;
            //count++;
            renderEntity(list[i]);  
            ctx.shadowBlur = 0;
        }
    }
    //console.log("mapbuildings_new length: " + count);
}

function renderEntity(entity) {
    ctx.save();
    ctx.translate(entity.pos[0] + camera.pos[0], entity.pos[1] + camera.pos[1]);
    entity.sprite.render(ctx);
    ctx.restore();
}
我正在开发一个基于.NET核心MVC的战略游戏。游戏的主要部分是用Javascript编写的,因此在客户端执行

计算最密集的部分是在画布上不断地重画“游戏地图”,特别是当你在地图中导航时。它必须在每次击键(W、a、S、D)时检查阵列中的许多对象(建筑物、瓷砖等)

代码的小摘录,让您明白了这一点:

render();
requestAnimFrame(main);

function render() {
    renderMapBuildings() 
}

function renderMapBuildings(list) {
    //var count = 0;
    for(var i=0; i<list.length; i++) {
        if ((list[i].pos[1] + camera.pos[1]) < CANVAS_HEIGHT && (list[i].pos[0] + camera.pos[0]) < CANVAS_WIDTH && (list[i].pos[1] + camera.pos[1]) > -60 && (list[i].pos[0] + camera.pos[0]) > -60) {               
            if (list[i].id == Building.Current.id && list[i].type == 1)
                ctx.shadowBlur = 20;
            //count++;
            renderEntity(list[i]);  
            ctx.shadowBlur = 0;
        }
    }
    //console.log("mapbuildings_new length: " + count);
}

function renderEntity(entity) {
    ctx.save();
    ctx.translate(entity.pos[0] + camera.pos[0], entity.pos[1] + camera.pos[1]);
    entity.sprite.render(ctx);
    ctx.restore();
}
render();
请求帧(主);
函数render(){
renderMapBuildings()
}
函数renderMapBuildings(列表){
//var计数=0;
对于(vari=0;i-60&&(list[i].pos[0]+camera.pos[0])>-60{
if(list[i].id==Building.Current.id&&list[i].type==1)
ctx.shadowBlur=20;
//计数++;
呈现性(列表[i]);
ctx.shadowBlur=0;
}
}
//console.log(“mapu新长度:“+count”);
}
函数呈现性(实体){
ctx.save();
ctx.translate(entity.pos[0]+camera.pos[0],entity.pos[1]+camera.pos[1]);
entity.sprite.render(ctx);
ctx.restore();
}
问题:

render();
requestAnimFrame(main);

function render() {
    renderMapBuildings() 
}

function renderMapBuildings(list) {
    //var count = 0;
    for(var i=0; i<list.length; i++) {
        if ((list[i].pos[1] + camera.pos[1]) < CANVAS_HEIGHT && (list[i].pos[0] + camera.pos[0]) < CANVAS_WIDTH && (list[i].pos[1] + camera.pos[1]) > -60 && (list[i].pos[0] + camera.pos[0]) > -60) {               
            if (list[i].id == Building.Current.id && list[i].type == 1)
                ctx.shadowBlur = 20;
            //count++;
            renderEntity(list[i]);  
            ctx.shadowBlur = 0;
        }
    }
    //console.log("mapbuildings_new length: " + count);
}

function renderEntity(entity) {
    ctx.save();
    ctx.translate(entity.pos[0] + camera.pos[0], entity.pos[1] + camera.pos[1]);
    entity.sprite.render(ctx);
    ctx.restore();
}
问题是,当我在IIS Express上使用Visual Studio 2017在localhost上运行游戏时,javascript部分变得非常慢。上面的代码执行速度慢得多,并且开始结巴。像这样发展很烦人

奇怪的是,它在网上运行得完美无缺。密集的Javascript代码执行速度非常快。它发布在带有ReverseProxy的Linux VPS上

您知道为什么Localhost开发和发布的应用程序之间存在如此巨大的差异吗

其他一些信息:

  • 服务器端代码不是问题,在“延迟”期间也没有SQL调用
  • 我已经创建了一个新的用户配置文件并重新安装了VS 2017
  • 我试了两台不同的电脑(都是Windows 10)
  • 我禁用了Javascript调试

您的web浏览器现在是验证JavaScript性能的关键,我怀疑这是服务器端的问题。优化我的JavasScript代码的性能肯定是我需要做的事情,感谢链接。我会把它挖出来的!虽然我不明白,但是本地服务器(iisexpress)和在线环境(Linux上的Kestrel服务器)之间的性能有什么不同。即使我在同一个浏览器中的不同选项卡中打开它,我也能注意到显著的差异,所以我怀疑这仅仅是代码的问题?您是否在发出AJAX请求?这是我能想到的唯一一件肯定只能在本地暂停性能的事情,因为IIS Express是一个单线程web服务器。换句话说,它一次只能处理一个请求,因此如果您连续快速地发出一堆AJAX请求,它们将开始在队列中备份。而在完整的IIS上,您可以在不做任何特殊操作的情况下处理大约1000个并发请求,如果配置正确,还可以处理更多请求。我正在处理AJAX请求,但不是在浏览实际出现问题的地图时。在延迟期间,它根本不与服务器通信。在延迟之前,您是否打开了网络控制台?只是想确定一下。因为,如果浏览器相同。。找问题的地方不多。