13 javascript performance angularjs ionic-framework
我对离子1很新,我正在开发一个带有多个URL的应用程序(带有Ionic 1和angular js),每个URL都会显示一个类别列表,然后是每个类别的项目列表,每个项目都有一个文档URL.如何在后台启动时预加载所有这些URL但不显示它们?有什么办法可以实现吗?一个好的代码示例或教程将有很大帮助.另外,请告诉我这是否是最好的方法,如在启动时预加载和预缓存所有内容,或者应该按类别或其他方式完成.
提前致谢!
我假设您不想在下一个屏幕中加载数据,为用户提供完美的体验。
是的,您可以开始在第一页上加载 URL,因为您希望它们获取您想要在以后的屏幕中使用的数据。
在存储方面
- 在 AngularJs 中,如果你希望某些东西在整个应用程序范围内持久存在,你应该使用 $rootscope[注意保留大量数据可能会导致内存问题,你需要定期清除它]。
- 或者另一种选择是将其存储在本地存储中。并根据您的需要获取。
- 如果您愿意,您可以在不同的屏幕控制器之间共享这些数组。
加载[从服务器获取响应]时,你可以做两件事
1. get single JSON response having all the data
2.have multiple urls, and load them serially.
根据您提前加载第五(页)屏幕数据的要求,这不是一个好的做法,甚至会阻止用户看到更新,但因为这是您的要求。我们有几种方法:
您只需加载一个 url 即可获取所有数据。因此,您不需要像现在一样加载不同的网址。但要注意,这将是一个很大的 Json。因此,当您存储它时,将类别和所需数据[屏幕方面的要求]分开,并存储在本地存储中,以便于访问。
这可能会导致火灾大约 10-15[取决于您的类别] url 可能会影响 UI 线程响应。这不需要对服务器端响应进行任何更改。
**
以编程方式顺序加载 url:
**
URL 加载:此方法将获取特定类别的详细信息 [id 或任何适合您的内容]。这将触发 http 请求并返回结果。
getCategoryDetails(category){
url = url+category;
return $http({
method: 'GET',
url: url,
headers: --
}).then(function onSuccess(response) { //<--- `.then` transforms the promise here
Run Code Online (Sandbox Code Playgroud)
//您可以将响应存储在本地存储中 return response }, function onError(response) { throw customExceptionHadnler.getErrorMsg(response.status, response.data); }); }
并行:此方法将并行执行,我们只需加载所有类别[ids],然后使用 $q.all 等待所有网址加载完成。
function loadUrlsParallel(urls) {
var loadUrls = []
for(var i = 0; i < urls.length; i++) {
loadUrls.push(getCategoryDetails(urls[i]))
}
return $q.all(loadUrls)
}
Run Code Online (Sandbox Code Playgroud)
第一个 API:此方法加载第一个 url,然后并行调用上面的方法加载 url
getListOfCategories(){
url = url;
return $http({
method: 'GET',
url: url,
headers: --
}).then(function onSuccess(response) { //<--- `.then` transforms the promise here
Run Code Online (Sandbox Code Playgroud)
//您可以将响应存储在本地存储中或直接发送响应 return response }, function onError(response) { throw customExceptionHadnler.getErrorMsg(response.status, response.data); }); }
urls :您必须准备 url 列表,并在加载第一个 url 后附加要加载的类别[预计这会预先返回您应用程序中需要的所有类别]并传递给 loadUrlsParallel 方法。
您可以根据自己的方便编写 loadUrl 方法,这里给出的任何内容都是示例目的,因此可能不会按原样运行。
您可以从 API 调用后存储的本地存储中的任何地方加载 API 响应,因此这不会要求您在每次加载页面时执行 API 调用[屏幕]
希望这对您有帮助并解决您的问题。
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |