微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gatsby 图像优化 - 有没有办法减少页面数据文件夹中生成的 GraphQL json 文件的大小?

如何解决Gatsby 图像优化 - 有没有办法减少页面数据文件夹中生成的 GraphQL json 文件的大小?

我在 Gatsby 网站上工作,我想在将其上传到 Netlify 之前对其进行优化。除了 448kb 的 react_devtools_backend.js! (希望我可以通过切换到 Preact 来摆脱...)我在应用程序中使用了多个图像(当前将它们存储在本地,但会考虑使用 Netlify Large Media)而不是创建多个 GraphQL 查询(或多个搜索一个查询)我创建了自己的图像组件,如下所示:

import React from "react";
import { useStaticQuery,graphql } from "gatsby";
import Img from "gatsby-image";

const Image = props => {
  const data = useStaticQuery(graphql`
    {
      allFile(filter: { extension: { eq: "jpg" } }) {
        nodes {
          relativePath
          name
          childImageSharp {
            fluid(maxWidth: 1000,quality: 90,webpQuality: 90) {
              ...GatsbyImageSharpFluid_withWebp_tracedSVG
            }
          }
        }
      }
    }
  `);

  const image = data.allFile.nodes.find(img =>
    img.relativePath.includes(props.filename)
  );

  if (!image) {
    return null;
  }

  const imageFluid = image.childImageSharp.fluid;
  return (
    <Img
      className={props.className}
      alt={props.alt}
      fluid={imageFluid}
      imgStyle={props.style}
    />
  );
};

export default Image;

运行 gatsby build 和 serve 后,我可以看到在 public/page-data/sq/d 文件夹中生成了一些 json 文件名称类似于 63159454.json,看起来它们包含浏览器正在执行的 graphQL 查询。其中一个文件本身就是 43.3kb。有谁知道我是否以次优方式使用 Gatsby,如果是,有没有办法减少这些 json 文件

解决方法

您正在运行一个 GraphQL 查询,该查询为您的构建中的每个图像获取数据。是的,这是非常次优的。您试图避免的路径(您在页面查询中指定所需的图像/图像)是 Gatsby 推荐的解决方案。

另一种选择是使用托管和转换图像的外部服务(例如 CMS、Imgix、Cloudinary 等)。这将让您仅获取构建 srcsrcset 属性所需的信息,这可能会减少数据,并且在任何情况下都是您对每个图像执行的操作 - 而不是在单个病- 构想的组件,可在一个位置为每张图像获取数据。

例如,使用 Sanity,我对页面的 GraphQL 查询如下所示:

{
  sanityPage (slug: { current: { eq: "/home/" } }) {
    title
    heroImage {
      asset {
        _id
      }
    }
  }
}

这提供了我需要以多种尺寸呈现完全响应式图像所需的数据:

import Image from "gatsby-plugin-sanity-image"

export default ({ title,heroImage }) => 
  <div>
    <h1>{title}</h1>
    <Image {...heroImage} width={1440} height={400} alt="" />
  </div>

因为图像是与内容一起定义的,所以无需在 GraphQL 查询中显式创建该关联。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。