Исследование рекурсивной быстрой загрузки в AdonisJS: повышение производительности с помощью предварительной загрузки

«Рекурсивная предварительная загрузка adonis» — это фраза, связанная с инфраструктурой AdonisJS, в частности, с концепцией быстрой загрузки или предварительной загрузки данных рекурсивным способом. Нетерпеливая загрузка — это метод, используемый для оптимизации запросов к базе данных путем предварительного получения связанных данных вместо выполнения отдельных запросов для каждого отношения. В контексте AdonisJS эта фраза означает возможность рекурсивно загружать вложенные отношения.

В этой статье блога мы рассмотрим различные методы достижения рекурсивной быстрой загрузки в AdonisJS, а также приведем примеры кода. Давайте погрузимся!

Метод 1: использование метода with

const User = use('App/Models/User')
const users = await User
  .query()
  .with('posts.comments') // Preload posts and comments relationships
  .fetch()
// Access the preloaded data
users.rows.forEach(user => {
  user.posts.forEach(post => {
    post.comments.forEach(comment => {
      // Access comment data
    })
  })
})

Метод 2: использование вложенных связей с точечной записью

const User = use('App/Models/User')
const users = await User
  .query()
  .with('posts', builder => {
    builder.with('comments') // Preload comments relationship
  })
  .fetch()
// Access the preloaded data
users.rows.forEach(user => {
  user.posts.forEach(post => {
    post.comments.forEach(comment => {
      // Access comment data
    })
  })
})

Метод 3: использование метода loadMany

const User = use('App/Models/User')
const users = await User.query().fetch()
await User.query().loadMany(users.rows, 'posts.comments')
// Access the preloaded data
users.rows.forEach(user => {
  user.posts.forEach(post => {
    post.comments.forEach(comment => {
      // Access comment data
    })
  })
})

Метод 4: использование методов withCountи whereHas

const User = use('App/Models/User')
const users = await User
  .query()
  .withCount('posts as comment_count')
  .whereHas('posts.comments')
  .fetch()
// Access the preloaded data
users.rows.forEach(user => {
  console.log(user.comment_count) // Number of comments for each user
})

Это всего лишь несколько методов достижения рекурсивной быстрой загрузки в AdonisJS. В зависимости от вашего конкретного случая использования вы можете выбрать метод, который подходит вам лучше всего.