【发布时间】:2015-04-15 12:44:22
【问题描述】:
我的应用程序中有一个购物车,它目前对我有用,但我的同事遇到的问题是它太“慢”。我一直在想一个更好的方法来实现它,以使其更快、更高效。
目前这是我的页面加载方式:
- 产品/票页面加载。
- AJAX 函数从服务器获取产品/票证并显示在页面上。
每个产品都有一个这样的购买按钮:
<button ng-click="buyTicket(id)" class="btn">Buy Ticket</button>
buyticket 是这样运作的:
我将产品/票证的 ID 传递给我的函数。
- AJAX 函数将 id 发布到服务器。
- 服务器运行数据库查询以根据 id 检索产品/票证信息。
- 产品/票信息保存在“购物车”表中。
- AJAX 函数返回数据“true”作为响应。
-
我广播了这个:
$rootScope.$broadcast('TICKET_ADDED', true);
-
Cart 指令监听广播并对服务器进行 AJAX 调用以获取购物车数据:
$scope.$on('TICKET_ADDED', function(response) { $scope.loadCart(); })
返回的数据分配给一个数组并显示在购物车中。
每个用户购物车都由一个随机生成的长度为 25 的字符串标识。
这就是我的购物车目前的工作方式,我想要一个更快、更好的方法来做到这一点。
编辑:(使用调试栏获取这些统计信息)
页面加载时: 运行的查询数:1 内存使用:12.25 MB 请求时长:1.04s AJAX 请求数:3
点击购票功能时: 运行的查询数:5 内存使用:12.75 MB 请求持续时间:934.41 毫秒 AJAX 请求数:2
【问题讨论】:
-
所以你的同事认为它太慢了,但你认为它很好?
-
引入缓存,包括客户端和服务器端。在 Angular 中,$http 甚至有一些开箱即用的 cache=true 设置。
-
@popovitsj 缓存?能否进一步解释一下?
-
另外两个声称它很慢但对我来说似乎很正常,大约需要 3 秒,对他们来说大约需要 6-7 秒,我说这是他们的互联网连接,但他们指出了另一个立即运行的网站。
-
我不了解您的整个应用程序结构,但第 5 步和第 6 步真的有必要吗?如果一切都很慢,那么在第 4 步返回购物车数据会更有意义,以避免第二次请求的开销。