چرا بیشتر فایل پیکربندی ما توضیح است
در این مقاله
فایل .htaccess روی این سرور 478 خط دارد. 98 خط آن قاعده است و 309 خط آن توضیح.
برای هر خطی که کاری انجام میدهد، سه خط توضیح وجود دارد. این نسبت از پیش برنامهریزی نشده بود؛ وقتی شرط نوشتن هر قاعده این باشد که دلیلش باید کنارش بیاید، چنین نتیجهای به دست میآید.
چرا یک قاعده بازنویسی به یک بند توضیح نیاز دارد
خواندن دوباره یک قاعده در پیکربندی سرور بهطور غیرمعمولی دشوار است. از قصد فشرده است، نام ندارد، نمیتوان آن را گامبهگام اجرا کرد و اثرش دیده نمیشود مگر اینکه دقیقاً نشانی مناسب درخواست شود. شش ماه بعد، تنها پاسخ صادقانه به «چرا این اینجاست» معمولاً حدس است.
بدتر اینکه حدس اشتباه زدن آسان است و امن به نظر میرسد. قاعدهای که هیچکس نمیفهمد، سرانجام هنگام مرتبسازی به دست کسی حذف میشود و چیزی که جلو آن را میگرفت برمیگردد.
بنابراین هر قاعده در اینجا هدف خود و محل بررسی آن را همراه دارد. یازده خط توضیح تاریخ دارند و دوازده خط عدد اندازهگیریشده. همین دو چیز به خواننده آینده امکان میدهند تصمیم بگیرد آیا دلیل هنوز معتبر است یا نه.
سه موردی که بدون توضیحشان دوام نمیآوردند
کد زبانی که شبیه پسوند اسکریپت بود. قاعدهای که فایلهای منبع باقیمانده را مسدود میکرد، بر اساس پسوند تطبیق میداد و یکی از پسوندها .pl بود — مربوط به Perl. پیشنمایش طرحها چنین نامی دارند: 2900.pl.svg؛ در این نام، pl به معنای لهستانی است. تمام پیشنمایشهای لهستانی پاسخ 403 میدادند، در حالی که بقیه زبانها مشکلی نداشتند. اکنون توضیح میگوید که pl عمداً در فهرست نیست، چرا چنین است و در چه روزی چه چیزی اندازهگیری شده است. بدون آن، نفر بعدی که فهرست را مرتب کند دوباره آن را برمیگرداند.
دو کلید تنظیم که یکی کافی به نظر میرسد. فایلهای از پیش فشردهشده نباید هنگام ارسال دوباره فشرده شوند. پیکربندی این گزینه را تنظیم میکند: no-gzip؛ این گزینه یکی از دو فشردهساز سرور را متوقف میکند. دیگری فایل آماده را دوباره فشرده میکرد، در حالی که سرآیند همچنان gzip را اعلام میکرد و مرورگرها محتوای ناخوانا دریافت میکردند. توضیح روشن میکند چرا هر دو گزینه no-gzip و no-brotli وجود دارند، چون حذف دومی شبیه مرتبسازی به نظر میرسد.
قاعده مسدودسازی معکوس. قاعدهای که نسخههای پشتیبان را مسدود میکند، پسوندهای ممنوع را فهرست نمیکند. میپرسد آیا نام فایل حاوی پسوند منبعی است که در انتهای نام نیست — به این ترتیب نامهایی را هم میگیرد که هنوز کسی نساخته است. توضیح، پنج نامی را که شکل بدیهی قاعده دربارهشان اشتباه میکرد همراه کدهای وضعیتشان فهرست میکند. خود قاعده را بخوانید، بیدلیل پیچیده به نظر میرسد؛ توضیح را بخوانید، تنها راه کارآمد به نظر میرسد.
صورت کلی
توضیحی که کد را تکرار کند بیارزش است و همه این را میدانند. این توضیحها چنین نیستند. چیزی را ثبت میکنند که کد نمیتواند؛ چه چیزی خراب شد، چه چیزی اندازهگیری شد، در چه تاریخی و کدام گزینه دیگر رد شد.
آزمون اینکه آیا توضیحی ارزش نوشتن دارد، ساده است. اگر کسی که ماجرا را نمیداند خط بالای آن را حذف کند، آیا چیزی بیسروصدا خراب میشود؟ اگر بله، ماجرا را بنویسید. اگر نه، چیزی ننویسید.
نسبت سه به یک هدف نیست. این نتیجه اجرای آن آزمون روی فایلی است که تقریباً هر خطش به دلیل یک خرابی مشخص وجود دارد.