I Was Surprised How Next.js Cached My Server Components

James Q Quick
2 Jul 202415:03

Summary

TLDRIn this video, the creator delves into Next.js 14's caching mechanisms, highlighting challenges faced while updating a Zeta database-driven deals page. They explore static and dynamic routes, the use of 'revalidate' for cache control, and the impact of server components on caching. The script also uncovers why certain pages aren't statically built, discusses the role of Clerk for authentication, and introduces methods to force cache updates, providing insights into optimizing Next.js applications for performance.

Takeaways

  • πŸ˜• The speaker spent two hours trying to understand caching in Next.js 14 and discovered various caching mechanisms.
  • πŸ” The speaker's investigation into caching was prompted by issues with their 'deals for dev' page not reflecting updates in real-time.
  • πŸ› οΈ They added a 'revalidate' parameter to the homepage to ensure it's only cached for a maximum of 2 minutes, forcing updates to be visible more quickly.
  • πŸ“š The speaker learned about different types of caching Next.js performs, including static route caching and dynamic route considerations.
  • 🚫 Static routes are cached by default in Next.js, whereas dynamic routes are not cached unless specifically configured to be so.
  • πŸ”‘ The use of 'generateStaticParams' can pre-render dynamic routes at build time, allowing them to be cached.
  • πŸ‘€ During the build process, Next.js indicates whether pages are built statically or dynamically, providing insight into caching behavior.
  • πŸš€ The speaker suggests using 'revalidate' as a method to manually trigger updates for cached pages.
  • πŸ’‘ The speaker recommends implementing automatic revalidation for pages that are updated through an admin dashboard to ensure consistency across the site.
  • πŸ›‘ The speaker discovered that certain pages were not being cached due to the use of 'Clerk Provider' for authentication, which references header information.
  • πŸ“ The video also highlights the importance of understanding the documentation for Next.js caching to troubleshoot and optimize caching behavior.

Q & A

  • What issue did the speaker face with Next.js caching?

    -The speaker faced an issue where updates made directly to the database were not reflected on the Next.js page until it was reloaded, which was confusing and indicated a caching problem.

  • What is the purpose of the 'revalidate' function in Next.js?

    -The 'revalidate' function in Next.js is used to specify how long a page should be cached. After the specified time, the page will revalidate and rebuild, ensuring that the user gets the most recent version of the page.

  • What is the difference between static and dynamic routes in Next.js?

    -In Next.js, static routes are regular page routes that do not contain dynamic parameters, while dynamic routes include parameters denoted by brackets, such as a specific ID for a given deal.

  • How can you make a dynamic route in Next.js cacheable?

    -You can make a dynamic route in Next.js cacheable by using 'generateStaticParams' to define all the individual routes for that dynamic route. This allows Next.js to generate these pages at build time and cache them.

  • What does ISR stand for in the context of Next.js?

    -ISR stands for Incremental Static Regeneration in Next.js, which is a feature that allows pages to be generated at runtime and then cached for better performance.

  • How can you check if a page in Next.js is built statically or dynamically?

    -You can check if a page is built statically or dynamically by running a local build of your site. Next.js will indicate for each individual page whether it is static or dynamic.

  • What is the role of 'daily.dev' as mentioned in the script?

    -'daily.dev' is a content aggregation platform that the speaker uses to stay updated with the latest industry content, including articles and podcasts on topics like JavaScript and Next.js.

  • Why were some pages not being cached in the speaker's Next.js application?

    -Some pages were not being cached because they were accessing information in the headers, search parameters, or cookies, which automatically opts out of full route caching in Next.js.

  • What is the significance of using the Clerk provider in the speaker's Next.js application?

    -The Clerk provider is used for authentication in the speaker's Next.js application. It was found that using the Clerk provider can cause certain routes to be considered dynamic due to the provider's internal use of header information.

  • What is the recommended approach to handle caching for admin dashboard updates in Next.js?

    -The recommended approach is to implement a 'revalidate path' feature that can be triggered after updates in the admin dashboard, ensuring that the updated information is reflected on the corresponding pages by invalidating the cache.

  • What tools and services are used in the speaker's Next.js project?

    -The speaker's Next.js project uses Zeta as a database with a UI for direct database manipulation, Prisma for integration with a PostgreSQL database, Sentry for error tracking and alerting, and Clerk for authentication.

Outlines

00:00

πŸ€” Caching Confusion in Next.js 14

