哪个更好,在javascript或数据库中搜索?

时间:2014-02-12 05:05:43

标签: javascript performance

我有一个网格(员工网格),说1000-2000行。 我在网格中显示员工姓名和部门。 当我获得网格数据时,我也得到了员工的其他详细信息(出生日期,地点,角色等) 因此,用户可以选择编辑员工详细信息。当他点击编辑时,我需要在弹出窗口中显示其他员工详细信息。因为我已经将所有数据存储在JavaScript中,所以我搜索特定的id并显示所有细节。所以代码就像

function getUserDetails(employeeId){
  //i store all the employeedetails in a variable employeeInformation while getting //data for the grid. 
   for(var i=0;i<employeeInformation.length;i++){
        if(employeeInformation[i].employeeID==employeeId){
              //display employee details.
        }
   }
}

第二个解决方案就像将employeeid传递给数据库并获取员工的所有信息。代码就像

function getUserDetails(employeeId){
       //make an ajax call to the controller which will call a procedure in the database
       // to get the employee details
       //then display employee details
    }

那么,当我处理1000-2000条记录时,您认为哪种解决方案最佳。 我不希望通过在页面中存储大量数据来使JavaScript变得繁重。

更新:

所以我的一位朋友提出了一个简单的解决方案。 我存储4列500行(平均)。所以我不认为网页不应该快速缓慢。 在将行加载到网格时,在编辑链接下,我将data-rowId作为属性,以便于检索数据。 假设我将所有员工信息存储在名为employeeInfo的变量中。 当有人点击编辑链接时.. $(this).attr('data-rowId')将给出rowId和employeeInfo [$(this).attr('data-rowId')]应该提供有关该员工的所有信息。 而不是存储employeeid并循环遍历employee表以查找匹配的employeeid,rowid应该可以解决问题。这很简单。但没有打击我。

4 个答案:

答案 0 :(得分:1)

我建议您对控制器进行AJAX调用。由于两个主要原因

  1. 由于安全问题,不建议在javascript中处理数据库活动。
  2. Javascript在客户端计算机上运行,​​它应该具有最少的负载和计算。
  3. Javascript应尽可能轻松。所以我建议你在数据库中自己做。

答案 1 :(得分:0)

不要指望JavaScript性能,因为它严重依赖于运行的计算机。我建议你在服务器端存储和搜索,而不是在浏览器中加载大量的数据有效载荷,这非常局限于最终用户的资源。 在JavaScript中运行长循环可能会导致无响应和恼人的UI。使用Ajax调用来获取所需的数据是一种很好的做法。

答案 2 :(得分:0)

您使用的是HTML5吗?您的用户通常会拥有相对较快的多核计算机吗?如果是这样,Web工作者(http://www.w3schools.com/html/html5_webworkers.asp)可能是一种将搜索卸载到客户端同时保持UI响应的方法。

请注意,我从来没有使用过工作者,所以这个建议可能会偏离基础,但它们看起来确实很有趣。

答案 3 :(得分:0)

在关注点分离和建议的最佳方法方面,您应该在服务器上处理域级数据检索,并依靠客户端处理和仅显示与其相关的记录。 / p>

通过为您的客户端填充数千条记录,然后进行解析,排序,搜索等,您不仅会受到巨大的性能影响并且会降低用户体验,而且还会产生许多潜在的安全风险。显然,这也取决于应用程序中数据的性质,但对于诸如员工记录之类的东西,您可能不希望将其存储在客户端。任何使用该应用程序的人都可以访问所有这些内容。

解决此问题的更务实的方法是让您的控制器仅使用与其相关的特定数据填充客户端,从而无需搜索许多记录。您还可以通过对服务器进行ajax查询来检索单个对象以检索数据。这有双重好处,可以保证您显示数据库的当前状态,并且比您希望用JS编写的任何内容都要优化得多。