javascript-在Angular服务中为UI缓存计算的数据?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在Angular服务中为UI缓存计算的数据?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2161字,纯文字阅读大概需要4分钟。
内容图文
在我的应用程序中,我有这些称为Schedule的TypeScript类,在UI中,我希望能够将这些对象表示为自然语言描述,例如“每月的每个第二个星期一的6:00 AM”.
为了计算这些“时间表说明”,我有一个Angular服务ScheduleDescriptionService,我将其称为getScheduleDescription(),并将其传递给Schedule,然后它将说明作为字符串返回.
不幸的是,我了解到此getScheduleDescription()函数非常昂贵,并且在应用程序的某些部分中被调用很多.我想做的是通过在生成描述后缓存描述来解决性能问题,这样就不必在每次UI要显示它们时都生成它们.
我将此函数放入Angular服务的原因是,我需要生成这些描述的函数才能访问国际化服务,并且据我所知,我无法将Angular服务注入如Schedule的普通TypeScript类中,否则我可能已经将getScheduleDescription()放入Schedule类中,这样我就可以处理每个Schedule缓存自己的描述的情况.
我不能使用Angular管道,因为我需要能够在我的代码后面获取描述,所以我需要以某种方式管理大量计划描述的缓存,而我不能只处理任何一个Angular组件中的缓存因为我将需要在应用程序的各处显示这些描述.因此,我相信我必须将这些描述缓存在ScheduleDescriptionService Angular服务中.
这是正确的方法吗?如果是这样,在这种情况下如何缓存?如果该服务在我的应用程序的生命周期内持续存在,并且我的用户查看了很多说明,该怎么办?如果他们停止查看包含时间表说明的页面,是否应该清除缓存?如何管理变更检测?
提前致谢.
解决方法:
这取决于数据应该可用多长时间.
页面刷新/多个选项卡上可用的数据
如果您需要数据数据来保持页面刷新的持久性,或者当用户打开多个选项卡时才可用,那么我想只使用localStorage,which can store a few MBs.如果您只是将日程表ID存储为键,将说明存储为值,您应该有成千上万的描述.
您可以管理列表并在列表达到一定大小或localStorage中没有更多空间时删除最旧的条目.我认为您不必为检索时间担心太多,除非您在页面上数以千计的时间将该对象称为垃圾回收对象
注意:如果您打算使用angular Universal,则localStorage将在服务器端不可用.
会话期间可用的数据
您可以将值存储在JS对象或Map对象中.
使用地图
class ScheduleDescriptionService
{
private map : Map<number, string> = new Map<number,string>();
getScheduleDescription(schedule: Schedule)
{
let desc = this.map.get(schedule.id);
if(!desc)
{
desc = this.internationalizationService.getDescription(schedule);
this.map.set(schedule.id, desc);
}
return desc;
}
}
边注
如果尚未执行此操作,则也可以使用OnPush detection change strategy尝试减少描述服务的调用次数
内容总结
以上是互联网集市为您收集整理的javascript-在Angular服务中为UI缓存计算的数据?全部内容,希望文章能够帮你解决javascript-在Angular服务中为UI缓存计算的数据?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。