diff --git a/models/avatars/avatar.go b/models/avatars/avatar.go
index 7206a8ae90..6107856ade 100644
--- a/models/avatars/avatar.go
+++ b/models/avatars/avatar.go
@@ -10,6 +10,7 @@ import (
 	"path"
 	"strconv"
 	"strings"
+	"sync"
 
 	"code.gitea.io/gitea/models/db"
 	"code.gitea.io/gitea/modules/base"
@@ -31,16 +32,24 @@ func init() {
 	db.RegisterModel(new(EmailHash))
 }
 
+var (
+	defaultAvatarLink string
+	once              sync.Once
+)
+
 // DefaultAvatarLink the default avatar link
 func DefaultAvatarLink() string {
-	u, err := url.Parse(setting.AppSubURL)
-	if err != nil {
-		log.Error("GetUserByEmail: %v", err)
-		return ""
-	}
+	once.Do(func() {
+		u, err := url.Parse(setting.AppSubURL)
+		if err != nil {
+			log.Error("Can not parse AppSubURL: %v", err)
+			return
+		}
 
-	u.Path = path.Join(u.Path, "/assets/img/avatar_default.png")
-	return u.String()
+		u.Path = path.Join(u.Path, "/assets/img/avatar_default.png")
+		defaultAvatarLink = u.String()
+	})
+	return defaultAvatarLink
 }
 
 // HashEmail hashes email address to MD5 string. https://en.gravatar.com/site/implement/hash/