标签: server-side-rendering

React SSR、NextJS 与 Chrome 无头预渲染

对于服务器端渲染,我发现了两种方法:

NextJs 在 GitHub 上有很多明星和一个很棒的社区,但另一种方法(chrome 无头预渲染)似乎更干净,需要几乎零配置才能工作。

有没有人有与他们一起工作的经验?
每种方法的主要优缺点是什么?

javascript reactjs server-side-rendering next.js

8
推荐指数
1
解决办法
1839
查看次数

Nuxt.js 的动态元

任何人都可以帮助解决有关带有动态数据的元信息的情况。

问题

我们正在使用 Nuxt 并使用 npm run generate 生成我们的静态页面,并且已经确定了这种方法的几个问题:

  • open graph和twitter meta标签不能动态更新,因为爬虫不运行JS

  • 构建过程中的详细信息页面仅生成一次,因此在用户使用 URL 参数导航到该页面之前没有任何相关数据(例如
    example.com/cars/details?make=Audi&model=A6&carID=133852),然后提供 AJAX GET 数据请求

期望的结果

每个汽车详细信息页面都独一无二的打开图表、推特和其他元标签。

是否可以仅通过生成的静态实现预期的结果?如果不是,SSR 或服务器端生成的元内容的过程会是什么样子?

我们的 dist 文件夹结构目前是:

dist/
  ? index.html
  ? cars/
    ? index.html
    ? details/
      ? index.html
      ? payment/
        ? index.html
Run Code Online (Sandbox Code Playgroud)

汽车与汽车列表页

细节点击一个汽车导航到所选汽车的详细信息页面

支付购车页面

meta-tags vue.js server-side-rendering nuxt.js

8
推荐指数
1
解决办法
1万
查看次数

Next.js - 客户端导航与 html 中的更改

我目前正在学习next.js 教程,但我很难理解以下内容:

教程在这里告诉我,点击某个<Link>元素不会触发服务器请求,而是进行“客户端导航”,即用js调整页面内容:

Link 组件支持在同一 Next.js 应用程序中的两个页面之间进行客户端导航。客户端导航意味着页面转换使用 JavaScript 进行

马上问三个问题:

  • 对我来说,这听起来像是没有 next.js 等的常规 SPA React 路由。但事实并非如此,对吧?
  • <Link>如果我在 Chrome 开发工具中禁用 javascript,它仍然有效。这说明js实际上并没有发生转换。这与他们的说法是否矛盾?
  • 当我右键单击该页面并单击“查看源代码”(在 Chrome 中)时,我在单击<Link>. (与“常规”反应行为相反)。这怎么能被认为是“客户端导航”呢?

在本教程中,他们进一步告诉我:

默认情况下,Next.js 预渲染每个页面。这意味着 Next.js 提前为每个页面生成 HTML,而不是由客户端 JavaScript 完成这一切

这一说法听起来与上面引用的另一说法相矛盾。你能帮我澄清一下吗?当我点击时<Link>到底发生了什么?是否加载了新的 html 文件?如果是这样,这怎么可能发生在“客户端”。谢谢你!

client-side reactjs server-side-rendering next.js

8
推荐指数
1
解决办法
4117
查看次数

如何让 Next.Js 下载我在网站中使用的所有外部资源并在本地提供它们?

我一直在用无头 WordPress 和 NextJs 构建一个作品集。我编写了自己的函数来从 GraphQl 端点获取数据。一切正常。但我有媒体文件(图像、pdf 等)存储在 WordPress CMS 上,并作为指向 next.Js 的链接导入(作为外部图像导入)。例如:

<img src="https://wordpresscms.mywebsite.com/uploads/2020/02/myimage.png" />
Run Code Online (Sandbox Code Playgroud)

但我希望资产托管在 nextJs 网站上,并在每次构建时自动更新。有没有办法在 Next.Js 中自动执行此操作?或者当我将网站部署到生产环境时这已经完成了吗?

我脑海中的情景:

  1. 我将资源上传到 WordPress cms。
  2. NextJs 从 WordPress 获取 JSON 数据,其中包括外部资产的链接(在构建时使用 GraphQL API (getStaticProps))
  3. NextJs 下载资源。
  4. NextJs 将外部 URL 替换为本地 URL(与我的 NextJs 网站托管在同一主机上)。

谢谢。

javascript wordpress server-side-rendering next.js

8
推荐指数
1
解决办法
5431
查看次数

Next.js SSR 与 SSG

我正在开发一个带有许多页面的Next.js 电子商务应用程序,其中一些是所有产品页面、特定产品页面、博客文章页面、个人资料页面、购物车页面等等。这个应用程序需要强大的 SEO,因此我选择了 Next.js,但是,我对其数据获取选项 - SSR 和 SSG没有太多经验。我在 Next.js 中阅读了很多关于 SSR 和 SSG 的文章,但我不确定我是否理解正确。

由于我是新手,因此我选择了getServerSideProps几乎所有需要在渲染之前从 RESTful API 加载内容的页面。然而,我发现一篇文章指出,产品页面的最佳选择是与withgetStaticProps一起使用,并在某个页面尚未预渲染时渲染加载指示器。然而,我的应用程序经常更改数据,数据库包含超过 10k 个产品,这些产品正在定期删除、编辑或添加。我的第一个问题是,在这种情况下,和是否是一个好的选择。产品数据会随着每次页面浏览而更新吗?或者我需要SSR吗?客户始终需要查看产品的最新更新。同样的问题也适用于所有产品页面,因为它应该只显示当前可用的产品,并在缺货时立即隐藏它们。getStaticPathsfallback = truegetStaticPropsgetStaticPaths

