Procházet zdrojové kódy

refactor(sanitizer): micro-optimizations of `internal/reader/sanitizer/srcset.go`

- Pre-allocate a slice
- Inline a local variable
- Remove a superfluous call to `strings.TrimSpace`
- Simplify some conditions via a switch-case construct
Julien Voisin před 1 rokem
rodič
revize
92a49d7e69
1 změnil soubory, kde provedl 9 přidání a 13 odebrání
  1. 9 13
      internal/reader/sanitizer/srcset.go

+ 9 - 13
internal/reader/sanitizer/srcset.go

@@ -17,12 +17,12 @@ type ImageCandidate struct {
 type ImageCandidates []*ImageCandidate
 
 func (c ImageCandidates) String() string {
-	var htmlCandidates []string
+	htmlCandidates := make([]string, 0, len(c))
 
 	for _, imageCandidate := range c {
 		var htmlCandidate string
 		if imageCandidate.Descriptor != "" {
-			htmlCandidate = fmt.Sprintf(`%s %s`, imageCandidate.ImageURL, imageCandidate.Descriptor)
+			htmlCandidate = imageCandidate.ImageURL + " " + imageCandidate.Descriptor
 		} else {
 			htmlCandidate = imageCandidate.ImageURL
 		}
@@ -36,9 +36,7 @@ func (c ImageCandidates) String() string {
 // ParseSrcSetAttribute returns the list of image candidates from the set.
 // https://html.spec.whatwg.org/#parse-a-srcset-attribute
 func ParseSrcSetAttribute(attributeValue string) (imageCandidates ImageCandidates) {
-	unparsedCandidates := strings.Split(attributeValue, ", ")
-
-	for _, unparsedCandidate := range unparsedCandidates {
+	for _, unparsedCandidate := range strings.Split(attributeValue, ", ") {
 		if candidate, err := parseImageCandidate(unparsedCandidate); err == nil {
 			imageCandidates = append(imageCandidates, candidate)
 		}
@@ -48,22 +46,20 @@ func ParseSrcSetAttribute(attributeValue string) (imageCandidates ImageCandidate
 }
 
 func parseImageCandidate(input string) (*ImageCandidate, error) {
-	input = strings.TrimSpace(input)
 	parts := strings.Split(strings.TrimSpace(input), " ")
 	nbParts := len(parts)
 
-	if nbParts > 2 || nbParts == 0 {
-		return nil, fmt.Errorf(`srcset: invalid number of descriptors`)
-	}
-
-	if nbParts == 2 {
+	switch {
+	case nbParts == 1:
+		return &ImageCandidate{ImageURL: parts[0]}, nil
+	case nbParts == 2:
 		if !isValidWidthOrDensityDescriptor(parts[1]) {
 			return nil, fmt.Errorf(`srcset: invalid descriptor`)
 		}
 		return &ImageCandidate{ImageURL: parts[0], Descriptor: parts[1]}, nil
+	default:
+		return nil, fmt.Errorf(`srcset: invalid number of descriptors`)
 	}
-
-	return &ImageCandidate{ImageURL: parts[0]}, nil
 }
 
 func isValidWidthOrDensityDescriptor(value string) bool {