当前位置: 首页 > 面试题库 >

如何避免浏览器中的ajax调用过多导致内存不足错误

傅明知
2023-03-14
问题内容

我正在构建一个Web应用程序,该应用程序需要同时使用jquery ajax简短形式进行大约28000个数据库调用。

它可以正常处理大约6000个调用,但随后浏览器在浏览器控制台中向我提供了大约20000以下错误(每个调用一个):

POST(我的数据库调用)网:: ERR_INSUFFICIENT_RESOURCES

有谁知道如何解决这个问题?也许要创建一个缓冲区或什么?

谢谢!

编辑1:添加一些代码:

好的,因此用户可以填写一些值(例如GHI> 4500,长宽比在157.5和202.5之间)

将进行以下调用:

loadAllData('ghi', 4500, findIdealPoints);

该调用导致此功能:

function loadAllData(type, above, callback){
var data = {};
$.post('php/getIdealData.php?action=get&type='+type+'&above='+above, data, callback);

}

在PHP中运行以下查询:

 "SELECT  `GHI` ,  `lat` ,  `long` 
    FROM solar
    WHERE  `GHI` >'{$_GET['above']}' ORDER BY `lat`,`long`;";

这将以JSON格式返回约28880个记录,并以一个数组形式进行调用,并调用执行以下操作的回调方法:

function findIdealPoints(data){
var i = 0;
while (i < data.length){
    loadAspectWithinRange('aspect', data[i]['lat'], data[i]['long'], 10, compareWithAspect);
    i++;
}

}

哪个运行此php查询:

"SELECT `aspect`,
            `lat`, `long`, distance_in_km
            FROM (
                SELECT `aspect`, `lat`, `long`,r,
                (6378.10 * ACOS(COS(RADIANS(latpoint))
                * COS(RADIANS(`lat`))
                * COS(RADIANS(longpoint) - RADIANS(`long`))
                + SIN(RADIANS(latpoint))
                * SIN(RADIANS(`lat`)))) AS distance_in_km
            FROM aspect
            JOIN (
                SELECT  '{$_GET['lat']}'  AS latpoint, '{$_GET['long']}' AS longpoint, 10.0 AS r
            ) AS p
            WHERE `lat`
                BETWEEN latpoint  - (r / 111.045)
                AND latpoint  + (r / 111.045)
            AND `long`
                BETWEEN longpoint - (r / (111.045 * COS(RADIANS(latpoint))))
                AND longpoint + (r / (111.045 * COS(RADIANS(latpoint))))
            AND `aspect`
                BETWEEN '{$_GET['lowA']}' AND '{$_GET['highA']}'
            ) d
            WHERE distance_in_km <= r
            ORDER BY distance_in_km";

并转到运行以下命令的回调函数:

function compareWithAspect(data){
var idealPoints =[];
for (var i=0; i<data.length; i++){
            idealPoints.push(new google.maps.LatLng(data[i]['lat'], data[i]['long']));
        }

        if (idealPoints.length > 1){
            makePolygon(idealPoints)
        }
}

makePolygon只是使用Google Maps API在地图上绘制。

我知道这很多事,而且似乎有些令人费解,如果有人可以向我展示一种更好的方法,我将非常乐意!

再次感谢


问题答案:

你可以做这样的事情。

function findIdealPoints(data){
   var i = 0;
    while (i < data.length){
       loadAspectWithinRange('aspect', data[i]['lat'], data[i]['long'], 10,          
     compareWithAspect);
    i++;
}

不必为每次出现都进行Ajax调用,而是将数据对象发送到您的调用中

 loadAspectWithinRange('aspect',data,10,compareWithAspect)

然后,在Ajax请求中,将对象数组发送到您的服务,并检索所有对象的结果,而不是一一对应。

$.ajax({
   url:"...",
   data:{
       attr1:'aspect',
       points: data(here is the array retrieved from "getIdealData.php")
       attr2: 10
    },
   success:function(data){
      compareWithAspect(data)
   }
})

在服务器端处理中,为这些getIdealData.php点上的所有元素构建一个对象数组。

而不是为每个元素都做一个Ajax会更好



 类似资料:
  • 问题内容: 我正在使用以下代码通过AJAX提交表单: 背景 我的PHP处理程序执行各种任务,然后发回响应。然后,我可以在成功或错误函数中执行某些操作。 我的问题 当用户双击表单的“提交”按钮时,将发生两次AJAX调用,这将导致我的PHP处理程序中的代码执行两次。 我的问题 如果用户双击提交,如何避免我的代码执行两次? 问题答案: 当AJAX调用再次出现时,请先禁用首次单击的“提交”按钮,然后重新启

  • 我的web项目一旦有前端页面的更新就需要清理浏览器缓存后才能看到最新效果,有时不清理不但不能看到最新效果还会出现页面布局错乱,如何能避免这种情况,我想要更新前端页面,用户也不需要清理浏览器缓存,页面关闭重新打开就能显示最新效果

  • 问题内容: 有效的Java说: 内存泄漏的第三个常见来源是侦听器和其他回调。如果在客户端注册回调但未显式注销的情况下实现API,除非您采取某些措施,否则它们会累积。确保回调被及时垃圾回收的最佳方法是仅存储对其的弱引用,例如,通过仅将它们作为键存储在WeakHashMap中。 我是Java的初学者。有人可以教我如何在回调中创建弱引用,并告诉我它们如何解决内存泄漏问题吗?谢谢。 问题答案: 阅读这篇文

  • 问题内容: 我的java appengine应用程序中有几个servlet,它们对内存进行排序并需要几秒钟的时间才能完成。这些完全没有错误。 但是,我最近为appengine启用了appstats并开始收到以下错误: 问题答案: 我想知道这是否可以帮助您减少OutOfMemoryErrors的发生: 如何减少Google App Engine Java上Appstats的内存使用量

  • 问题:正在退出本机内存异常,并想知道过多的垃圾收集是否会导致这种情况?此外,关于GC策略或调优的任何建议都会有所帮助。我不确定我所拥有的是否值得改变。 好的参考StackOverflow问题:使用哪个GC策略 规格: 服务器环境:Websphere版本7 初步分析: 我假设内存泄漏,但是垃圾回收看起来可以回收内存 附加屏幕截图: 堆利用率为1.1-4小时。每个绿色小垃圾桶代表一个主要的垃圾回收机制

  • 问题内容: 我得到了一个将巨大的表转换为自定义XML文件的任务。我将使用Java来完成这项工作。 如果我只是发出“ SELECT * FROM customer”,它可能会返回大量数据,这些数据最终会导致OOM。我想知道,有没有一种方法可以立即处理记录,一旦可用,就可以在sql检索过程中从内存中删除记录? -–于2009年7月13日编辑 让我详细说明我的问题。我有1个数据库服务器和1个应用程序服务