Skip to content

درخواست آپدیت code.gs و codefull #566

@studio-ag1

Description

@studio-ag1

سلام. روز خوش. به کمک جمنای پرو یه چند تا مشکل تو فایل های code و code full پیدا کردم که رو سرعت و درخواستا تاثیر منفی میزاشتن که با همون جمنای پرو کدارو ادیت کردم و خواستم براتون به صورت pull request بفرستم ولی چون بلد نبودم درخواست پول بسازم برای همین از طریق issues درخواست فرستادم.

Code.txt
Code-Full.txt

تغییرات تو این فایل ها:
توی تست هایی که خودم انچام دادم. برای منی که با کد قبلی ویدیو های یوتیوب بالا نمیومد، الان اوکی شدن و بالا میان.

این تغییرات برای فایل code:
​۱. حل مشکل مهلک 502/504 در Batch Mode: در نسخه قبلی، از تابع UrlFetchApp.fetchAll استفاده شده بود. مشکل گوگل اسکریپت این است که اگر در یک صف موازی، حتی اتصالِ یکی از URLها تایم‌اوت شود یا خطای DNS بدهد، کل پردازش متوقف شده (Exception) و به تمام کاربرها ارور ۵۰۲ برمی‌گرداند! یک سیستم Fallback (Try-Catch) هوشمند اضافه شد تا اگر پردازش موازی شکست خورد، درخواست‌ها به سرعت به صورت تکی (Sequential) هندل شوند و هیچ‌کس قطعی را حس نکند.

۲. رفع مشکل پخش ویدیوهای YouTube و استریم‌ها: هدر range به لیست CACHE_BUSTING_HEADERS اضافه شد. در نسخه قبل، درخواست‌های استریم ویدیو (که دارای هدر Range برای دریافت فایل‌های حجیم به صورت تکه‌تکه هستند) به اشتباه وارد سیستم کش می‌شدند که باعث مسدود شدنِ استریم و خطای ۵۰۴ می‌شد.

۳. رفع باگ بزرگ در تابع _fetchAndCache: در نسخه قبل، وقتی سیستم کَشِ شیت فعال می‌شد، درخواست‌ها بدون هیچ هدری (بدون User-Agent، بدون Auth و...) توسط UrlFetchApp.fetch به سرور مقصد ارسال می‌شدند! این باگ باعث می‌شد سایت‌هایی مثل Cloudflare یا YouTube فوراً ارور 403 یا 502 بدهند. این مشکل با فراخوانی صحیح تابع _buildOpts در داخل مکانیزم کش کاملاً برطرف شد.

۴. مدیریت هوشمند Compression: هدر accept-encoding به لیست SKIP_HEADERS اضافه شد. تداخل ارسال درخواست‌های Brotli (br) از سمت کلاینت با موتور V8 گوگل که فقط از Gzip پشتیبانی می‌کند، باعث ایجاد خطای ERR_CONTENT_DECODING_FAILED در مرورگر می‌شد که با این کار، فشرده‌سازی به صورت بومی و بدون قطعی به خود سرورهای گوگل سپرده شد.

۵. جلوگیری از Crash شدن تک‌درخواست‌ها: در تابع _doSingle هندلر خطای شبکه وجود نداشت. مدیریت خطا اضافه شد تا در صورت در دسترس نبودنِ سرورِ مقصد، برنامه به جای کرش کردن، یک وضعیت ۵۰۲ تمیز به کلاینت برگرداند

اینم تغییرات فایل code full:
بهینه‌سازی EDGE_DNS_RESOLVERS: در کد اصلی، سرور 1.1.1.1 اول بود. از آنجایی که این اسکریپت روی سرورهای خود گوگل (Google Apps Script) اجرا می‌شود، پینگ سرورهای گوگل با DNS اختصاصی خودش (dns.google) عملاً صفر میلی‌ثانیه است! بنابراین https://dns.google/dns-query را به خط اول منتقل کردم تا پروسه تبدیل دامنه به IP در کسری از ثانیه انجام شود. ​افزایش EDGE_DNS_MIN_TTL_S: مقدار پیش‌فرض ۳۰ ثانیه بود. من آن را به 300 (۵ دقیقه) افزایش دادم. با این کار، اگر در طول ۵ دقیقه ده‌ها بار یک سایت را باز کنی یا کلاینت‌های مختلفی به اسکریپت وصل شوند، برای پیدا کردن IP آن سایت اصلاً درخواستی از سرور خارج نمی‌شود و مستقیماً از رم (Cache) خود گوگل خوانده می‌شود. این کار هم مصرف منابع سرور اصلی تو را کم می‌کند و هم سرعت هندشیک اولیه را به شدت بالا می‌برد.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions