fulls1z3 / universal

Seed project for Angular Universal apps featuring Server-Side Rendering (SSR), Webpack, CLI scaffolding, dev/prod modes, AoT compilation, HMR, SCSS compilation, lazy loading, config, cache, i18n, SEO, and TSLint/codelyzer
http://ng-seed.fulls1z3.com
MIT License
703 stars 138 forks source link

introduce CacheService #5

Closed FelipeTaiarol closed 7 years ago

FelipeTaiarol commented 7 years ago

Nice example!

Is there any way to have something similar to this CacheService in Angular 4 ?

https://github.com/angular/universal-starter/blob/master/src/+app/shared/cache.service.ts . https://github.com/angular/universal-starter/blob/master/src/node.module.ts

fulls1z3 commented 7 years ago

According to the universal docs, we need that.

There was an approach in my mind earlier this week, for this cache service. I'll also dig the universal-starter a bit, and I think I'll be able to implement this feature on a separate repository - at the first opportunity.

fulls1z3 commented 7 years ago

The problem on the server-side, there's no interface which we can store the data (ex: localStorage, window, etc.). Furthermore, on each navigation, the DI is lost at the server-side code. For this reason, in-memory cache was not option too.

Well, I think I've managed both the server-side and client-side caching (transferring the cache using nglibs/universal-transfer-state):

I'll commit the changes soon, but I'm afraid it could take a couple of days. Need huge refactoring, code is more complicated than spaghetti - more like wife's Borsch soup :smile:

fulls1z3 commented 7 years ago

Check the implementation: just updated this repo as well as publishing 4 separate packages for cache operations both on server and browser platforms. Everything is handled via the @Cached(...) decorator on the method/loader/etc which you want it cached. Also, there's the possibility to use caching methods (has, get, set) using the caching API.

You might ask why to keep the structure so complex and consume 4 different packages? The answer is, not all the use cases depend on caching on the server platform. Furthermore, this structure allows to integrate any kind of custom caching with the server or browser platform (ex: session, api, etc).

Currently there's no documentation available for these packages, because these days I'm kinda overloaded with many different tasks/projects. I think in a week or two I'll try to provide a good documentation as well as unit tests for these packages.

However, try to have a look on this repo - about the use of CacheService and its instruments. I think it won't be difficult to understand the concepts, as I've kept the code style as DRY as possible.

FelipeTaiarol commented 7 years ago

cool, I'll take a look, thanks!

mohitkadelongraph commented 7 years ago

Is there any documentation available like how we can use caching with this seed? I am kinda confused if caching is actually working or not.

fulls1z3 commented 7 years ago

@mohitkadelongraph you can have a look at https://github.com/ngx-cache/core