Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过阵列或对象更新数据库的更快方法_Javascript_Rest - Fatal编程技术网

Javascript 通过阵列或对象更新数据库的更快方法

Javascript 通过阵列或对象更新数据库的更快方法,javascript,rest,Javascript,Rest,我只是怀疑不同方法的性能结果 我的过程是: 使用rest调用返回一个名为“projectsarray”的(全局)对象数组,该数组是数据库表的副本,即带有ID、名称、预算等的项目列表 在数组中循环并在html页面上显示项目列表(类似于laravel/nodejs ajax/vue的内容都可以) 更改发送(n async in node)rest调用的一个项目的一个细节,以便更新数据库中的项目,并仅替换我的全局对象中的单个项目,以便尽快查看更新的客户端 我可以: 在开始时,对表中的每个项目(行)进行

我只是怀疑不同方法的性能结果

我的过程是:

  • 使用rest调用返回一个名为“projectsarray”的(全局)对象数组,该数组是数据库表的副本,即带有ID、名称、预算等的项目列表
  • 在数组中循环并在html页面上显示项目列表(类似于laravel/nodejs ajax/vue的内容都可以)
  • 更改发送(n async in node)rest调用的一个项目的一个细节,以便更新数据库中的项目,并仅替换我的全局对象中的单个项目,以便尽快查看更新的客户端
  • 我可以:

  • 在开始时,对表中的每个项目(行)进行rest调用,以检索列表,并在更新列表时对单个项目进行rest调用。(在我看来非常糟糕,我甚至没有尝试过)
  • 获取返回的数组,并使用find()/findIndex()/indexOf()客户端更新数组客户端中的单个项目,并通过rest调用更新数据库,如下所述
  • 让数组成为由项目id和项目对象组成的散列,这样我就可以直接选择正确的项目数组id,而不是使用查找/索引函数循环(但我想它的速度和优雅程度会相同)
  • ..甚至使用单个对象创建一个数组,向该对象添加一个数组id属性,该属性提供数组的索引,如:
  • (…继续…)这样我就可以更新projectsarray[999](而不是循环?它是否循环?)
  • 那么,什么是标准的或更快的方法,哪种功能最有效,哪种方法最优雅


    也许我在只有一种方法的情况下花了很多话,但作为初学者,我不容易看到唯一的方法。

    我没有答案的数字,但我可以告诉你我通常使用的方法:使用findIndex数组方法的解决方案2

    解决方案3有一个警告,即在对象中不能保证顺序。如果你不在乎它,就可以使用它。典型的实现使用类似lodash的方法.keyBy来构建对象,然后使用.value来转换回数组(如果需要)。但是我发现有很多非必需的操作,只是为了避免使用findIndex(如果用户只咨询怎么办?)。这里我看不出有什么优势,因为数组只是列表式的对象,其中键是索引号,所以与findIndex的功能非常相似,访问属性名也是如此(如果您知道解决方案2中的索引)。如果您不知道您的索引,并且您确信将在项目列表中进行更新,那么您可能需要解决方案3

    对于解决方案4,我从未见过它,也没有看到数组id与id的对比优势(前提是您有一个id并且它是唯一的)


    Edit:对于持久性,使用PUT/PATCH调用rest来获得细节。前端无法避免修改原始数组(通常是.splice(x,1,y),其中x是索引,y是新对象),但许多前端框架为您处理更改检测,您不需要制作整个数组对象的浅拷贝或深拷贝,但是你最好检查一下它是如何处理的。

    我没有答案的数字,但我可以告诉你我通常使用什么:使用findIndex数组方法的解决方案2

    解决方案3有一个警告,即在对象中不能保证顺序。如果你不在乎它,就可以使用它。典型的实现使用类似lodash的方法.keyBy来构建对象,然后使用.value来转换回数组(如果需要)。但是我发现有很多非必需的操作,只是为了避免使用findIndex(如果用户只咨询怎么办?)。这里我看不出有什么优势,因为数组只是列表式的对象,其中键是索引号,所以与findIndex的功能非常相似,访问属性名也是如此(如果您知道解决方案2中的索引)。如果您不知道您的索引,并且您确信将在项目列表中进行更新,那么您可能需要解决方案3

    对于解决方案4,我从未见过它,也没有看到数组id与id的对比优势(前提是您有一个id并且它是唯一的)


    Edit:对于持久性,使用PUT/PATCH调用rest来获得细节。前端无法避免修改原始数组(通常是.splice(x,1,y),其中x是索引,y是新对象),但许多前端框架为您处理更改检测,您不需要制作整个数组对象的浅拷贝或深拷贝,但是你最好检查一下它是如何处理的。

    如果我没有弄错的话,你希望获取一些项目,然后在必要时逐个更新它们。可以进行的优化是添加分页。例如,一次获取20个项目。这将提高加载时间,因为通常从用户体验的角度来看,你不希望页面上有1000多个对象。谢谢Vasil,不,我只关心更新速度。项目可能是10个或1000个,现在对我来说这是另一回事,我可以在开始时通过对SQL语句添加限制来限制。如果我理解正确,您希望获取大量项目,然后在必要时逐个更新它们。可以进行的优化是添加分页。例如,一次获取20个项目。这将提高加载时间,因为通常从用户体验的角度来看,你不希望页面上有1000多个对象。谢谢Vasil,不,我只关心更新速度。项目可能是10个或1000个,现在对我来说这是另一回事,我可以在开始时通过向SQL语句添加限制来限制它
    [0]:[{id: 1; name: project1; budget: 1000; ... array-id: 0;}
    [1]:[{id: 23; name: project23; budget: 500; ... array-id: 1;}
    ..
    [999]:[{id: 1245; name: project1245; budget: 600; ... array-id: 999;}