وقتی Cursor بلاگ ۷۰۰۰ فایلی رو برای پرفورمنس بررسی کرد
خلاصهٔ کاملتر
نویسنده، ریموند کمدن، میگه هفتهٔ پیش یه کار جالب کرد: بلاگش رو تو Cursor باز کرد و یه بررسی پرفورمنس ساده ازش خواست. این درخواست کوچیکی نبود، چون سورس بلاگش (بدون node_modules) نزدیک هفت هزار فایله. بلاگ با استاتیکسایتجنریتور Eleventy ساخته شده و ترکیبیه از جاوااسکریپت، مارکداون و قالبهای Liquid. نکتهٔ مهم اینه که Eleventy موقع تبدیل مارکداون به HTML، سینتکس Liquid رو هم روی مارکداون اعمال میکنه، پس پستها موقع بیلد پویان و همین روی سرعت بیلد اثر میذاره؛ برای همین نویسنده کل کدبیس (حتی مارکداونها) رو به Cursor داد.
به گفتهٔ نویسنده بزرگترین چیزی که Cursor پیدا کرد، به کد نمایش پستهای ماستدون مربوط بود. یه شورتکد داشت که با گرفتن سرور و یوزرنیم، آخرین پست رو از فید RSS پیدا میکرد. Cursor فهمید که چندجا به botsin.space وصل میشده؛ یه سرور ماستدون که تعطیل شده. کدی که از کتابخانهٔ rss-parser استفاده میکرد سریع شکست میخورد ولی سوکت HTTP رو تا حدود ۷۰ ثانیه (تا تایماوت) باز نگه میداشت. نویسنده تأکید میکنه که باگ تو پیادهسازی خودش بوده نه تو کتابخونه. راهحل ساده بود؛ اضافهکردن تایماوت و بستن keep-alive:
const parser = new Parser({
requestOptions: {
timeout: 5000,
agent: new https.Agent({ keepAlive: false }),
},
});مشکل دوم یه عارضهٔ جانبی ناخواسته بود. چند ماه قبل نویسنده برای «دوستدار AI» شدن بلاگ، برای هر پست یه نسخهٔ مارکداون هم میساخت و با یه edge function نتلیفای، درخواستهایی که متن ساده یا مارکداون میخوان (مثل چیزی که یه ایجنت میفرسته) رو به اون نسخه ریدایرکت میکرد. برای ساختن نسخهٔ مارکداون، از یه هندلر روی رویداد eleventy.after استفاده میکرد که با glob فایلها رو کپی میکرد؛ ولی این glob به فایل .eleventyignore (که حدود ۹۰٪ پستهای قدیمی رو نادیده میگرفت) احترام نمیذاشت و هر تغییری باعث کپیشدن بیش از ۶۰۰۰ فایل میشد. نتیجه این بود که هر ویرایش محلی حدود ۳ ثانیه طول میکشید.
راهحلی که Cursor داد این بود که بهجای glob، فقط پستهایی رو که Eleventy واقعاً بیلد کرده کپی کنه؛ چون رویداد eleventy.after یه آرایهٔ results میده که همهٔ منابع ignore رو رعایت میکنه:
const postResults = results.filter((r) => {
const rel = path.relative(inputDir, r.inputPath);
return rel.startsWith(`posts${path.sep}`) && rel.endsWith('.md');
});مورد سوم به فایلهای _data مربوط بود که از APIهای ریموت داده میگیرن. نویسنده یه کد داشت که اجرای محلی رو تشخیص بده، ولی روشش یه هک بود؛ دنبال مسیر /home/ray میگشت که رو ماشینهای جدید با یوزرنیم متفاوت خراب میشد. Cursor پیشنهاد داد بهجاش دنبال یه متغیر محیطی بگرده، و نویسنده الان تو اسکریپتهای npmش از SKIP_REMOTE_DATA=1 استفاده میکنه.
نویسنده تو جمعبندی صادقانه میگه خودش تو Cursor کار میکنه پس جانبداره و ابزارهای دیگه هم میتونن نتیجهٔ مشابه بدن، ولی از عمق نگاه Cursor به کدش و چیزهایی که خودش هیچوقت متوجهشون نمیشد، تحتتأثیر قرار گرفته. الان زمان بیلدِ محلیش موقع سیو حدود ۰.۳۳ ثانیهست.
نکات کلیدی:
- نویسنده یه بلاگ Eleventy با نزدیک ۷۰۰۰ فایل رو برای بررسی پرفورمنس به Cursor داد
- بزرگترین باگ: اتصال به یه سرور ماستدون تعطیلشده که سوکت HTTP رو ۷۰ ثانیه باز نگه میداشت؛ با تایماوت حل شد
- هندلر بیلد بهجای احترام به .eleventyignore هر بار ۶۰۰۰ فایل کپی میکرد؛ با آرایهٔ results حل شد
- تشخیص اجرای محلی از روی مسیر یوزرنیم به یه متغیر محیطی تمیزتر تغییر کرد
- بعد از اصلاحها زمان بیلد محلی به حدود ۰.۳۳ ثانیه رسید




