【问题标题】:What is the best way to deal with MySql database in single-page-app?在单页应用程序中处理 MySql 数据库的最佳方法是什么?
【发布时间】:2015-09-19 15:36:53
【问题描述】:

在单页应用中专业处理复杂的MySql数据库最好的方法是什么?

我通常使用jQuery ajax从数据库中获取数据,但是在将数据检索到浏览器时似乎太慢了。

当我使用keydown 行为从数据库中获取值时,总是会发生这种情况,当我根据change 上的另一个下拉值更改 PHP 文件中的下拉菜单值时,例如国家 > 城市

我的代码是这样的:

JS

input.keydown(function(){

    var val = $(this).value()

        $.ajax({ type: "GET",   
            url: "results.php",   
            data: form.serialize(),
            async: false,
            success : function(data)
            {
                $('.results').append(data);
            }
        })

    }

});

如果我有一个复杂的查询,这有时会使浏览器冻结片刻。

我应该使用 Ajax 吗?或者尝试使用其他框架,如 Angular.js 甚至 Backbone?

请指教。

【问题讨论】:

  • 那些框架仍将使用 ajax。 slow 的具体问题是什么?还要定义慢在时间价值上的含义
  • 我怀疑你的瓶颈在于你的 SQL 查询——所以改变你的数据检索方法可能对你没有多大帮助。如果您的数据不是关系型数据,那么使用 MongoDB 等非关系型数据库可能更有意义
  • 这个问题需要改进。例如,这是我的查询、模式和天哪,任何人都可以帮我加快速度吗
  • @Drew 问题已经改进
  • 将 async 设置为 false 是阻止浏览器的原因。我会在页面加载或操作时以块的形式获取并存储所有这些值。例如,在页面加载时返回所有国家,然后当有人选择一个国家时,调用城市并将它们保存在本地。每次按键都点击服务器将对您的服务器/数据库造成极大的负担。但要回答你的问题,我会推荐 AngularJS,但我也听说过 React 的好消息。

标签: jquery mysql ajax angularjs backbone.js


【解决方案1】:

虽然我无法在没有看到您在服务器端做什么的情况下评论您的 SQL 减速,但您的页面冻结问题更直接,与服务器本身无关。

正如上面 David Jones 的评论所述,您正在阻止浏览器执行任何其他操作,直到该调用返回,因为您在 AJAX 调用中禁用了“异步”。

除了服务器处理之外,网络上的 IO(即 AJAX 调用本身)与执行代码甚至可能是您的 SQL 调用相比是一个非常慢的事件。大部分时间都在等待请求完成往返。

Javascript 围绕异步事件循环构建的原因正是为了避免这种情况(AJAX 中的第一个字母代表“异步”)。

我会专注于您的前端,而不是让它等待调用完成。上面的问题没有给出关于为什么将 async 设置为 false 的任何上下文,但如果是因为否则你会进行过多的服务器调用(每个 keydown 调用一个),请尝试使用类似 debounce 的东西来限制您对后端的调用。

【讨论】:

  • 谢谢。你知道像 Facebook 这样的大平台依赖什么吗?他们是否依赖 Ajax 和 MySql?
  • 没问题!我不能说 Facebook 具体使用什么,但是 MySQL 在生产中被很多人广泛使用,而且它运行良好。 YouTube 和 Twitter 已广泛使用它以及其他技术。在一定规模下,您必须考虑分片和复制等高级主题,但查询量非常大。当你达到那个点时,请参阅:quora.com/…
  • 另外,如果你想看看有多少 AJAX 被广泛使用,请在使用 GMail 时打开你的开发控制台 =)
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多