Browse Source

Add benchmark for adding images to sheet (#367)

* Add benchmark for adding images to sheet

This should help track performance regressions in future changes.

* Only transform sheet name if necessary
Michael 6 years ago
parent
commit
2874d75555
3 changed files with 36 additions and 11 deletions
  1. 3 0
      .gitignore
  2. 20 0
      picture_test.go
  3. 13 11
      sheet.go

+ 3 - 0
.gitignore

@@ -1,2 +1,5 @@
 ~$*.xlsx
 test/Test*.xlsx
+*.out
+test/image3.png
+*.test

+ 20 - 0
picture_test.go

@@ -0,0 +1,20 @@
+package excelize
+
+import (
+	"fmt"
+	_ "image/png"
+	"io/ioutil"
+	"testing"
+)
+
+func BenchmarkAddPictureFromBytes(b *testing.B) {
+	f := NewFile()
+	imgFile, err := ioutil.ReadFile("logo.png")
+	if err != nil {
+		panic("unable to load image for benchmark")
+	}
+	b.ResetTimer()
+	for i := 1; i <= b.N; i++ {
+		f.AddPictureFromBytes("Sheet1", fmt.Sprint("A", i), "", "logo", ".png", imgFile)
+	}
+}

+ 13 - 11
sheet.go

@@ -778,18 +778,20 @@ func (f *File) UnprotectSheet(sheet string) {
 // trimSheetName provides a function to trim invaild characters by given worksheet
 // name.
 func trimSheetName(name string) string {
-	var r []rune
-	for _, v := range name {
-		switch v {
-		case 58, 92, 47, 63, 42, 91, 93: // replace :\/?*[]
-			continue
-		default:
-			r = append(r, v)
+	if strings.ContainsAny(name, ":\\/?*[]") || utf8.RuneCountInString(name) > 31 {
+		r := make([]rune, 0, 31)
+		for _, v := range name {
+			switch v {
+			case 58, 92, 47, 63, 42, 91, 93: // replace :\/?*[]
+				continue
+			default:
+				r = append(r, v)
+			}
+			if len(r) == 31 {
+				break
+			}
 		}
-	}
-	name = string(r)
-	if utf8.RuneCountInString(name) > 31 {
-		name = string([]rune(name)[0:31])
+		name = string(r)
 	}
 	return name
 }