Comments (5)
It looks like this loops back into #190 but I haven't found how this combines with Flipper.enabled?
and actors 🤔
from flipper.
@julik by default, Flipper will preload and memoize all gate data for the duration of each web request. So there should be only one network call to load flipper data, regardless of actor or number of times features are checked. You can read more about those optimizations here: https://www.flippercloud.io/docs/optimization
You can set Flipper.memoize = true
in console to see it working. In the screenshot below, notice:
- Repeated calls to
enabled?
are trigging ActiveRecord queries - Turned on memoization with
Flipper.memoize = true
- After the next
enabled?
call there are no more queries. This would be true even for different actors.
So you shouldn't need any custom code to memoize. Let me know if I'm not understanding or you still have a question that I'm not answering.
from flipper.
Oh my @bkeepers thank you. I forgot to do one crucial thing - update the gems before asking. This makes so much sense. So do I understand correctly that:
- Features can be memoized, and their feature gates and "actor" definitions too? Just the definitions are runnable code. But there is no memoization for the feature flag values for a particular actor.
- When memoized, there won't be requests to the feature store, but the feature gates will still be applied at runtime? So when I call
enabled?
and, say, a "admin group membership" check that we have queries the DB, I will still end up with N+1 queries?
from flipper.
When memoized, there won't be requests to the feature store, but the feature gates will still be applied at runtime? So when I call enabled? and, say, a "admin group membership" check that we have queries the DB, I will still end up with N+1 queries?
Correct, any queries you have in groups will be invoked at runtime. Everything else will be preloaded.
This is why we're hardening expressions so that groups can someday no longer be needed. With expressions you can provide properties up front however you want and then know that flag evaluation will never invoke network calls.
from flipper.
Thank you gentlemen!
from flipper.
Related Issues (20)
- Flipper causing measurable slowdowns HOT 12
- B
- cannot load such file -- flipper/model/active_record (LoadError) HOT 13
- mysql - BLOB/TEXT column 'value' used in key specification without a key length HOT 6
- KeyError: key not found: true in strict mode HOT 2
- Sync error with flipper cloud HOT 9
- Error when running migrations with Flipper and Strong Migrations HOT 1
- Inconsistency - custom description, banner_text uses `Sanitize` but actor names is fully escaped HOT 2
- How to handle strict adapter with test? HOT 1
- (1.2) uninitialized constant Flipper::CLI::IRB (NameError) HOT 5
- (1.2) `Flipper::TestHelp` initializer raises an error if enabled HOT 3
- RSpec/Rails Issues with 1.2.1 HOT 1
- Feature flag not being enabled in RSpec specs on 1.2.1 HOT 7
- Flipper 1.2.2 breaks my CI HOT 7
- Loading all actor identifiers into memory isn't scalable HOT 8
- Flipper::Adapters::Strict::NotFound raised when checking non-existant feature flag during rspec test HOT 9
- Flipper Redis Adapter ignoring configuration block sometimes HOT 5
- Rails credentials read prevents Flipper from working on Rails < 5.2 HOT 2
- Flipper-active_record breaks in 0.26.2+ with Rails 4.2 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flipper.