The speaker delves into an exploration of caching mechanisms in Next.js version 14, prompted by issues with their deals for dev's page, which failed to reflect real-time updates from the Zeta database. They discuss the discovery of static and dynamic routes, the default caching behavior of static routes, and the implementation of the 'revalidate' function to address the issue. The speaker also hints at a more efficient caching strategy to be introduced later in the video.

05:01

πŸ” Understanding Static and Dynamic Pages in Next.js

This paragraph discusses the distinction between static and dynamic pages in Next.js, highlighting how static pages are cached by default and dynamic pages are not. The speaker shares insights on identifying statically built pages during the build process and mentions a sponsor, daily.dev, as a valuable resource for staying updated with industry content. They also touch upon the use of 'generateStaticParams' to cache dynamic routes and speculate on ISR (Incremental Static Regeneration) functionality.

10:02

πŸ› οΈ Advanced Caching Strategies and Debugging Tips

The speaker provides a deeper dive into caching, explaining the difference between router cache and full route cache, and how certain actions like accessing headers or search parameters can opt pages out of full route cache. They also share a debugging experience related to specific pages not being statically built or cached, attributing the issue to the use of the Clerk provider which references header information. The paragraph concludes with a preview of advanced caching strategies, including the use of an API endpoint for manual revalidation and the implementation of revalidate paths for auto-updating content.

Mindmap

Keywords

πŸ’‘Caching

Caching is a technique used in computing to improve performance by storing copies of data, such as web pages, in a cache so that future requests for that data can be served faster. In the video, caching is central to the discussion as the speaker explores how Next.js handles caching for different types of pages. The script mentions 'revalidate' as a parameter to control caching duration, illustrating the importance of caching in web development for optimizing user experience.

πŸ’‘Next.js

Next.js is a popular React framework for building user interfaces and web applications. It is mentioned throughout the script as the platform the speaker is working with to understand and implement caching strategies. The video discusses Next.js version 14, indicating the relevance of the framework's updates to the caching process.

πŸ’‘Revalidate

In the context of the video, 'revalidate' refers to a function or parameter used in Next.js to control the cache invalidation time for pages. The speaker adds the 'revalidate' parameter to the homepage to ensure that it is only cached for a maximum of 2 minutes, demonstrating how developers can use this feature to manage cache lifetimes effectively.

πŸ’‘Zeta Database

The Zeta Database is a tool used for storing data, which the speaker uses in the script for their 'deals for devs' page. It plays a role in the caching issue the speaker encounters, as updates made directly to the database are not immediately reflected on the cached page, leading to confusion and the need for a deeper understanding of caching mechanisms.

πŸ’‘Static Route

A static route in Next.js is a page route that does not contain dynamic parameters. The script explains that static routes are cached by default, which is why the homepage, being a static route, is cached until the revalidate parameter is used to change this behavior.

πŸ’‘Dynamic Route

Dynamic routes in Next.js are routes that contain parameters, such as a specific ID for a deal. The script mentions that dynamic routes, unlike static routes, are not cached by default and are loaded on the server every time they are requested.

πŸ’‘Generate Static Params

Generate Static Params is a feature in Next.js that allows for the static generation of pages for dynamic routes. The speaker discusses this feature as a way to improve caching for dynamic routes by pre-rendering all possible routes at build time, which is a strategy to enhance performance.

πŸ’‘Incremental Static Regeneration (ISR)

Incremental Static Regeneration is a feature in Next.js that allows for the regeneration of static pages as needed. The speaker assumes that ISR will work with the dynamic routes to automatically build and cache new pages as they are navigated to, reflecting updates without a full rebuild.

πŸ’‘Server Components

Server Components in Next.js are a way to render components on the server, which can impact caching behavior. The script mentions that even with server components, pages can be cached indefinitely by default, highlighting the framework's flexibility in handling server-side rendering and caching.

πŸ’‘Full Route Cache

Full Route Cache is a caching strategy discussed in the video where individual pages or routes are cached. The speaker explores how Next.js implements full route cache and the conditions under which pages are opted out of this cache, such as when accessing headers, search parameters, or cookies.

πŸ’‘Daily.dev

Daily.dev is a content aggregator mentioned in the script as a sponsor of the video. It is used by the speaker to stay updated with the latest industry content, including information on Next.js caching, which is relevant to the video's theme of caching strategies in web development.

Highlights

Investigation into caching in Next.js version 14 after experiencing issues with a live stream.

DealsForDev.com utilizes Zeta database for data storage across various applications.

Issues with not seeing updated content on the homepage despite database changes, leading to confusion.

