【问题标题】:increasing speed and efficiency of ajax call提高ajax调用的速度和效率
【发布时间】:2011-11-23 01:36:44
【问题描述】:

我不是最有纪律的开发人员,不知道标准并且是自学成才的,所以请多多包涵。我创造的东西非常合乎逻辑和快速,但并不总是使用“编程标准”。

我有一个使用地理定位 API 的移动应用。它从我的数据库中获取数千个地点,并为用户当前位置周围的地点制作 gmaps v3 标记。

我的 JS 有一个 ajax 调用到一个调用数据库的 aspx 页面,生成一个 json 字符串,然后将 json 字符串发送到 javascript,然后创建 google 地图标记。

如果 json 字符串在平面文件中,我会节省时间吗?我不确定,一般来说,从 aspx 页面访问 sql db 是否比使用预渲染 JSON 的平面文件上的 c# 文件 i/o 更快。

编辑:瓶颈在 JS 而不是服务器端代码。

(当然,使用平面文件,每次更新数据库时都会更新)

function ajaxReturn(responseText) {
    var JSONbizarray = (responseText.substring(responseText.indexOf('<span id="Label1">'), responseText.indexOf('</span>')).replace('<span id="Label1">', ''));
    var JSONBizList = JSON.parse(JSONbizarray);

    var list = document.getElementById('businessListContent');
    list.innerHTML = "";
    list.innerHTML += "<ul id=\"barListUL\" data-role=\"listview\" data-theme=\"d\" data-dividertheme=\"d\">";

    for (var i = 0; i < JSONBizList.length; i++) {
        var biz = JSONBizList[i];
        list.innerHTML += "<li tabindex=\"0\" data-theme=\"d\" class=\"ui-btn ui-btn-icon-right ui-li ui-btn-hover-d\" role=\"option\">stuff using json object</li>";
    }

    list.innerHTML += "</ul>";
}

【问题讨论】:

  • 如果您的意思是您将有一些流程维护一个 JSON 的“平面文件”,该文件在每次数据库更改时都会更新,然后 ajax 调用只会从该文件返回数据,我想它可以加快速度,但我不确定这种差异是否值得。您可以尝试并测量它,但您当前的实现是否明显缓慢,或者......?
  • 感谢@nnnnnn,是的,这正是我的意思,它的速度很慢(8 秒),尽管 mapview 似乎比 listview 快,这让我很困惑,因为它要复杂得多(mapview 像 5 秒, listview 8)
  • 我希望没有互联网连接障碍的加载时间更像是 3-4 秒。这些时间是针对约 1000 个 json 对象,每个对象有 7 个属性。
  • 听起来像是您不一定需要的额外复杂层,并且可能会引入更多潜在的故障点。除非您使用像 EF 或其他 API 这样有点“臃肿”的框架,否则数据库访问不应该很慢?同样对于服务层,我认为您不应该使用 ASPX 页面。考虑一个 WCF 服务或原始 http 接口,它应该更快。如果你结合原始的 SqlDataReader + 原始的 http 请求,甚至是宁静的 WCF,它应该会非常快。
  • 什么是 EF 或您认为会减慢这种事情的其他 API?我相信我正在通过 .NET 实体框架使用标准 DB 连接字符串(它是 MySQL 而不是 MSSQL,但我有一个到 vs2010 的插件,让我可以从 MySQL 构建实体对象可能是它???),我不知道是否可以称为 API?

标签: c# javascript ajax geolocation


【解决方案1】:

在本地缓存数据总是一个好主意。我当然会寻找机会。但是,您可能会遇到需要在场景中本地存储的数据量的问题。

要考虑的另一件事是提高服务器端的效率。确保对服务器的调用是 GET 并且可以在那里缓存。

【讨论】:

  • 调用是 GET,如何在服务器端缓存它?
【解决方案2】:

除了尝试和衡量之外,没有其他方法可以回答性能问题。

Stopwatch (http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx) 类将负责测量,File.ReadAllLines (http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx) 将提供“从文件中读取。大约 5 行代码,您的答案将针对您的 DB/磁盘/服务器/网络。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2013-03-27
    • 2012-08-22
    • 2015-03-21
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多