Use jsoniteer for faster json encoding/decoding

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby
2018-01-26 16:31:54 -05:00
parent 43a9473a53
commit 4233b87b89
11 changed files with 33 additions and 11 deletions

View File

@@ -2,7 +2,6 @@ package images
import (
"context"
"encoding/json"
"strings"
"time"
@@ -10,6 +9,7 @@ import (
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/log"
"github.com/containerd/containerd/platforms"
jsoniter "github.com/json-iterator/go"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
@@ -123,6 +123,7 @@ func Manifest(ctx context.Context, provider content.Provider, image ocispec.Desc
return ocispec.Manifest{}, err
}
}
json := jsoniter.ConfigCompatibleWithStandardLibrary
if err := Walk(ctx, HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
switch desc.MediaType {
@@ -216,6 +217,7 @@ func Config(ctx context.Context, provider content.Provider, image ocispec.Descri
// Platforms returns one or more platforms supported by the image.
func Platforms(ctx context.Context, provider content.Provider, image ocispec.Descriptor) ([]ocispec.Platform, error) {
var platformSpecs []ocispec.Platform
json := jsoniter.ConfigCompatibleWithStandardLibrary
return platformSpecs, Walk(ctx, Handlers(HandlerFunc(func(ctx context.Context, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
if desc.Platform != nil {
platformSpecs = append(platformSpecs, *desc.Platform)
@@ -286,6 +288,7 @@ func Check(ctx context.Context, provider content.Provider, image ocispec.Descrip
// Children returns the immediate children of content described by the descriptor.
func Children(ctx context.Context, provider content.Provider, desc ocispec.Descriptor, platform string) ([]ocispec.Descriptor, error) {
json := jsoniter.ConfigCompatibleWithStandardLibrary
var descs []ocispec.Descriptor
switch desc.MediaType {
case MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest:
@@ -354,6 +357,7 @@ func RootFS(ctx context.Context, provider content.Provider, configDesc ocispec.D
return nil, err
}
json := jsoniter.ConfigCompatibleWithStandardLibrary
var config ocispec.Image
if err := json.Unmarshal(p, &config); err != nil {
return nil, err

View File

@@ -3,13 +3,13 @@ package oci
import (
"archive/tar"
"context"
"encoding/json"
"io"
"sort"
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/platforms"
jsoniter "github.com/json-iterator/go"
ocispecs "github.com/opencontainers/image-spec/specs-go"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
@@ -116,6 +116,8 @@ func ociLayoutFile(version string) tarRecord {
Version: version,
}
json := jsoniter.ConfigCompatibleWithStandardLibrary
b, err := json.Marshal(layout)
if err != nil {
panic(err)
@@ -144,6 +146,7 @@ func ociIndexRecord(manifests ...ocispec.Descriptor) tarRecord {
Manifests: manifests,
}
json := jsoniter.ConfigCompatibleWithStandardLibrary
b, err := json.Marshal(index)
if err != nil {
panic(err)

View File

@@ -4,7 +4,6 @@ package oci
import (
"archive/tar"
"context"
"encoding/json"
"fmt"
"io"
"io/ioutil"
@@ -14,6 +13,7 @@ import (
"github.com/containerd/containerd/content"
"github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images"
jsoniter "github.com/json-iterator/go"
digest "github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
@@ -83,6 +83,7 @@ func onUntarIndexJSON(r io.Reader, imageName string) ([]images.Image, error) {
if err != nil {
return nil, err
}
json := jsoniter.ConfigCompatibleWithStandardLibrary
var idx ocispec.Index
if err := json.Unmarshal(b, &idx); err != nil {
return nil, err
@@ -131,6 +132,7 @@ func onUntarBlob(ctx context.Context, r io.Reader, store content.Store, name str
// - images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest
// - images.MediaTypeDockerSchema2ManifestList, ocispec.MediaTypeImageIndex
func GetChildrenDescriptors(r io.Reader, desc ocispec.Descriptor) ([]ocispec.Descriptor, error) {
json := jsoniter.ConfigCompatibleWithStandardLibrary
switch desc.MediaType {
case images.MediaTypeDockerSchema2Manifest, ocispec.MediaTypeImageManifest:
var manifest ocispec.Manifest