Until now, we loaded hundreds of translation messages row by row, and unserializing one by one at bootstrap time. That amounted to a significant percentage of the complete request time. This approach is more than 10x faster.
Benefits for Gallery:
- There are about 3000 is_file() invocations for a photo / album page in a vanilla Gallery installation. These are mostly triggered by Kohana::find_file().
- Enabling internal_cache doesn't help at all (see explanation below). The number of is_file() invocations is about the same with or without this cache.
- With this patch, more than 95% of these invocations are gone. The cache works as intended.
Kohana's internal_cache for find_file wasn't working in Gallery because
the cache would be emptied on each request after reading it from disk and
before most lookups would run.
1. Bootstrap sets initial core.modules (= include path): forge, kohana23_compat, gallery.
2. Kohana::setup() loads find_file cache from disk.
3. Gallery loads list of active modules and themes, and updates the core.modules value (=include path), which forces the internal find_file cache to be empties (which makes sense).
4. Request processing starts, and thus 80+% of all Kohana::find_file() triggered is_file() invocations start off with an empty find_file cache.
The patch doesn't have a significant impact on performance for Kohana applications which don't change their include paths at runtime (after Kohana::setup). And the patch should benefit all Kohana applications which have modules / extensions, i.e. which first need to bootstrap Kohana before they can load a list of all active modules from the database.
Adds a core.internal_cache_read_only config variable to Kohana's internals.
Kohana's internal_cache for find_file wasn't working in Gallery because the cache would be emptied on each request after reading it from disk and before most lookups would run.
1. Bootstrap sets initial core.modules (= include path): forge, kohana23_compat, gallery.
2. Kohana::setup() loads find_file cache from disk.
3. Gallery loads list of active modules and themes, and updates the core.modules value (=include path), which forces the internal find_file cache to be empties (which makes sense).
4. Request processing starts, and thus 80% of all Kohana::find_file() triggered is_file() invocations start off with an empty find_file cache.
In the case of my small Gallery installation, we're talking about 3100 is_file() invocations per request with or without internal_cache enabled. With this fix, this number is down to 800 invocations.
The basic idea is that we treat the cache as read only and don't write any (possibly dirty) values to it in memory until we're sure that the include path won't change later on in the request processing. Once we know the list of active modules and themes, we can update core.modules and finally flip the read-only state of the cache and start writing to it.
"display_all" is too coarse, and we should be letting event handlers
make the appropriate decision on what to display and when. This
duplicates some code, but it's now very clear in the event handlers
what's getting shown.
Throw a 404 if we try to view the user profile for a missing user.
The only feature change in this should be that we now display the
name, full name and website for a user to any other registered user,
which makes sense since these are typically public fields.
Don't show any of the edit buttons unless identity::is_writable()
4091219425 that had this comment in the
change: "Also fixed a UI bug: No longer showing the edit user buttons
to admins in the profile view (to be consistent with the requirements
in the controller)."