ソースを参照

chore: improve perfermance

Yeuoly 11 ヶ月 前
コミット
87b9c43ed5
共有1 個のファイルを変更した24 個の追加7 個の削除を含む
  1. 24 7
      internal/core/plugin_packager/checksum/checksum.go

+ 24 - 7
internal/core/plugin_packager/checksum/checksum.go

@@ -4,27 +4,44 @@ import (
 	"crypto/sha256"
 	"encoding/hex"
 	"path"
+	"slices"
 
 	"github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/decoder"
-	"github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
 )
 
 func CalculateChecksum(plugin decoder.PluginDecoder) (string, error) {
-	m := map[string]any{}
+	m := map[string][]byte{}
+
+	sha256 := func(data []byte) []byte {
+		sha := sha256.New()
+		sha.Write(data)
+		return sha.Sum(nil)
+	}
 
 	if err := plugin.Walk(func(filename string, dir string) error {
 		var err error
-		m[path.Join(dir, filename)], err = plugin.ReadFile(path.Join(dir, filename))
+		content, err := plugin.ReadFile(path.Join(dir, filename))
 		if err != nil {
 			return err
 		}
+		m[path.Join(dir, filename)] = sha256(content)
 		return nil
 	}); err != nil {
 		return "", err
 	}
 
-	str := parser.MarshalJsonBytes(m)
-	sha := sha256.New()
-	sha.Write(str)
-	return hex.EncodeToString(sha.Sum(nil)), nil
+	// sort the keys, ensure the order is consistent
+	keys := make([]string, 0, len(m))
+	for k := range m {
+		keys = append(keys, k)
+	}
+	slices.Sort(keys)
+
+	data := make([]byte, 0, len(m)*(32+32))
+	for _, k := range keys {
+		data = append(data, sha256([]byte(k))...)
+		data = append(data, m[k]...)
+	}
+
+	return hex.EncodeToString(sha256(data)), nil
 }