JavaScript搜索和数据库搜索哪个更好?

3

我有一个员工表格,大约有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.
        }
   }
}

第二种解决方案是将员工ID传递给数据库,获取员工的所有信息。代码如下:
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变得臃肿。

更新:

所以我的一个朋友提出了一个简单的解决方案。我为500行(平均值)存储4列,因此我不认为网页会非常缓慢。 在将行加载到表格中时,在编辑链接下,我将data-rowId作为属性赋予数据,以便于检索数据。 假设我将所有员工信息存储在名为employeeInfo的变量中。 当有人点击编辑链接时,$(this).attr('data-rowId')将给出rowId,而employeeInfo[$(this).attr('data-rowId')]应该给出关于员工的所有信息。 不需要存储员工ID并循环遍历员工表以查找匹配的员工ID,行号(rowid)就足够了。这非常简单,但是没有让我想起它。


我们能给出什么可能的答案呢?首先,显而易见的问题是,你的记录有多大?细节有多大? - Elliott Frisch
如果您已经在JavaScript中拥有了信息,我建议避免进行另一个ajax调用。无论如何,您最终都需要搜索适当的ID记录,最好在JavaScript中完成。 - dckuehn
它取决于你的字段数量,如果你使用JavaScript,它将比使用数据库更快。数据库的Ajax响应有时很慢。 - Zeeshan
可能重复:https://dev59.com/Zmox5IYBdhLWcg3w_JPd?answertab=active#tab-top - Kanhu Bhol
4个回答

1
我建议您向控制器发出AJAX调用。原因有两个:
  1. 由于安全问题,不建议在JavaScript中处理数据库活动。
  2. JavaScript在客户端机器上运行,应该具有最小的负载和计算量。
JavaScript应尽可能轻巧。所以我建议您在数据库本身中进行操作。

0
不要过分依赖JavaScript的性能,因为它严重依赖于运行它的计算机。我建议你在服务器端存储和搜索数据,而不是在浏览器中加载大量数据负载,这会受到终端用户资源的限制。 在JavaScript中运行长循环可能导致UI无响应和令人烦恼。使用Ajax调用以获取所需数据是一个好习惯。

0

你是否正在使用HTML5?你的用户通常会拥有相对较快的多核计算机吗?如果是这样,Web Worker(http://www.w3schools.com/html/html5_webworkers.asp)可能是一种将搜索任务转移到客户端并保持用户界面响应性的方法。

请注意,我从未使用过Worker,所以这些建议可能完全不准确,但它们对于像这样的任务确实很有趣。


0
在关注责任分离和推荐的最佳实践方面,你应该在服务器上处理领域级别的数据检索,并依靠客户端来处理和显示与其相关的记录。
通过将数千条记录填充到客户端进行解析、排序、搜索等操作,不仅会降低性能,影响用户体验,还会产生许多潜在的安全风险。当然,这也取决于应用中数据的性质,但对于诸如员工记录之类的数据,可能不希望将其存储在客户端上。使用该应用程序的任何人都将能够访问所有这些数据。
解决这个问题的更加实用的方法是让控制器仅向客户端提供相关的特定数据,消除了搜索大量记录的需求。您还可以通过向服务器发出ajax查询以检索数据来获取单个对象。这样做既可以保证显示数据库的当前状态,也比您在JS中编写的任何代码更加优化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接