网站如何在没有用户加载时间的情况下将数据近乎即时地保存到数据库中



我在一个类似于https://trello.com/b/1pVMpFHT/projectcards使用Spring Boot和Javascript。该网站允许用户在不同的列表中添加任务。当您按下添加任务时,任务会立即添加到客户端的屏幕上,并保存到他们的数据库中,而不会看到加载时间。

在我的应用程序和我开发过的大多数应用程序中,我使用的流是这样的:客户端添加了一些东西->向服务器发送请求以在数据库中添加该内容->在客户端上等待,直到添加完成->添加过程完成后,在DB中查询最新数据(如果我将模块添加到模块阵列中,我想将新阵列返回给客户端(->客户端获取最新更改后,将其显示在屏幕上。(比如在商店中添加或更新产品并显示新的更改(。

不同的是,在我的网站中,客户端在添加新数据后,必须等待几秒钟才能显示新数据。在我在网上看到的大多数网站中,没有等待时间。

他们是如何达到这样的速度的?他们的数据库有那么快吗?他们是否使用了一些我不知道的技术?问题出现在这样的事情上:为商店中的产品添加新标签。根据我在其他网站上看到的内容,我觉得像这样的小东西不需要加载时间。

这是个好问题。你认为旧网站会采取用户操作,运行一个进程来调用服务器,处理该操作,并将响应返回到浏览器或客户端,在那里屏幕会更新。

更好的方法是在客户端上做更多的工作。

点击按钮执行操作时:

  1. 处理操作(添加新项目(
  2. 将新项目添加到DOM中,比如屏幕上的任务
  3. 在后台调用服务器并创建对象服务器端
  4. 如果服务器需要返回新项目的ID,请将该ID附加到您在(2(中创建的客户端对象或dom中

以上内容非常简单。

事实上,创建网络应用程序的现代方法如下:

  1. 创建工件的JSON对象(待办事项列表(
  2. 在客户端上使用模板引擎从JSON中呈现DOM
  3. 在后台进行服务器调用,检查客户端是否已断开连接
  4. 考虑使用本地存储来跟踪需要推送到服务器的更改
  5. 在客户端上创建新对象,渲染DOM,调用服务器
  6. 考虑服务器是否创建了新对象的UUID,或者您可以在客户端上这样做

事实上,这个过程与你现在做事的方式没有太大区别,它只是一个魔术师的把戏,让用户认为它很快,而慢的东西是在幕后完成的,所以用户看不到它。

在服务器端,您可以研究横向和/或纵向扩展应用程序的方法。但是,如果你不想这样,并且仍然想改善你的用户体验,你可以尝试一种叫做乐观UI延迟补偿的方法,你只需假设请求已经成功,然后更新你的UI,这样你的用户就不必等待请求完成。这很好,因为它使您的应用程序看起来根本没有响应时间。但是,您必须始终记住,在请求实际失败的情况下,必须回滚UI更改,并且必须能够预测服务器的成功响应。

以下是我使用过的两个具有功能的框架

  • 阿波罗
  • Meteor

最新更新