Introduction of 'revalidate' function to limit page cache duration to 2 minutes.

Explanation of Next.js caching behavior for different page types, including static and dynamic routes.

Static routes in Next.js are cached by default, unlike dynamic routes which are not cached at all.

Use of 'generateStaticParams' to statically cache dynamic routes at build time in Next.js.

Incremental Static Regeneration (ISR) may work to update and cache new pages as they are navigated to.

Local build of a Next.js site reveals whether pages are built statically or dynamically.

Daily.dev as a sponsor, a platform for staying updated with the latest industry content.

Discovery of pages not being statically built due to referencing headers, search params, or cookies.

Clerk provider's use of header information causing admin routes to be considered dynamic.

Introduction of an API endpoint 'revalidate' to manually trigger page revalidation.

Implementation of revalidate path in admin dashboard for automatic page updates upon content changes.

Overview of Next.js caching, including full route caching and client-side routing caching.

Integration of technologies like Clerk for authentication, Zeta database, Prisma, and Sentry in the DealsForDev project.

Invitation for feedback and suggestions on caching strategies in the comments section.

Transcripts

play00:00

well I just spent about two hours on a

play00:02

live stream trying to figure out caching

play00:04

in nextjs specifically 14 and I found

play00:06

out a bunch of different things that I

play00:07

had no idea what was going on so I'm

play00:09

curious as you go through these videos

play00:11

let me know what of these different

play00:12

specific ways that nextjs cashes or

play00:15

doesn't did you already know or did you

play00:17

find out as well let me know in the

play00:18

comments so the reason I started digging

play00:20

into this was because of my deals for

play00:22

dev's page this is deals Ford dev.com

play00:24

the hottest deals for developers that

play00:26

you should go check out at deal ford.com

play00:28

but what would happen is I would go into

play00:32

my Zeta database so I use Zeta for

play00:34

storing all of our data I use this in a

play00:36

bunch of different applications uh so I

play00:38

have my deals for dev's database I have

play00:40

all this information here and what

play00:42

happened is we don't have a full admin

play00:45

dashboard yet so we have admin dashboard

play00:48

and then deals I don't have full like uh

play00:52

crud operations for uh the deals that

play00:54

people submit so because of that what

play00:58

would happen is if I needed to make a

play01:00

change to that conference for example I

play01:02

would go into the database I would find

play01:03

that deal and because Zeta has a UI I

play01:06

would manually update that to like

play01:07

updated that conference or whatever that

play01:09

is but then when I would come to this

play01:11

page I wouldn't see if I would refresh

play01:14

and I would refresh I would refresh

play01:15

refresh I wouldn't see that that

play01:17

conference had the updated title which

play01:20

is super confusing but if I then went to

play01:23

the details page for that conference I

play01:25

would see that it was updated here so I

play01:28

was super super confused by this and

play01:30

what I did I didn't fully understand

play01:32

caching at the time so I've gotten a lot

play01:33

better what I did do though is go to the

play01:36

homepage and I added this revalidate

play01:38

function or parameter which basically

play01:41

says that this page should only be

play01:43

cashed for 2 minutes at Max so it'll

play01:46

cash it and then if someone comes within

play01:47

the next two minutes they'll still get a

play01:49

cash version if they come after that two

play01:51

minutes it will revalidate it'll rebuild

play01:53

this page and then cash it for another

play01:54

two minutes and this is because uh Chris

play01:57

Wix who's been working with me kind of

play01:58

mentioned like hey this does cashing

play02:00

that you need to account for now this is

play02:02

not the best way to handle this and I'll

play02:03

show you a much better option later on

play02:05

in the video what I've learned though is

play02:07

how and why and when and where nextjs is

play02:10

doing the caching for the different

play02:12

types of pages that I have here so quick

play02:14

question for you do you know why this

play02:16

individual page for this individual deal

play02:20

does not get cashed versus the homepage

play02:22

does get cashed let me know in the

play02:25

comments and we'll go ahead and uh dive

play02:27

into that right now so what nextjs does

play02:30

is by default any static route does get

play02:35

cashed so as I even though this is all

play02:37

run on the server this is a server

play02:39

component by default and I'm running

play02:40

this on the server and then I pass it

play02:42

down to things down here without this

play02:45

line here this gets cashed

play02:47

forever and they do that based on a

play02:50

static route which I hate this name of

play02:52

static route because we now are mixing

play02:55

this with what static Pages were and any

play02:57

like a static route now interestingly in

play02:59

the nextjs world is defined by just a

play03:03