我的第二个问题是关于部署的。据我所知,如果应用程序是静态构建和导出的,则可以将其部署到静态/共享托管。但是,如果我在应用程序中使用 SSR,据我所知,我必须使用虚拟服务器来托管应用程序。根据第一个问题,托管此类应用程序有哪些选项?

非常感谢您的所有回答。

e-commerce reactjs server-side-rendering next.js

8
推荐指数
1
解决办法
5536
查看次数

尽管代码在开发模式下工作,但 Vercel 504 错误网关错误页面

因此,我基于这个NextJS 示例构建了一个 Next 应用程序,这意味着我有 GraphQL 路由和一个用于从应用程序中的 API 获取数据的 Apollo 服务器。该示例展示了如何在 getStaticProps() 中获取,这对我来说效果很好,但我需要实现 getServerSideProps(),因为提供的内容取决于 URL 查询和参数,最多有 6000 个不同的 URL,因此我无法使用 getStaticPaths()。该代码在开发模式下工作完全正常...但是,当部署到 Vercel 时,它在开始时工作,有时在稍后工作,但 95% 的时间在页面上显示 504 BAD GATEWAY 错误。

[s]/[v].tsx 的代码:https://pastecord.com/uwojuzudaw.typescript

apollo server-side-rendering next.js vercel getserversideprops

8
推荐指数
0
解决办法
817
查看次数

如何实现redux-toolkit和next,js并且不丢失SSR

我正在尝试在 Next.js 项目中实现 redux-toolkit,同时又不会失去从外部 API 获取数据的 SSR 选项。我遵循了 next.js GitHub 中的示例,但这样做导致在我的 redux 切片中获取数据时没有 SSR。我想知道如何获取数据并将该数据保存在 Redux 状态中。这就是我写的:这是 store.js 文件

export const store = configureStore({
  reducer: {
    users: usersReducer,
  },
});
Run Code Online (Sandbox Code Playgroud)

_app.js 文件

import { Provider } from 'react-redux';
import { store } from '../app/store';

const MyApp = ({ Component, pageProps }) => {
  return (
    <Provider store={store}>
      <Component {...pageProps} />
    </Provider>
  );
};

export default MyApp;
Run Code Online (Sandbox Code Playgroud)

usersSlice.js 文件

import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';

const initialState = {
  items: null, …
Run Code Online (Sandbox Code Playgroud)

reactjs redux server-side-rendering next.js

8
推荐指数
0
解决办法
3360
查看次数

Apollo 客户端 + NextJS 内存泄漏、InMemoryCache

官方 Apollo 和 NextJS 建议在每次执行 GraphQL 请求时创建一个新的 ApolloClient 实例,以防使用 SSR。

这通过内存使用显示了良好的结果,内存增长了一定量,然后使用垃圾收集器重置到初始级别。

问题在于初始内存使用水平不断增长,并且调试器显示泄漏是由附加到 ApolloClient 实例作为缓存存储的“InMemoryCache”对象引起的。

我们尝试对所有新的 Apollo 实例使用相同的“InMemoryCache”实例,并尝试禁用“defaultOptions”中的缓存自定义策略,但泄漏仍然存在。

是否可以完全关闭缓存?比如在 ApolloClient 初始化中为“cache”选项设置“false”值?或者也许这是已知解决方案的已知问题,并且可以通过定制“InMemoryCache”来解决?

我们尝试了很多选项,例如强制缓存垃圾回收、驱逐缓存中的对象等,但没有任何帮助,泄漏仍然存在。

谢谢你!

memory-leaks server-side-rendering next.js apollo-client in-memory-cache

8
推荐指数
0
解决办法
1123
查看次数

通过 next.config.js 与使用 NEXT_PUBLIC 前缀在 nextjs 中公开环境变量有什么区别?

根据nextjs文档,如果我想将环境变量公开给浏览器,我可以NEXT_PUBLIC.env.local文件中添加它们的前缀,如下所示:

NEXT_PUBLIC_VAR=7
Run Code Online (Sandbox Code Playgroud)

但是,看起来我可以使用 向浏览器公开我的环境变量next.config.js,如下所示:

NEXT_PUBLIC_VAR=7
Run Code Online (Sandbox Code Playgroud)

这将添加到 javascript 包中

这两种策略有什么区别?

javascript environment-variables server-side-rendering next.js

8
推荐指数
1
解决办法
1万
查看次数

React-pdf 无法在模块外部使用 import 语句

我用来react-pdf通过 CRA 在 React 中渲染 PDF,然后像这样导入它:

import { Document, Page } from "react-pdf/dist/esm/entry.webpack";
Run Code Online (Sandbox Code Playgroud)

现在,我尝试使用以下 webpack 配置来实现 SSR:

// webpack.server.conf

const path = require("path");
const webpackNodeExternals = require("webpack-node-externals");

module.exports = {
  target: "node",
  entry: "./server/index.tsx",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "build-server"),
  },
  resolve: {
    extensions: [".ts", ".tsx", ".js"],
    modules: [path.resolve(__dirname, "src"), "node_modules"],
  },
  externals: [webpackNodeExternals()], // excludes node modules in Webpack
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        loader: "ts-loader",
        options: {
          configFile: "tsconfig.server.json",
        },
      },
      // we …
Run Code Online (Sandbox Code Playgroud)

reactjs webpack server-side-rendering webpack-4 react-pdf

8
推荐指数
0
解决办法
1632
查看次数