پرش به محتویات

هزینه‌اش چقدر است

دسترسی در هر درخواست، و اغلب بارها، پرسیده می‌شود. پس هزینه‌اش شمرده می‌شود، و تست‌ها آن را نگه می‌دارند: ردیف بیشتر، مجوز بیشتر، بسته‌ی بیشتر هیچ‌وقت نباید یعنی کوئری بیشتر.

آنچه یک شخص دارد

همان هزینه‌ای که backend خود Django دارد: مجوزهایی که مستقیم و از راه گروه‌ها داده شده، یک بار خوانده و روی شیء کاربر نگه داشته می‌شوند. آنچه کتابخانه اضافه می‌کند - آنچه گرفته شده، بسته‌هایی که یک نقش شروع می‌کند، سقف - شرط‌هایی درون همان کوئری‌هاست، نه کوئری‌هایی جدا.

یک مجوز به کدام ردیف‌ها می‌رسد

مجوزهای یک شخص - هر مجوز با دامنه‌اش - در هر درخواست یک بار و در یک کوئری خوانده می‌شوند، و دامنه‌های قانونی یک مدل در هر درخواست یک بار و در یک کوئری دیگر. بعد از آن، هر فهرست کوئری خودش است و نه بیشتر: دامنه‌ها یک فیلتر روی آن می‌شوند.

صفحه‌ای که نشان می‌دهد هزینه، کنار کوئری‌های خودش
یک فهرست مجوزها، قانون‌ها: دو کوئری، یک بار
پنج فهرست همان دو
فهرستی با هزار ردیف همان دو

یک ردیف

پرسیدن درباره‌ی یک ردیف - آیا می‌تواند این سفارش را ویرایش کند - وقتی دامنه‌ی شخص به همه‌ی ردیف‌ها نمی‌رسد یک exists() است؛ وقتی می‌رسد، یا شخص ابرکاربر است، هیچ.

اسم‌ها

صفحه‌ای که مجوزها، بسته‌ها یا نقش‌های زیادی را نام می‌برد، همه‌ی اسم‌های زبانش را در یک کوئری می‌خواند (labels_in())، هر چند تا که نشان دهد.

آنچه cache نمی‌شود

هیچ چیزی میان درخواست‌ها نگه داشته نمی‌شود. مجوزی که در پنل ادمین تغییر کند از درخواست بعد، همه جا، برقرار است، بدون cacheای که پاک شود. پردازه‌ای که از یک درخواست بیشتر عمر می‌کند شخص را دوباره می‌خواند - workerها و websocketها را ببینید.

نگه‌داشته با تست‌ها

تست‌های خود کتابخانه کوئری‌های هر در را می‌شمرند - فهرست‌های پنل ادمین، API، viewها، صفحه‌های دسترسی - با django_assert_num_queries، و با ردیف‌های بیشتر دوباره می‌پرسند تا مطمئن شوند این عدد بیشتر نمی‌شود.