Javascript 通过阵列或对象更新数据库的更快方法
我只是怀疑不同方法的性能结果 我的过程是:Javascript 通过阵列或对象更新数据库的更快方法,javascript,rest,Javascript,Rest,我只是怀疑不同方法的性能结果 我的过程是: 使用rest调用返回一个名为“projectsarray”的(全局)对象数组,该数组是数据库表的副本,即带有ID、名称、预算等的项目列表 在数组中循环并在html页面上显示项目列表(类似于laravel/nodejs ajax/vue的内容都可以) 更改发送(n async in node)rest调用的一个项目的一个细节,以便更新数据库中的项目,并仅替换我的全局对象中的单个项目,以便尽快查看更新的客户端 我可以: 在开始时,对表中的每个项目(行)进行
也许我在只有一种方法的情况下花了很多话,但作为初学者,我不容易看到唯一的方法。我没有答案的数字,但我可以告诉你我通常使用的方法:使用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;}