راه‌حلی که از یک دیسک محلی در یک ثانیه باز می‌شود، از اشتراکی که از طریق تونل در دسترس است سی ثانیه طول می‌کشد باز شود. تونل به‌خودی‌خود به‌ندرت علت است. آنچه تغییر می‌کند این است که عملیاتی که فراخوانی محلی بودند به رفت‌وبرگشت همگام تبدیل می‌شوند، و ویرایشگر چند مورد از آن‌ها را پیش از ظاهر شدن پنجره انجام می‌دهد. مکانیزم زیر توضیح می‌دهد چرا هر یک گران است و کدام‌ها را می‌توانید حذف کنید.

ویرایشگر هنگام باز بودن یک پرونده چه می‌کند

ویرایشگری که تغییرات را پیگیری می‌کند روی هر پرونده باز یک اشتراک نگه می‌دارد. یک حجم محلی آن اشتراک را بدون شبکه از سیستم فایل تأمین می‌کند. روی یک اشتراک، همان قابلیت می‌تواند به خواندن‌های تکراری فراداده تنزل یابد، زیرا مدل اعلان روی SMB یکسان رفتار نمی‌کند. خاموش کردن پیگیری تغییرات آزمایش نخست منصفانه‌ای است، چون یک طبقه کامل از درخواست‌ها را بدون دست زدن به تونل حذف می‌کند.

سیستم پروژه ترافیک خودش را اضافه می‌کند. بارگذاری یک راه‌حل پوشه‌ها را شمارش می‌کند، پرونده‌های پروژه را می‌خواند و ممکن است SDK یا بسته‌ها را کاوش کند، و هر کاوش وقتی مسیر دور است یک رفت‌وبرگشت است. راه‌حلی با پروژه‌های زیاد این شمار را چند برابر می‌کند، از این‌رو زمان باز شدن سریع‌تر از آنچه اندازه پرونده‌ها نشان می‌دهد رشد می‌کند.

جست‌وجوهای پوسته که پیش از ظاهر شدن منو منقضی می‌شوند

ویندوز منبع دومی از توقف‌ها را اضافه می‌کند که هیچ ربطی به IDE ندارد. کاوشگر و افزونه‌های پوسته آن هر بار که منوی زمینه باز می‌شود، چاپگرها، درایوهای نگاشت‌شده و میانبرهای قبلاً استفاده‌شده را دوباره حل می‌کنند. وقتی آن مقصدها روی شبکه‌ای باشند که تونل به آن نمی‌رسد، هر حل کردن تا انقضای یک مهلت مسدود می‌شود و تنها پس از آن منو کشیده می‌شود. از این‌رو کلیک راست می‌تواند ثانیه‌ها معلق بماند در حالی که خود پرونده به‌طور عادی باز می‌شود.

نگاشت‌های مرده و صف‌های چاپگر را حذف کنید، یا فقط آن‌هایی را نگه دارید که روی شبکه‌ای که واقعاً در آن هستید وجود دارند. همان استدلال هر چیزی را پوشش می‌دهد که مسیری را در پس‌زمینه حل می‌کند، از جمله فهرست پرونده‌های اخیر و پوشه‌های سنجاق‌شده.

net use
Get-Printer | Select-Object Name, PortName
Measure-Command { Get-ChildItem \files\proj | Out-Null }

چرا نسخه کاری محلی برنده می‌شود

کار مستقیم روی اشتراک بدترین تنظیم برای چرخه ویرایش، ساخت و آزمون است، چون ویرایشگر، کامپایلر و کارخواه کنترل نسخه هر یک آن پرونده‌های دور را جداگانه می‌خوانند. هر یک از آن‌ها رفت‌وبرگشت خودش را می‌پردازد و یک ساخت برای هر پرونده یک بار می‌پردازد. نسخه محلی با فرستادن از طریق مخزن، سیل گذرهای کوچک را با یک گذر عمدی جایگزین می‌کند. پیوند بهتر نشده است؛ شمار گذرها فروپاشیده است.

این یک تغییر ساختاری است نه یک تمرین تنظیم، و دقیقاً به همین دلیل کار می‌کند وقتی تنظیمات تونل کار نمی‌کنند. همچنین حالت خرابی را آشکار می‌کند: اگر ساخت با نسخه محلی هنوز کند است، اشتراک هرگز مشکل نبوده است.

تاریخچه را به‌صورت یک شیء واحد جابه‌جا کنید

وقتی خود مخزن باید از تونل بگذرد، تاریخچه را در یک شیء واحد بفرستید نه اینکه آن را بپیمایید. بسته یک پرونده و در نتیجه یک انتقال است، در حالی که یک checkout که هزاران شیء جدا را می‌پیماید هزاران گذر هزینه دارد. Mercurial و Git هر دو این شکل را پشتیبانی می‌کنند.

hg bundle --base 9f2c1a7e outgoing.hg
hg unbundle outgoing.hg
git bundle create repo.bundle main
git clone repo.bundle repo

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

پیش از سرزنش پهنای باند سه عملیات را اندازه بگیرید

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

سپس همان سه را در برابر نسخه محلی پروژه تکرار کنید. تفاوت قیمت اشتراک است و همان عددی است که وقتی کسی پیوند سریع‌تر را به‌عنوان راه‌حل پیشنهاد می‌کند باید نقل کنید.

مقالات مرتبط