Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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/2/google-app-engine/4.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 在AngularJS中保存大量数据_Javascript_Angularjs_Session Storage - Fatal编程技术网

Javascript 在AngularJS中保存大量数据

Javascript 在AngularJS中保存大量数据,javascript,angularjs,session-storage,Javascript,Angularjs,Session Storage,我有一个非常大的angularjs web应用程序,当你第一次进入网站时,它会加载大文件。该站点由几个SPA组成,每次用户从一个SPA更改到另一个SPA时,这些数据都会丢失,必须重新加载。此外,如果用户按“刷新”,数据也会再次加载 这些数据在用户会话期间不太可能发生更改,因此如果我们能够持久保存这些数据并仅在有更新时重新加载,那就太好了。我知道本地和会话存储,但它们有5000k或10000k的限制,这是不够的。我需要大约20000k的存储空间 有什么方法可以做到这一点吗?也许您可以创建一个使用$

我有一个非常大的angularjs web应用程序,当你第一次进入网站时,它会加载大文件。该站点由几个SPA组成,每次用户从一个SPA更改到另一个SPA时,这些数据都会丢失,必须重新加载。此外,如果用户按“刷新”,数据也会再次加载

这些数据在用户会话期间不太可能发生更改,因此如果我们能够持久保存这些数据并仅在有更新时重新加载,那就太好了。我知道本地和会话存储,但它们有5000k或10000k的限制,这是不够的。我需要大约20000k的存储空间


有什么方法可以做到这一点吗?

也许您可以创建一个使用$http异步加载数据的服务,并将缓存参数设置为true,如下所述:

几个月前我们遇到了同样的问题,但没有找到有效的解决方案。我们采用了两种变通方法:

  • 使用一个水疗中心(将各种水疗中心放入超级水疗中心)。我们有机会这样做。不知道这是否是你的选择。使用状态而不是URL进行路由的模块ui路由器可能会有所帮助

  • 我们使用分页数据来减小初始负载的大小

  • 如果您需要大量的数据来计算浏览器中的统计数据或渲染图形,请考虑将此计算移到后端。 您还可以使用http服务加载数据并缓存它。但是,如果会话处于活动状态时数据未更改,则这只是一个选项

    是和否。 您可以使用服务器端代码以多种不同的方式将javascript注入页面,因此不必向服务器发出ajax请求来获取数据。 例如,如果您使用php,您可以执行以下操作

    <?php
      $script =  "<script> var Data = $data;</script>";
      echo $script;
    ?> 
    
    $scope.data = Data;
    

    但浏览器并不是为了一次处理大数据而构建的。如果你的数据大于5MB,你将会有一个非常糟糕的用户体验,你的应用程序将会崩溃。因此,您应该以一种方式来组织数据,即所有数据聚合都将在服务器端处理,并将小数据包发送到客户端。

    对于站点应用程序来说,内存中的静态数据量太大了。。您可以通过异步调用查看关系数据库,但仍然需要调用来填充它。。老实说,听起来你的系统设计得很糟糕。。或者不清楚你想要实现什么。。可能还有其他选项如果您通过单个http请求加载数据,该请求将由客户端缓存。这能满足你的需要吗。您的URL可能类似于/getdate/所以对于每个会话都是新的。启用缓存时,从文档中,$http将来自服务器的响应存储在指定的缓存中。下次发出相同的请求时,将从缓存提供响应,而不向服务器发送请求。@Pogrindis该限制可能永远不会被使用,我们的需求可能会达到7或8000k,但对于会话存储来说仍然太多;这是一个拥有大量信息的大型网站,所以它的信息量实在是太大了data@SteveDrake我并不真正关心http请求,因为正如您所说,这将由客户端缓存,问题是数据的处理,这可能需要一些时间。谢谢,@PeterPaulKiefer,我无法将其移动到服务器,这些数据仅用于可视化。我会调查一下ui路由器,但恐怕这仍然会留下刷新的问题,这在我们的网站上很常见,因为它显示实时信息。对不起,我想你们误解了我的意思。ui路由器只有在你把所有水疗都放在一个超级水疗中心时才有用。它不提供缓存数据的可能性。但还有另一个想法。是否可以为各个水疗中心打开新的浏览器窗口并在它们之间切换?