Как сократить время ожидания TTFB на запрос GET к базе данных? - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблемы с тем, что мои запросы Ax ios GET занимают до 3-7 секунд, чтобы получить данные из моей базы данных Firebase Cloud Firestore. Я пытался найти методы оптимизации страницы, чтобы ускорить загрузку моей страницы, такие как ресурсы кэширования или оптимизация изображений, но ничто не помогает с фактическим временем запроса. Изображение ниже для запроса 1 GET, который извлекает массив объектов из базы данных. Это не так, как если бы это был большой массив, в нем в настоящее время есть только 6 объектов, и его получение все еще занимает очень много времени. Это происходит для всех моих запросов get, и я не уверен, почему.

Это не только при начальной загрузке страницы, это все еще занимает пару секунд (обычно 2-5 при последующих загрузках) для загрузки в даже после обновления страницы или перехода между страницами на моем сайте. Это совсем не согласуется, и мне было интересно, могу ли я что-нибудь сделать, чтобы улучшить скорость запроса.

Image evidence

Действие для "записей" запрос выше. Я использую React Redux для получения json данных из базы данных Firebase и добавляю их в свой магазин:

// get all posts
export const getPosts = () => (dispatch) => {
   dispatch({ type: LOADING_DATA });
   axios
     .get("/posts")
     .then((res) => {
        dispatch({
           type: SET_POSTS,
           payload: res.data,
        });
      })
.catch(() => {
  dispatch({
    type: SET_POSTS,
    payload: [],
  });
});
};

Редуктор:

export default function (state = initialState, action) {
switch (action.type) {
case SET_POSTS:
  return {
    ...state,
    posts: action.payload,
    loading: false,
  };
  default:
     return state;
   }
 }

Firebase Функции:

// fetch all posts
exports.getAllPosts = (req, res) => {
   db.collection("posts")
     .orderBy("createdAt", "desc")
     .get()
     .then(data => {
        let posts = [];
        data.forEach(doc => {
           posts.push({
              postId: doc.id,
              body: doc.data().body,
              userHandle: doc.data().userHandle,
              createdAt: doc.data().createdAt,
              commentCount: doc.data().commentCount,
              likeCount: doc.data().likeCount,
              userImage: doc.data().userImage
           });
         });
         return res.json(posts);
         })
      .catch(err => console.error(err));
     };

Еще один пример моего запроса GET для получения пользовательских данных после входа в систему: enter image description here

...