Skip to content

Instantly share code, notes, and snippets.

@wilr
Last active August 29, 2015 14:17
Show Gist options
  • Save wilr/bf89d8643bea0ca7b01f to your computer and use it in GitHub Desktop.
Save wilr/bf89d8643bea0ca7b01f to your computer and use it in GitHub Desktop.
Member optimisation.
diff --git a/security/Member.php b/security/Member.php
index 6fe8278..05f5d14 100644
--- a/security/Member.php
+++ b/security/Member.php
@@ -163,6 +163,9 @@ class Member extends DataObject implements TemplateGlobalProvider {
*/
private static $session_regenerate_id = true;
+ private static $_cached_current_member_id;
+ private static $_cached_current_member;
+
/**
* @deprecated 3.2 Use the "Member.session_regenerate_id" config setting instead
*/
@@ -659,9 +662,26 @@ class Member extends DataObject implements TemplateGlobalProvider {
public static function currentUser() {
$id = Member::currentUserID();
- if($id) {
- return Member::get()->byId($id);
+ if(!$id) {
+ return null;
+ }
+
+ if($id !== self::$_cached_current_member_id) {
+ self::$_cached_current_member = null;
+ self::$_cached_current_member_id = $id;
}
+
+ if(is_null(self::$_cached_current_member)) {
+ $member = Member::get()->byId($id);
+
+ if($member) {
+ self::$_cached_current_member = $member;
+ } else {
+ self::$_cached_current_member = false;
+ }
+ }
+
+ return (self::$_cached_current_member) ? self::$_cached_current_member : null;
}
/**
@@ -717,6 +737,9 @@ class Member extends DataObject implements TemplateGlobalProvider {
* Event handler called before writing to the database.
*/
public function onBeforeWrite() {
+ self::$_cached_current_member_id = null;
+ self::$_cached_current_member = null;
+
if($this->SetPassword) $this->Password = $this->SetPassword;
// If a member with the same "unique identifier" already exists with a different ID, don't allow merging.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment