Remix 3.1 منتشر شد: رندر سمت سرور دو برابر سریعتر
خلاصهٔ کاملتر
Remix 3.1.0 منتشر شده و مهمترین تغییرش سرعت رندر سمت سرور با remix/component هست. طبق یادداشت انتشار، رندر یه صفحهٔ لیست ۴۸ محصولی با renderToString() از ۵۱۳ به ۲۴۴ میکروثانیه رسیده، اونم بدون هیچ تغییری تو کد و با همون HTML خروجی. زیر بار سنگین HTTP هم حافظهٔ سرور بعد از بار از ۷۹۳ به ۵۲۷ مگابایت اومده پایین.
خبر مهم بعدی entrypointهای future هست، مثل remix/middleware/form-data/future. اینها فایلهای آپلودی رو استریم میکنن، یعنی فایل تیکهتیکه از بدنهٔ درخواست خونده میشه و کل فایل یهجا تو حافظه نمیشینه. تیم Remix میگه با یه فایل ۱۰۰ مگابایتی، پارس کردن از ۶۸ به ۳۷ میلیثانیه رسیده و رشد حافظه از ۳۹۶ به ۲۹ مگابایت کم شده. فرمهای کوچیک همون سرعت قبل رو دارن.
برای امتحانش کافیه formData() رو از مسیر future ایمپورت کنی، گزینههاش همون نسخهٔ پایداره:
import { formData } from 'remix/middleware/form-data/future'
formData({
async uploadHandler(upload) {
let key = crypto.randomUUID()
await storage.set(key, upload)
return key
},
})فقط حواست باشه هر upload رو فقط یه بار میشه خوند، upload.size تا قبل از خوندن در دسترس نیست و upload.slice() هم پشتیبانی نمیشه. از طرف دیگه storage.set() تو remix/file-storage/s3 حالا با multipart upload فایل رو استریم میکنه و یه گزینهٔ partSize هم داره. یعنی آپلودهای بزرگ مستقیم میرن تو S3 بدون اینکه تو حافظهٔ سرور بمونن. این APIها هنوز پایدار نیستن و تیم Remix ازت میخواد بازخوردت رو بهشون بدی.
چند تا امکان دیگه هم اومده. با createMixin(setup, { ssr: false }) میشه یه mixin رو فقط سمت مرورگر اجرا کرد. frame.reload() یه بخش از صفحه (frame) رو با یه منبع دیگه یا ارسال فرم دوباره بارگذاری میکنه، بدون اینکه history مرورگر عوض بشه. prefetch با data-rmx-prefetch هم اضافه شده که Save-Data رو رعایت میکنه و روی اینترنت 2g کاری نمیکنه. با resetFocus: 'manual' هم میشه جلوی ریست خودکار فوکوس موقع جابهجایی بین صفحهها رو گرفت.
نکات کلیدی:
- رندر سمت سرور با remix/component حدود دو برابر سریعتره: ۵۱۳ به ۲۴۴ میکروثانیه برای یه صفحهٔ ۴۸ محصولی.
- حافظهٔ سرور زیر بار از ۷۹۳ به ۵۲۷ مگابایت کم شده.
- parserهای future برای فایل ۱۰۰ مگابایتی رشد حافظه رو از ۳۹۶ به ۲۹ مگابایت میرسونن، ولی هنوز آزمایشیان.
- storage.set() در S3 حالا با multipart upload استریم میکنه و گزینهٔ partSize داره.
- کش getScriptEntry() تو remix/assets زمان یه lookup گرم رو از ۲۱۰ به حدود ۳ میکروثانیه رسونده.




