質問するログイン新規登録
Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

349閲覧

ページの読み込みがとても遅くて困っています

romina

総合スコア6

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2023/09/04 19:50

0

1

こんにちは。

フロントはReact(Vite)18.2.0、バックはExpress4.18.2で、
初めてドメインを取得してデプロイしたのですが、
読み込みに30秒くらいかかるページがあり、とても困っています。
フロントはVercel、バックはrenderでデプロイしました。

画像が非常に多いページですが、各画像の解像度はかなり下げてどれも100KB以下なので、画像の問題ではないと思います。
またエラーメッセージはなく、ローカル環境ではすぐに表示されます。

もしかするとコンパイルファイルが原因かもしれないのですが、
このファイルの読み方がわからないし、本当にこのファイルが原因なのかもわかりません。
何を試してもうまくいかないので、思い切って投稿させていただきました。

https://www.impermanencefilms.org/
上記トップページから、
右下にある「TOUS LES FILMS」をクリックして、ページ遷移した先の下記URLです。
https://www.impermanencefilms.org/films

2回目以降は、キャッシュのお陰ですぐに表示されますが、初回は必ず時間がかかります。

どなたか、原因とその解決法がわかる方がいらしたら、
教えていただけないでしょうか?
どうぞよろしくお願いします。

下記が該当ページのコード(FilmPage.jsx)です。

import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import myApi from '../../service/service'; import Spinner from '../../components/Spinner/Spinner'; import './FilmPage.css'; import ScrollToTop from '../../components/ScrollToTop'; const FilmPage = () => { const [films, setFilms] = useState([]); const [loading, setLoading] = useState(true) useEffect(() => { const fetchData = async () => { try { const response = await myApi.get(`/films`); setFilms(response.data); setLoading(false); } catch (error) { console.error(error); } }; fetchData(); }, []); if (loading) { return <Spinner />; } const groupedFilms = {}; films.forEach((film) => { const category = film.category || 'defaultCategory'; if (!groupedFilms[category]) { groupedFilms[category] = []; } groupedFilms[category].push(film); }); const categoryOrder = ['encours', 'production', 'distribution', 'programmation']; for (const category in groupedFilms) { groupedFilms[category].sort((a, b) => { if (a.createdYear !== b.createdYear) { return b.createdYear - a.createdYear; } else { return a.title.localeCompare(b.title); } }); } const displayCategory = (category) => { switch (category) { case 'encours': return 'en cours'; case 'production': return 'production'; case 'distribution': return 'distribution'; case 'programmation': return 'programmation'; default: return ''; } }; const formatDirectorName = (directorName) => { return /^[aeiou\u0153]/i.test(directorName) ? `d'${directorName}` : `de ${directorName}`; }; return ( // <FadeIn> <section className='FilmPage'> <div className='FilmPage-container'> {categoryOrder.map((category) => ( <div key={category} id={category} className='category-section'> <h2 className='category-title'>{displayCategory(category)}</h2> <div className='FilmPage-category'> {groupedFilms[category]?.map((film) => ( <div className='FilmPage-content' key={film._id}> <Link to={`/films/${film._id}`}> <div className='FilmPage-position'> <picture> <img src={film.thumbnailImages[0]} alt={film.title} className='film-image' /></picture> <div className='film-title'> <h4>{film.title.toUpperCase()}</h4> <h6>{formatDirectorName(film.directedBy)}</h6> </div> </div> </Link> </div> ))} </div> </div> ))} </div> <ScrollToTop /> </section> // </FadeIn> ); }; export default FilmPage;

バックエンドは下記コードです。

router.get('/', async (req, res, next) => { try { const films = await FilmFr.find() res.json(films) } catch (error) { next(error) } })

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

romina

2023/09/05 07:46

ご回答いただきありがとうございました。 そういうことでしたか!バックエンドのExpressでこの規模の小さなサイトの場合、おすすめのサーバー(有料でも構いませんが、料金的に安い方がありがたいです)があれば教えていただけないでしょうか?
romina

2023/09/05 13:44

本当はベストアンサーのマークを付けたかったんですけど、このサイトの使い方がよくわからず、なぜか自分自身の回答に付いてました。ごめんなさい。でも本当に助かったので、再度書き込みさせていただきました。ありがとうございました!
guest

回答1

0

自己解決

>無料プランの Web サービスは、非アクティブ状態が 15 分間続くと自動的にスピンダウンします。

仰る通りでした!!Renderをアップグレードしたら読み込みが格段に早くなりました!!こんなことなら早くからそうすればよかったです。本当に助かりました。どうもありがとうございました。

投稿2023/09/05 13:27

romina

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問