Svelte 什么会导致Sapper执行缓慢?
出于性能原因,我正在将Next.js站点移植到Sapper,但我的Sapper性能非常差。加载时间长(如果不是从缓存提供,则一个页面的加载时间约为15秒)。我的API速度非常快,所以它不会成为问题。Svelte 什么会导致Sapper执行缓慢?,svelte,sapper,Svelte,Sapper,出于性能原因,我正在将Next.js站点移植到Sapper,但我的Sapper性能非常差。加载时间长(如果不是从缓存提供,则一个页面的加载时间约为15秒)。我的API速度非常快,所以它不会成为问题。 我使用Vercel主机。但无论是在那里还是在我的机器上,渲染时间都大约为15秒。 因为我是Sapper的新手,我怀疑我可能做错了什么。 有一件事我感到不舒服,那就是我在名为“session”的函数中从server.js传递全局站点设置(菜单结构等)。但是,这与包含用户特定数据的会话对象不同。这是我发
我使用Vercel主机。但无论是在那里还是在我的机器上,渲染时间都大约为15秒。
因为我是Sapper的新手,我怀疑我可能做错了什么。 有一件事我感到不舒服,那就是我在名为“session”的函数中从server.js传递全局站点设置(菜单结构等)。但是,这与包含用户特定数据的会话对象不同。这是我发现的在Sapper实现全球存储的唯一方法(可通过_layout.svelte和route页面访问)-如果这是肮脏的,我希望有人能告诉我另一种方法。
我关心的另一件事是,我订阅了许多不同组件中的会话,以便他们能够访问全局存储 下面是我当前的设置,总结 我在server.js中获取站点全局文件,并将它们传递到会话中。这是我能找到的唯一方法,使我能够从_layout.svelte和我的路线([…slug])svelte访问全球商店。我还为Vercel的缓存添加了stale while revalidate标题
const server = polka()
.use(
compression({ threshold: 0 }),
(req, res, next) => {
res.setHeader(
"Cache-Control",
"s-maxage=1, stale-while-revalidate"
);
next();
},
sirv("static", { dev }),
sapper.middleware({
session: async ({ headers }) => {
const request = await fetch(
`https://MY_BACKEND/globals`
);
const { app } = await request.json();
return {
app,
origin: `https://${headers.host}`
};
}
})
);
\u布局。苗条
<script>
import { stores } from "@sapper/app";
const { session } = stores();
let mainMenu = [];
session.subscribe(({app}) => {
mainMenu = app.mainMenu;
});
</script>
<script context="module">
export async function preload({ params },{ app }) {
const page = await this.fetch(`${params.slug.join('/')}.json`).then(r=>r.json());
...some processing which uses the 'app' globals, and the page...
return {...}
}
</script>
从“@sapper/app”导入{stores}”;
const{session}=stores();
让mainMenu=[];
session.subscribe(({app})=>{
mainMenu=app.main菜单;
});
[…鼻涕虫].苗条
<script>
import { stores } from "@sapper/app";
const { session } = stores();
let mainMenu = [];
session.subscribe(({app}) => {
mainMenu = app.mainMenu;
});
</script>
<script context="module">
export async function preload({ params },{ app }) {
const page = await this.fetch(`${params.slug.join('/')}.json`).then(r=>r.json());
...some processing which uses the 'app' globals, and the page...
return {...}
}
</script>
导出异步函数预加载({params},{app}){
const page=wait this.fetch(`${params.slug.join('/')}.json`)。然后(r=>r.json());
…一些使用“应用程序”全局变量和页面的处理。。。
返回{…}
}
需要访问全局存储的内部组件(可能很多)
从“@sapper/app”导入{stores}”;
让某物='';
const{session}=stores();
session.subscribe(({app})=>{
某物
});