regular page route so an example of that

play03:06

is at the root of this under the root of

play03:10

the app directory in xjs 14 I have this

play03:14

page component it's not a dynamic route

play03:17

in the sense that it doesn't have if we

play03:19

look inside of deals a dynamic route

play03:22

like this which is referencing the ID of

play03:24

a given deal with me so static page

play03:29

because it doesn't have a dynamic route

play03:31

so the difference between these two

play03:33

pages is this is a static route so it

play03:35

gets cached and it stays cached until

play03:36

you tell it not to be you can do that

play03:39

with the revalidate thing I'm going to

play03:41

fix this and find a better way that I'll

play03:43

show you in a minute in a second I you

play03:44

don't want to do that because this is

play03:46

basically not caching this at all when

play03:48

it could be there's a better way to do

play03:49

this I'll show you that in a second but

play03:52

if I go to the deals page because this

play03:53

is a dynamic route because we have this

play03:56

Dynamic param denoted by the brackets uh

play04:00

category Pages same thing but ID here

play04:03

because of that this is not cached at

play04:06

all and it's going to be loaded on the

play04:07

server every time now interestingly in

play04:10

nextjs you can also fix that to be able

play04:13

to statically cach those pages by

play04:16

referencing uh or using this is

play04:18

something I'll make an update to using

play04:20

generate static perams with that it's

play04:23

similar to how you built static pages

play04:25

with nextjs 12 and before with get

play04:28

static props where you're defin defining

play04:30

all of the routes for that Dynamic route

play04:34

so all the individual routes for that

play04:35

Dynamic route you define those and then

play04:38

based on that it's going to generate

play04:39

those pages at Bill time and cash them

play04:41

and my assumption is I still have to

play04:43

test this so don't don't take my word

play04:44

from it is ISR incremental static

play04:47

regeneration will work so that as I add

play04:49

a new deal it will automatically build

play04:53

that page as the user navigates to it

play04:55

and then we'll cash that after the fact

play04:57

that's my assumption but I do know if

play04:58

you call this at build time it will

play05:01

statically build all those pages under

play05:03

that Dynamic route but now these are

play05:06

static Pages all right still with me so

play05:09

I did have an interesting thing and this

play05:11

is something for you to know if you ever

play05:12

want to know which of your pages is

play05:16

actually built statically or dynamically

play05:18

and there's something interesting that

play05:19

you'll see in here you can run a build

play05:21

of your site locally and it will

play05:23

actually show you for each individual

play05:24

page that it built you'll see static or

play05:28

dynamic so we'll pause and let this

play05:30

finish then I'll show you the results

play05:31

and there is a couple in here that you

play05:33

may not have expected that I didn't

play05:34

expect at all that I have since learned

play05:36

why they are the way they are but we'll

play05:38

get to that in a second now while that's

play05:40

building I want to give a shout out to

play05:41

the sponsor of this video which is daily

play05:43

dodev one of my favorite companies and

play05:45

the world now I consume a ton of content

play05:47

to stay up-to-dated to create the

play05:49

YouTube videos that you see here I watch

play05:51

videos listen to podcast and read a ton

play05:53

of Articles a lot of which I find on

play05:55

daily. deev so this is my homepage on

play05:57

daily. deev where I can see a bunch of

play05:59

different articles

play06:00

on different topics that are interesting

play06:01

to me based on preferences that I have

play06:04

input for myself now you can search and

play06:06

here by things like tags of JavaScript

play06:09

this is something I do very often and

play06:11

had I spent a little bit of time to look

play06:13

up nextjs caching I could have found a

play06:16

few resources in here to solve all the

play06:18

time that I spent trying to figure that

play06:20

out on my own now one last thing I want

play06:22

to show you is the ability to bookmark

play06:24

items so that you can come back and

play06:25

check those out later which is really

play06:27

really nice now the last thing I'll say

play06:29

is is daily. deev is the only website

play06:31

that I allow notifications inside of my

play06:33

browser because I love it that much so

play06:36

if you're looking for an easy way to

play06:37

stay up to date with the latest content

play06:39

in the industry JavaScript nextjs Etc

play06:42

check out daily dodev daily dodev all

play06:46

right cool so that just finished so the

play06:48

key thing is at the bottom of this you

play06:50

have uh an o or a circle and an f o or

play06:53

circle is static it's pre-rendered AES

play06:56

static content uh f is dynamic so if we

play06:58

go back through and kind of talk about

play06:59

what we've been looking at the homepage

play07:02

is

play07:03

static good that's what we expected

