Page MenuHomePhabricator

Provide a cached class map query for making key-based class lookups more efficient
ClosedPublic

Authored by epriestley on Dec 6 2016, 12:13 PM.
Tags
None
Referenced Files
F14341723: D16994.id40897.diff
Wed, Dec 18, 8:08 PM
F14341722: D16994.id40886.diff
Wed, Dec 18, 8:07 PM
F14341712: D16994.id.diff
Wed, Dec 18, 8:07 PM
Unknown Object (File)
Mon, Dec 9, 7:28 AM
Unknown Object (File)
Mon, Dec 9, 7:28 AM
Unknown Object (File)
Mon, Dec 9, 7:26 AM
Unknown Object (File)
Mon, Dec 9, 7:17 AM
Unknown Object (File)
Fri, Dec 6, 5:46 PM
Subscribers
None

Details

Summary

Ref T11954. Depends on D16993. We have a couple of "look up the class for this key" queries which are costly enough to show up on a profile.

These aren't huge wins, but they're pretty easy. We currently do this like this:

$class_map = load_every_subclass();
return idx($class_map, $key);

However, we don't need to load EVERY subclass if we're only looking for, say, the Conduit method subclass which implements user.whoami. This allows us to cache that map and find the right class efficiently.

This cache is self-validating and completely safe even in development.

Test Plan
  • Used curl to make queries to user.whoami, verified that content was identical before and after the change.
  • Used ab -n100 to roughly measure 99th percentile time, which dropped from 74ms to 65ms. This is a small improvement (13% in the best case, here) but it benefits every Conduit method call.

Diff Detail

Repository
rP Phabricator
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

epriestley retitled this revision from to Provide a cached class map query for making key-based class lookups more efficient.
epriestley updated this object.
epriestley edited the test plan for this revision. (Show Details)
epriestley added a reviewer: chad.
chad edited edge metadata.
This revision is now accepted and ready to land.Dec 6 2016, 2:58 PM
This revision was automatically updated to reflect the committed changes.