Hi Jakub You might already know this, but rather than creating the subscriptions manually, you can also use syntactic sugar to specify them as a dependency. For example:
https://github.com/Day8/re-frame/blob/8555c7c5a67e94e22c968eee545b6ff2f8db63dd/examples/todomvc/src/todomvc/subs.cljs#L135-L144 (reg-sub :visible-todos :<- [:todos] :<- [:showing] (fn [[todos showing] _] (let [filter-fn (case showing :active (complement :done) :done :done :all identity)] (filter filter-fn todos)))) I'm not sure if I totally understood your question, and answered something you weren't asking? Also, if you need to get into the nitty gritty of subscriptions firing and seeing how long they take to run, you can look at https://github.com/Day8/re-frame-trace. We're still working on improving the developer experience for general re-frame debugging/usage, but it's perfect for your use case of trying to see exactly which subscriptions are running, being created, and being destroyed. Hope that helps! Daniel. On Fri, Sep 8, 2017 at 6:53 AM Jakub Ner <[email protected]> wrote: > I ended up just putting an empty... > > (fn [_ _] > []) > > ... to force the code into "layer 3"/"materialized view" and that seems > to work well: successfully decoupled recalculation of this function from > every single unrelated *app-db* update and the nested *reactions*/ > *subscriptions* seems to remain reactive. > > My new code with change in *green*: > > (rf/reg-sub > :foo > * (fn [_ _]* > * [])* > > (fn [_ [_ x y z] _] > (let [A @(subs/subscribe [:l x y]) > B @(subs/subscribe [:m y z]) > C @(subs/subscribe [:n x y z]) > D @(subs/subscribe [:o])] > (into #{} > (apply concat > (for [a A > b B > :let [u (first C)] > :when @(subs/subscribe [:p a u)] > (for [c C > :when (< 0 @(subs/subscribe [:q a u c]))] > (list a u c)))))))) > > > > On Thursday, September 7, 2017 at 4:47:41 AM UTC-4, Jakub Ner wrote: >> >> Hello, >> >> I'm not sure how to even search for the question I'm about to ask... I'm >> fairly new to this and I hope I'm using the right terminology. >> >> I'm going through some reframe subscriptions and trying to refactor them >> for performance. My problem is that I have "layer 2"/"extraction" >> subscriptions that loop through other subscriptions and do crazy things: >> slow? >> >> I'm not exactly sure what to do with these. I thought I should make >> "layer 3"/"materialized view" subscriptions out of them and have the crazy >> loops "subscribe" in the first function (the one subscribing to other >> reactions). But maybe I'm out to lunch. >> >> Here is an example of the "layer 2"/"extraction" subscription I'm dealing >> with: >> >> (rf/reg-sub >> :foo >> (fn [_ [_ x y z] _] >> (let [A @(subs/subscribe [:l x y]) >> B @(subs/subscribe [:m y z]) >> C @(subs/subscribe [:n x y z]) >> D @(subs/subscribe [:o])] >> (into #{} >> (apply concat >> (for [a A >> b B >> :let [u (first C)] >> :when @(subs/subscribe [:p a u)] >> (for [c C >> :when (< 0 @(subs/subscribe [:q a u c]))] >> (list a u c)))))))) >> >> >> Should I just make this a normal function (instead of registering a >> subscription) and coerce it to be a reaction? Would that be more efficient? >> >> > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to the Google Groups > "ClojureScript" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/clojurescript. > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/clojurescript.