play07:05

let's jump down the SL deals page static

play07:08

all right what we expected this Dynamic

play07:11

route for that includes ID is dynamic

play07:14

have I been saying this right so

play07:16

static and CA static and cached then

play07:20

this one is dynamic and not cached so

play07:22

this is always served rendered it's

play07:24

always going to make a request to the

play07:25

server and then we have a bunch of pages

play07:27

that are also static then we have a

play07:30

dynamic route which as you'd expect is

play07:32

dynamic

play07:33

but there are a couple different things

play07:35

that stand out one all API in points are

play07:38

Dynamic that totally makes sense they

play07:40

are not cached and then we have these

play07:41

random routes confirm and

play07:44

preferences that are not Dynamic routes

play07:46

but are somehow not statically built and

play07:50

cach now the reason is and I'll I'll let

play07:52

me actually pull this up let's open the

play07:55

subscriber and the

play07:57

confirm and our initial thought when we

play07:59

were debugging this is because it's

play08:01

under this group layout which group

play08:02

layout shouldn't make any difference but

play08:04

we we just didn't know why these two

play08:06

were having that problem so I'm going to

play08:07

scroll down to a little bit of

play08:09

code and see if you can figure out why

play08:12

this thing is not being cached and is

play08:14

considered a dynamic route of some sort

play08:17

pause go let me know in the comments did

play08:20

you get it all right so if we come back

play08:23

I think I've got a nexts documentation

play08:25

Page open somewhere that I really liked

play08:29

okay I had to dig to find this this is

play08:33

in the api's chart on the documentation

play08:36

for caching and if we scroll down you

play08:38

can see there's a couple options in here

play08:40

that opt out of what is called Full

play08:43

route cache so there's a couple

play08:45

different ways that nextjs is doing

play08:47

caching there is router cache which is

play08:49

on the client so as you go from one page

play08:51

to another and on that first page you

play08:53

query data you go away you come back it

play08:55

doesn't uh it doesn't query that data

play08:57

again it actually takes that data from

play08:58

the cache and then you have full route

play09:00

cache which is what I've been talking

play09:02

about for full individual Pages or

play09:03

routes and if you scroll down if you

play09:06

access anything in the headers or the

play09:07

search prams or cookies you're

play09:10

automatically opted out of caching now

play09:13

this makes total sense when you break it

play09:14

down because if you reference some

play09:16

something in search prams that page is

play09:18

probably going to be based on that that

play09:20

makes total sense

play09:22

but that's so subtle like you have to

play09:24

dig all the way down here to find this

play09:26

out so I had these pages that were

play09:28

rendering

play09:30

as or not being statically built and I

play09:32

was like I don't know why this is

play09:33

happening and had to really dig down and

play09:35

actually kind of experiment to figure

play09:37

out why that was happening and here it

play09:39

is so going through this documentation

play09:41

and going through this chart one that's

play09:44

a lot to to do but maybe it's essential

play09:46

to figure out exactly when and where

play09:47

things are happening now the other thing

play09:49

I wanted to show you is all of the admin

play09:52

routes so under admin under admin all of

play09:56

these were considered uh how do they

play09:58

even phrase this is it Dynamic yeah just

play10:00

Dynamic pages so server rendered on

play10:01

demand now the reason or the interesting

play10:04

thing about this is if we go to the

play10:05

layout for admin we're wrapping all this

play10:08

stuff with the clerk provider and

play10:10

there's two things or one question and

play10:12

then one answer I'll give you one in the

play10:15

documentation for Clerk and using the

play10:17

clerk provider for

play10:19

authentication we don't use use client

play10:22

typically if you're using like a

play10:23

provider in context API you have to have

play10:25

used client this doesn't have it I'm

play10:27

assuming clerk provider actually used

play10:29

used client anyway like beh like behind

play10:32

the scenes it uses it and we don't even

play10:33

know it so we don't have to add it but I

play10:35

feel like that's something that would be

play10:36

worth knowing and then what we found is

play10:39

inside of the clerk provider if you go

play10:41

into the source code they're actually

play10:42

referencing Header information which

play10:44

then makes all of these routes under

play10:48

admin let's see under admin all these

play10:50

routes are Dynamic so there's this

play10:53

incredible mix of uh statically built

play10:56

Pages even though they're using server

play10:58

components those two things combined

play11:01

don't really make sense and I feel like

play11:03

are overlooked so you need to know about

play11:05

that and then you have these kind of

play11:07

other intricate details of why you might

play11:09

have things that are opting out of

play11:10

caching and statically built Pages as

play11:13

well now the one last thing or actually

play11:15

two things I'm going to show you of ways

play11:16

to handle this the last one will be

play11:18

better and more efficient than the first

play11:20

one I'll show you the first one is uh to

play11:22

create an API endpoint called revalidate

play11:25

and inside of here you can call the re

play11:29

validate path with whatever path you

play11:31

send it so in this case I went to like

play11:34

Local Host and then API API revalidate

play11:39

and then pass in a path like slash deals

play11:42

or slash and then also pass in a secret

play11:46

so that other people can't just call

play11:48

this without actually matching up

play11:49

secrets and that you can you can

play11:52

specifically manually say revalidate

play11:54

this page so that is one option I kind

play11:56

of have this now as a fail safe in case

play11:58

I need to manually go and do this I can

play12:01

and then notice up here we're checking

play12:03

this revalidate secret to make sure

play12:05

again that people can't just add this

play12:07

wherever they want so that's

play12:09

good now the uh the other thing and this

play12:12

is much better is what we're going to

play12:15

implement is to be able to call

play12:17

revalidate Path so we just saw that but

play12:20

revalidate path in a different place so

play12:23

revalidate path what we want to do is

play12:26

anytime we're in the admin dashboard so

play12:29

admin SL dasboard SL deals and we see

play12:34

these list of deals anytime I approve

play12:37

one of these I want that to show on the

play12:39

slash deals page so we would do a

play12:41

revalidation on slash deals to then have

play12:45

it pull the latest information after

play12:46

this thing is approved so that's one

play12:48

thing the other thing is inside of this

play12:51

dashboard we're going to build like a

play12:52

full crud dashboard so anytime we make

play12:54

updates to one of these deals whether we

play12:57

make it featured or we change the title

play12:59

or the image anytime we do any of that

play13:01

we also then want to make sure we go and

play13:03

revalidate the path that it might be

play13:05

displayed on so if we then make it

play13:07

featured to where it's going to be

play13:09

featured on this homepage we then need

play13:11

to re revalidate this homepage as well

play13:14

as the deals page so all that stuff has

play13:16

the most recent information so that is

play13:20

like two hours of digging and searching

play13:23

and trying and figuring out into like 10

play13:25

or 15 minutes whatever this recording is

play13:27

of nextjs caching and there's much more

play13:29

to this I only talked about full page or

play13:31

full route caching we didn't really talk

play13:33

about the client side routing uh caching

play13:35

and we didn't talk about data caching if

play13:37

you're using a fetch API because they do

play13:39

some things there so there's a lot more

play13:41

to dig into but I think it was really

play13:43

fun to dig into it and I've had a lot of

play13:45

fun working on uh this deals for dev's

play13:48

project so again this is built with

play13:50

nextjs 14 we'll upgrade to 15 it's built

play13:52

with clerk for authentication we're

play13:54

using Zeta as a database again I think

play13:56

Zeta is super cool it's got a UI built

play13:58

in uh that I can go and do things if I

play14:00

need to also we're using Prisma with it

play14:03

to directly integrate with what is a

play14:05

postgress database which is what Zeta is

play14:08

and then Zeta also has a feature to uh

play14:12

to if I do search in here Zeta also has

play14:15

uh search apis to actually handle search

play14:18

for us behind the scenes to pull up

play14:20

relevance oh this is

play14:22

still is that still wrong I'll have to

play14:25

fix that but anyway all of this search

play14:27

stuff is just powered by Zeta like they

play14:28

just do all that stuff for us and we

play14:30

just call the API so it's super cool as

play14:32

well and then we're using Sentry for aor

play14:34

tracking and alerting to be able to make

play14:36

sure that hopefully you have a good

play14:37

experience so do me a favor let me know

play14:39

what your thoughts are on cashing in the

play14:40

comments below check out deals for devs

play14:43

if you have additional deals that you

play14:45

know of that you've seen somewhere go

play14:46

ahead and submit it if you have

play14:47

something you want to submit for

play14:48

yourself a course or whatever submit it

play14:51

uh give me any feedback if you have any

play14:52

in the comments below as well anyways I

play14:55

hope this helps you on your journey in

play14:56

nextjs and cashing it's a mess there's a

play14:58

lot we'll figure it out together and

play15:00

we'll get there hope you enjoyed the

play15:01

video and I'll catch you next time

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
Next.jsCachingWeb DevLive StreamZeta DBCRUDRevalidateServer SideStatic GenPerformance