Przeglądaj źródła

use a proper cache

e.g. lru, written by google/go people and it's hopefully going to
protect us from consuming too much memory.
Lucas Stadler 11 lat temu
rodzic
commit
2fbb095193
1 zmienionych plików z 9 dodań i 7 usunięć
  1. 9 7
      go/favicon.go

+ 9 - 7
go/favicon.go

@ -1,17 +1,19 @@
1 1
package main
2 2
3 3
import (
4
	"code.google.com/p/cascadia"
5
	"code.google.com/p/go.net/html"
6 4
	"errors"
7 5
	"fmt"
8 6
	"net/http"
9 7
	"net/url"
10 8
	"os"
11 9
	"sync"
10
11
	"code.google.com/p/cascadia"
12
	"code.google.com/p/go.net/html"
13
	"github.com/golang/groupcache/lru"
12 14
)
13 15
14
var faviconCache = make(map[string]string)
16
var faviconCache = lru.New(10000)
15 17
var lock sync.RWMutex
16 18
17 19
func main() {
@ -50,20 +52,20 @@ func GetFaviconCached(u string) (string, error) {
50 52
		host = parsed.Host
51 53
	}
52 54
	lock.RLock()
53
	faviconUrl, cached := faviconCache[host]
55
	fu, cached := faviconCache.Get(host)
54 56
	lock.RUnlock()
55 57
56 58
	if cached {
57
		return faviconUrl, nil
59
		return fu.(string), nil
58 60
	}
59 61
60
	faviconUrl, err = GetFavicon(u)
62
	faviconUrl, err := GetFavicon(u)
61 63
	if err != nil {
62 64
		return faviconUrl, err
63 65
	}
64 66
65 67
	lock.Lock()
66
	faviconCache[host] = faviconUrl
68
	faviconCache.Add(host, faviconUrl)
67 69
	lock.Unlock()
68 70
	return faviconUrl, nil
69 71
}