diff --git a/Cargo.lock b/Cargo.lock index 74a16ff..6b6e1f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2624,7 +2624,7 @@ dependencies = [ [[package]] name = "mhrv-rs" -version = "1.9.25" +version = "1.9.26" dependencies = [ "base64 0.22.1", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 12b0aaa..1f31447 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mhrv-rs" -version = "1.9.25" +version = "1.9.26" edition = "2021" description = "Rust port of MasterHttpRelayVPN -- DPI bypass via Google Apps Script relay with domain fronting" license = "MIT" diff --git a/docs/changelog/v1.9.26.md b/docs/changelog/v1.9.26.md new file mode 100644 index 0000000..ea127c9 --- /dev/null +++ b/docs/changelog/v1.9.26.md @@ -0,0 +1,12 @@ + +
+ +• **بهینه‌سازی Full mode Apps Script: batch کردن Edge-DNS cache lookupها** ([PR #958](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/958) by @dazzling-no-more). مسیر `CodeFull.gs` قبلاً برای هر DNS query داخل batch یک `CacheService.get` جداگانه می‌زد. روی batchهای شلوغ، همین چند round-trip داخلی به CacheService می‌تونست latency بسازه، مخصوصاً وقتی چند lookup مشابه پشت سر هم می‌اومدن. حالا DNS candidateها در دو pass پردازش می‌شن: اول همه keyها جمع می‌شن، بعد یک `cache.getAll(keys)` برای کل batch انجام می‌شه، و جواب‌های DoH موفق هم داخل همان batch دوباره استفاده می‌شن تا query تکراری دوباره به resolver نخوره. + +• **مسیر امن fallback حفظ شده**. اگر CacheService خطا بده، DoH هنوز از داخل شبکه Google انجام می‌شه ولی `cache.put` غیرفعال می‌مونه؛ اگر parse/DoH شکست بخوره، همان op مثل قبل به tunnel-node forward می‌شه. qnameهای خیلی بلند هم به‌جای skip شدن، با SHA-256 زیر namespace جداگانه cache می‌شن تا محدودیت ۲۵۰ کاراکتری key در CacheService شکسته نشه. هیچ config migration یا تغییر سمت client لازم نیست؛ فقط `CodeFull.gs` جدید را deploy کنید. + +
+--- +• **Optimize Full mode Apps Script by batching Edge-DNS cache lookups** ([PR #958](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/958) by @dazzling-no-more). `CodeFull.gs` previously issued one `CacheService.get` per DNS query inside a tunnel batch. On busy batches, those repeated internal CacheService round-trips could add avoidable latency, especially when several lookups repeated the same qname/qtype. DNS candidates now run in two passes: collect all cache keys first, perform one `cache.getAll(keys)` for the whole batch, then reuse successful DoH answers inside the same batch so duplicate queries do not hit the resolver again. + +• **The safe fallback behavior is preserved**. If CacheService fails, DoH still runs from inside Google's network but `cache.put` is skipped; if parse/DoH fails, the op falls back to the existing tunnel-node forward path. Very long qnames now use a SHA-256 cache key under a separate namespace instead of skipping cache entirely, keeping keys below CacheService's 250-character limit. No client config migration is required; deploy the new `CodeFull.gs`.