mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 07:50:54 +00:00
static file module:make cache file size and cache file numbers configurable
This commit is contained in:
parent
50f71a8a21
commit
690e91e1b6
@ -52,6 +52,8 @@ func oldMap() M {
|
|||||||
m["BConfig.WebConfig.DirectoryIndex"] = BConfig.WebConfig.DirectoryIndex
|
m["BConfig.WebConfig.DirectoryIndex"] = BConfig.WebConfig.DirectoryIndex
|
||||||
m["BConfig.WebConfig.StaticDir"] = BConfig.WebConfig.StaticDir
|
m["BConfig.WebConfig.StaticDir"] = BConfig.WebConfig.StaticDir
|
||||||
m["BConfig.WebConfig.StaticExtensionsToGzip"] = BConfig.WebConfig.StaticExtensionsToGzip
|
m["BConfig.WebConfig.StaticExtensionsToGzip"] = BConfig.WebConfig.StaticExtensionsToGzip
|
||||||
|
m["BConfig.WebConfig.StaticCacheFileSize"] = BConfig.WebConfig.StaticCacheFileSize
|
||||||
|
m["BConfig.WebConfig.StaticCacheFileNum"] = BConfig.WebConfig.StaticCacheFileNum
|
||||||
m["BConfig.WebConfig.TemplateLeft"] = BConfig.WebConfig.TemplateLeft
|
m["BConfig.WebConfig.TemplateLeft"] = BConfig.WebConfig.TemplateLeft
|
||||||
m["BConfig.WebConfig.TemplateRight"] = BConfig.WebConfig.TemplateRight
|
m["BConfig.WebConfig.TemplateRight"] = BConfig.WebConfig.TemplateRight
|
||||||
m["BConfig.WebConfig.ViewsPath"] = BConfig.WebConfig.ViewsPath
|
m["BConfig.WebConfig.ViewsPath"] = BConfig.WebConfig.ViewsPath
|
||||||
|
12
config.go
12
config.go
@ -81,6 +81,8 @@ type WebConfig struct {
|
|||||||
DirectoryIndex bool
|
DirectoryIndex bool
|
||||||
StaticDir map[string]string
|
StaticDir map[string]string
|
||||||
StaticExtensionsToGzip []string
|
StaticExtensionsToGzip []string
|
||||||
|
StaticCacheFileSize int
|
||||||
|
StaticCacheFileNum int
|
||||||
TemplateLeft string
|
TemplateLeft string
|
||||||
TemplateRight string
|
TemplateRight string
|
||||||
ViewsPath string
|
ViewsPath string
|
||||||
@ -236,6 +238,8 @@ func newBConfig() *Config {
|
|||||||
DirectoryIndex: false,
|
DirectoryIndex: false,
|
||||||
StaticDir: map[string]string{"/static": "static"},
|
StaticDir: map[string]string{"/static": "static"},
|
||||||
StaticExtensionsToGzip: []string{".css", ".js"},
|
StaticExtensionsToGzip: []string{".css", ".js"},
|
||||||
|
StaticCacheFileSize: 1024 * 100,
|
||||||
|
StaticCacheFileNum: 1000,
|
||||||
TemplateLeft: "{{",
|
TemplateLeft: "{{",
|
||||||
TemplateRight: "}}",
|
TemplateRight: "}}",
|
||||||
ViewsPath: "views",
|
ViewsPath: "views",
|
||||||
@ -317,6 +321,14 @@ func assignConfig(ac config.Configer) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sfs, err := ac.Int("StaticCacheFileSize"); err == nil {
|
||||||
|
BConfig.WebConfig.StaticCacheFileSize = sfs
|
||||||
|
}
|
||||||
|
|
||||||
|
if sfn, err := ac.Int("StaticCacheFileNum"); err == nil {
|
||||||
|
BConfig.WebConfig.StaticCacheFileNum = sfn
|
||||||
|
}
|
||||||
|
|
||||||
if lo := ac.String("LogOutputs"); lo != "" {
|
if lo := ac.String("LogOutputs"); lo != "" {
|
||||||
// if lo is not nil or empty
|
// if lo is not nil or empty
|
||||||
// means user has set his own LogOutputs
|
// means user has set his own LogOutputs
|
||||||
|
@ -115,6 +115,8 @@ func TestAssignConfig_03(t *testing.T) {
|
|||||||
ac.Set("RunMode", "online")
|
ac.Set("RunMode", "online")
|
||||||
ac.Set("StaticDir", "download:down download2:down2")
|
ac.Set("StaticDir", "download:down download2:down2")
|
||||||
ac.Set("StaticExtensionsToGzip", ".css,.js,.html,.jpg,.png")
|
ac.Set("StaticExtensionsToGzip", ".css,.js,.html,.jpg,.png")
|
||||||
|
ac.Set("StaticCacheFileSize", "87456")
|
||||||
|
ac.Set("StaticCacheFileNum", "1254")
|
||||||
assignConfig(ac)
|
assignConfig(ac)
|
||||||
|
|
||||||
t.Logf("%#v", BConfig)
|
t.Logf("%#v", BConfig)
|
||||||
@ -132,6 +134,12 @@ func TestAssignConfig_03(t *testing.T) {
|
|||||||
if BConfig.WebConfig.StaticDir["/download2"] != "down2" {
|
if BConfig.WebConfig.StaticDir["/download2"] != "down2" {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
if BConfig.WebConfig.StaticCacheFileSize != 87456 {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
if BConfig.WebConfig.StaticCacheFileNum != 1254 {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
if len(BConfig.WebConfig.StaticExtensionsToGzip) != 5 {
|
if len(BConfig.WebConfig.StaticExtensionsToGzip) != 5 {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
@ -105,19 +105,19 @@ type serveContentReader struct {
|
|||||||
*bytes.Reader
|
*bytes.Reader
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
|
||||||
//max file size to cache,default: 100k
|
|
||||||
MaxCacheFileSize int = 1024 * 100
|
|
||||||
//max file count to cache,default: 1000
|
|
||||||
MaxCacheFileCount int = 1000
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
staticFileLruCache, _ = lru.New(MaxCacheFileCount)
|
staticFileLruCache *lru.Cache
|
||||||
lruLock sync.RWMutex
|
lruLock sync.RWMutex
|
||||||
)
|
)
|
||||||
|
|
||||||
func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, string, *serveContentHolder, *serveContentReader, error) {
|
func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, string, *serveContentHolder, *serveContentReader, error) {
|
||||||
|
if staticFileLruCache == nil {
|
||||||
|
if BConfig.WebConfig.StaticCacheFileNum >= 1 {
|
||||||
|
staticFileLruCache, _ = lru.New(BConfig.WebConfig.StaticCacheFileNum)
|
||||||
|
} else {
|
||||||
|
staticFileLruCache, _ = lru.New(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
mapKey := acceptEncoding + ":" + filePath
|
mapKey := acceptEncoding + ":" + filePath
|
||||||
lruLock.RLock()
|
lruLock.RLock()
|
||||||
var mapFile *serveContentHolder
|
var mapFile *serveContentHolder
|
||||||
@ -158,7 +158,7 @@ func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, str
|
|||||||
func isOk(s *serveContentHolder, fi os.FileInfo) bool {
|
func isOk(s *serveContentHolder, fi os.FileInfo) bool {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return false
|
return false
|
||||||
} else if s.size > int64(MaxCacheFileSize) {
|
} else if s.size > int64(BConfig.WebConfig.StaticCacheFileSize) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return s.modTime == fi.ModTime() && s.originSize == fi.Size()
|
return s.modTime == fi.ModTime() && s.originSize == fi.Size()
|
||||||
|
Loading…
Reference in New Issue
Block a user