🔵 عنوان مقاله
be experimenting with
🟢 خلاصه مقاله:
از کتابخانههای زیادی که میخواهند به مخاطبان بیشتری برسند، در حال حاضر نسخههای JavaScript ارائه میشود تا هم در مرورگر و هم در محیطهای Node.js، Deno و Bun در دسترس باشند. مزیت اصلی، دسترسی گسترده، توزیع ساده از طریق npm و تجربه کاربری یکپارچه بین فرانتاند و بکاند است.
دو مسیر رایج وجود دارد: بازنویسی بومی با TypeScript برای ارائه APIهای استاندارد، تایپهای دقیق و قابلیت tree-shaking؛ یا پورت از زبانهای سطح پایین به WebAssembly برای حفظ کارایی و استفاده مجدد از کد موجود. ابزارهایی مانند Emscripten، wasm-bindgen و ابزارهای Go این کار را تسهیل میکنند و با ارائه TypeScript declarations سطح استفادهپسند ایجاد میشود.
چالشها شامل انتخاب بین ESM و CJS، بهینهسازی اندازه باندل و داراییهای WASM، محدودیتهای مرورگر (فایلسیستم و سوکت خام)، تفاوتهای اجرا در Node.js/Deno/Bun، و مدیریت کارایی و زمان راهاندازی است. استفاده از Web Workers، بارگذاری تدریجی، بنچمارکگیری در محیطهای مختلف و مستندسازی دقیق کمککننده است. در حوزه امنیت نیز باید مراقب زنجیره تأمین، نسخهبندی SemVer، تست و انتشار مرحلهای بود.
نمونههای موفق شامل OpenCV.js، نسخه WASM از SQLite، TensorFlow.js، ONNX Runtime Web و Pyodide است که نشان میدهند با طراحی API مناسب و ابزار درست، پورتهای جدی عملی است. قاعده تصمیمگیری: اگر کتابخانه سنگین و بهینه است، WASM انتخاب خوبی است؛ اگر هدف تجربه توسعهدهنده در اکوسیستم JavaScript است، بازنویسی با TypeScript بهتر است؛ و برای قابلیتهای سختافزاری/سیستمی، رویکرد هیبریدی یا سمت سرور منطقی است. با پیشرفت WebAssembly/WASI، WebGPU و پلتفرمهای edge مانند Cloudflare Workers و Vercel Edge، زمان مناسبی برای آزمایش و تکرار است.
#JavaScript #WebAssembly #TypeScript #NodeJS #Deno #npm #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/175359/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
be experimenting with
🟢 خلاصه مقاله:
از کتابخانههای زیادی که میخواهند به مخاطبان بیشتری برسند، در حال حاضر نسخههای JavaScript ارائه میشود تا هم در مرورگر و هم در محیطهای Node.js، Deno و Bun در دسترس باشند. مزیت اصلی، دسترسی گسترده، توزیع ساده از طریق npm و تجربه کاربری یکپارچه بین فرانتاند و بکاند است.
دو مسیر رایج وجود دارد: بازنویسی بومی با TypeScript برای ارائه APIهای استاندارد، تایپهای دقیق و قابلیت tree-shaking؛ یا پورت از زبانهای سطح پایین به WebAssembly برای حفظ کارایی و استفاده مجدد از کد موجود. ابزارهایی مانند Emscripten، wasm-bindgen و ابزارهای Go این کار را تسهیل میکنند و با ارائه TypeScript declarations سطح استفادهپسند ایجاد میشود.
چالشها شامل انتخاب بین ESM و CJS، بهینهسازی اندازه باندل و داراییهای WASM، محدودیتهای مرورگر (فایلسیستم و سوکت خام)، تفاوتهای اجرا در Node.js/Deno/Bun، و مدیریت کارایی و زمان راهاندازی است. استفاده از Web Workers، بارگذاری تدریجی، بنچمارکگیری در محیطهای مختلف و مستندسازی دقیق کمککننده است. در حوزه امنیت نیز باید مراقب زنجیره تأمین، نسخهبندی SemVer، تست و انتشار مرحلهای بود.
نمونههای موفق شامل OpenCV.js، نسخه WASM از SQLite، TensorFlow.js، ONNX Runtime Web و Pyodide است که نشان میدهند با طراحی API مناسب و ابزار درست، پورتهای جدی عملی است. قاعده تصمیمگیری: اگر کتابخانه سنگین و بهینه است، WASM انتخاب خوبی است؛ اگر هدف تجربه توسعهدهنده در اکوسیستم JavaScript است، بازنویسی با TypeScript بهتر است؛ و برای قابلیتهای سختافزاری/سیستمی، رویکرد هیبریدی یا سمت سرور منطقی است. با پیشرفت WebAssembly/WASI، WebGPU و پلتفرمهای edge مانند Cloudflare Workers و Vercel Edge، زمان مناسبی برای آزمایش و تکرار است.
#JavaScript #WebAssembly #TypeScript #NodeJS #Deno #npm #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/175359/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🔵 عنوان مقاله
qjs: Run JavaScript in Go
🟢 خلاصه مقاله:
qjs یک روش تازه برای اجرای JavaScript داخل اپهای Go است که بدون نیاز به Cgo کار میکند. بهجای اتصال به یک کتابخانه بومی، نسخه فورکشدهای از QuickJS را به WebAssembly کامپایل کرده و آن را زیر Wazero اجرا میکند. این رویکرد کل زنجیره را در محیط خالص Go نگه میدارد و فرایند بیلد، استاتیکسازی و کراسکامپایل را سادهتر میکند. مزیت دیگر، ایزولهسازی و سندباکس طبیعی ناشی از WebAssembly است. هرچند احتمالاً نسبت به اتصال بومی اندکی سربار دارد، اما برای سناریوهایی مثل اسکریپتنویسی، افزونهها و اجرای امن منطق کاربر، توازن خوبی بین سادگی، پرتابلبودن و امنیت ارائه میدهد.
#Go #JavaScript #WebAssembly #Wazero #QuickJS #Cgo #GoLang #Embedding
🟣لینک مقاله:
https://golangweekly.com/link/175350/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
qjs: Run JavaScript in Go
🟢 خلاصه مقاله:
qjs یک روش تازه برای اجرای JavaScript داخل اپهای Go است که بدون نیاز به Cgo کار میکند. بهجای اتصال به یک کتابخانه بومی، نسخه فورکشدهای از QuickJS را به WebAssembly کامپایل کرده و آن را زیر Wazero اجرا میکند. این رویکرد کل زنجیره را در محیط خالص Go نگه میدارد و فرایند بیلد، استاتیکسازی و کراسکامپایل را سادهتر میکند. مزیت دیگر، ایزولهسازی و سندباکس طبیعی ناشی از WebAssembly است. هرچند احتمالاً نسبت به اتصال بومی اندکی سربار دارد، اما برای سناریوهایی مثل اسکریپتنویسی، افزونهها و اجرای امن منطق کاربر، توازن خوبی بین سادگی، پرتابلبودن و امنیت ارائه میدهد.
#Go #JavaScript #WebAssembly #Wazero #QuickJS #Cgo #GoLang #Embedding
🟣لینک مقاله:
https://golangweekly.com/link/175350/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - fastschema/qjs: QJS is a CGO-Free, modern, secure JavaScript runtime for Go applications, built on the powerful QuickJS…
QJS is a CGO-Free, modern, secure JavaScript runtime for Go applications, built on the powerful QuickJS engine and Wazero WebAssembly runtime - fastschema/qjs
🔵 عنوان مقاله
vite-plugin-use-golang: Write Go in JavaScript Files?
🟢 خلاصه مقاله:
** این افزونه با نام vite-plugin-use-golang برای Vite یک آزمایش جالب است که با قرار دادن دستور "use golang" داخل فایلهای JavaScript، کدهای Go را شناسایی کرده و آنها را برای استفاده در فرانتاند به WebAssembly کامپایل میکند. نتیجه این است که میتوانید بخشی از منطق Go را مستقیماً در مرورگر و کنار کدهای JavaScript فراخوانی کنید. این رویکرد برای بهرهبرداری مجدد از منطق موجود در Go یا آزمایش بخشهای حساس به کارایی مفید است، اما پیچیدگی فرایند ساخت، افزایش حجم باندل، زمان راهاندازی WASM، دشواری دیباگ و محدودیت دسترسی مستقیم به DOM از چالشهای آن هستند. در مجموع، این کار «نامتعارف اما واقعی» است و نشان میدهد زنجیره ابزارهای امروز تا کجا قابل گسترش است.
#Vite #Go #WebAssembly #WASM #JavaScript #Frontend #DevTools #WasmInBrowser
🟣لینک مقاله:
https://golangweekly.com/link/176347/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
vite-plugin-use-golang: Write Go in JavaScript Files?
🟢 خلاصه مقاله:
** این افزونه با نام vite-plugin-use-golang برای Vite یک آزمایش جالب است که با قرار دادن دستور "use golang" داخل فایلهای JavaScript، کدهای Go را شناسایی کرده و آنها را برای استفاده در فرانتاند به WebAssembly کامپایل میکند. نتیجه این است که میتوانید بخشی از منطق Go را مستقیماً در مرورگر و کنار کدهای JavaScript فراخوانی کنید. این رویکرد برای بهرهبرداری مجدد از منطق موجود در Go یا آزمایش بخشهای حساس به کارایی مفید است، اما پیچیدگی فرایند ساخت، افزایش حجم باندل، زمان راهاندازی WASM، دشواری دیباگ و محدودیت دسترسی مستقیم به DOM از چالشهای آن هستند. در مجموع، این کار «نامتعارف اما واقعی» است و نشان میدهد زنجیره ابزارهای امروز تا کجا قابل گسترش است.
#Vite #Go #WebAssembly #WASM #JavaScript #Frontend #DevTools #WasmInBrowser
🟣لینک مقاله:
https://golangweekly.com/link/176347/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🎙️ عنوان پادکست:
An episode as short as the name of a unix command
خلاصه پادکست:
این اپیزود کوتاه بهروزترین خبرها را پوشش میدهد: انتشار نسخههای Go 1.25.3 و 1.24.9، و مرور بلاگ Thea Heinen دربارهی کشف یک باگ در کامپایلر arm64 زبان Go. همچنین دربارهی پیشرفت پشتیبانی zsh و بهبودهای مرتبط با sh صحبت میشود، و خبر یک Go meetup و ضبط زنده اپیزود در San Francisco اعلام میگردد. در بخش Lightning، به qjs (یک JavaScript runtime مدرن و امن بدون CGO برای برنامههای Go) و Kaizen (تماشای انیمه از ترمینال) میپردازیم. در پایان از مخاطبان برای حمایت از پادکست در Patreon دعوت میشود.
#Go #Golang #arm64 #Unix #zsh #JavaScript #qjs #Podcast
An episode as short as the name of a unix command
خلاصه پادکست:
این اپیزود کوتاه بهروزترین خبرها را پوشش میدهد: انتشار نسخههای Go 1.25.3 و 1.24.9، و مرور بلاگ Thea Heinen دربارهی کشف یک باگ در کامپایلر arm64 زبان Go. همچنین دربارهی پیشرفت پشتیبانی zsh و بهبودهای مرتبط با sh صحبت میشود، و خبر یک Go meetup و ضبط زنده اپیزود در San Francisco اعلام میگردد. در بخش Lightning، به qjs (یک JavaScript runtime مدرن و امن بدون CGO برای برنامههای Go) و Kaizen (تماشای انیمه از ترمینال) میپردازیم. در پایان از مخاطبان برای حمایت از پادکست در Patreon دعوت میشود.
#Go #Golang #arm64 #Unix #zsh #JavaScript #qjs #Podcast
👍1🔥1
🔵 عنوان مقاله
A look into how JavaScript source maps work
🟢 خلاصه مقاله:
خلاصهای از ساختوکار source map در JavaScript: کدی که در مرورگر اجرا میشود معمولاً پس از transpile، bundle و minify با کد اصلی تفاوت دارد. source map پلی است میان این دو تا بتوانید در DevTools مثل کد اصلی breakpoint بگذارید و خطاها را بخوانید. یک source map فایل JSONی است با فیلدهایی مثل version، file، sources، names، sourcesContent و یک رشته mappings که با Base64 VLQ فشرده شده و با بخشهای دلتایی موقعیتهای کد تولیدشده را به سطر/ستونهای فایلهای اصلی (و در صورت وجود، نامها) نگاشت میکند. ابزارهایی مثل TypeScript و Babel نگاشت را هنگام تبدیل میسازند، Webpack/Rollup/esbuild آنها را ترکیب میکنند و Terser در مرحله minify این زنجیره را حفظ میکند؛ این همان chain شدن source map است. مرورگر از طریق دستور sourceMappingURL (فایل خارجی یا data URI) map را میخواند و با رعایت CORS آن را decode کرده و در DevTools نمایش و دیباگ را بر اساس کد اصلی ممکن میسازد؛ همچنین پلتفرمهایی مثل Sentry با دریافت map میتوانند stack traceهای production را de-minify کنند. در عمل، به خاطر اندازه و حریم خصوصی، بهتر است در production از الگوهایی چون hidden-source-map یا nosources-source-map، میزبانی امن، و فشردهسازی/کش استفاده کنید. محدودیتها شامل دقت ستونی ناقص در برخی تبدیلها، کدهای dynamic/eval، ناسازگاری مسیرها و سوگیریهای نگاشت است. بهترین رویهها: فعالسازی map در تمام مراحل build، اعتبارسنجی در DevTools، اطمینان از CORS مناسب برای ابزار خطا، کنترل نسخه ابزارها و آزمون remap شدن خطاها در CI.
#JavaScript #SourceMaps #WebDev #Debugging #DevTools #Bundlers #Performance
🟣لینک مقاله:
https://golangweekly.com/link/176649/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
A look into how JavaScript source maps work
🟢 خلاصه مقاله:
خلاصهای از ساختوکار source map در JavaScript: کدی که در مرورگر اجرا میشود معمولاً پس از transpile، bundle و minify با کد اصلی تفاوت دارد. source map پلی است میان این دو تا بتوانید در DevTools مثل کد اصلی breakpoint بگذارید و خطاها را بخوانید. یک source map فایل JSONی است با فیلدهایی مثل version، file، sources، names، sourcesContent و یک رشته mappings که با Base64 VLQ فشرده شده و با بخشهای دلتایی موقعیتهای کد تولیدشده را به سطر/ستونهای فایلهای اصلی (و در صورت وجود، نامها) نگاشت میکند. ابزارهایی مثل TypeScript و Babel نگاشت را هنگام تبدیل میسازند، Webpack/Rollup/esbuild آنها را ترکیب میکنند و Terser در مرحله minify این زنجیره را حفظ میکند؛ این همان chain شدن source map است. مرورگر از طریق دستور sourceMappingURL (فایل خارجی یا data URI) map را میخواند و با رعایت CORS آن را decode کرده و در DevTools نمایش و دیباگ را بر اساس کد اصلی ممکن میسازد؛ همچنین پلتفرمهایی مثل Sentry با دریافت map میتوانند stack traceهای production را de-minify کنند. در عمل، به خاطر اندازه و حریم خصوصی، بهتر است در production از الگوهایی چون hidden-source-map یا nosources-source-map، میزبانی امن، و فشردهسازی/کش استفاده کنید. محدودیتها شامل دقت ستونی ناقص در برخی تبدیلها، کدهای dynamic/eval، ناسازگاری مسیرها و سوگیریهای نگاشت است. بهترین رویهها: فعالسازی map در تمام مراحل build، اعتبارسنجی در DevTools، اطمینان از CORS مناسب برای ابزار خطا، کنترل نسخه ابزارها و آزمون remap شدن خطاها در CI.
#JavaScript #SourceMaps #WebDev #Debugging #DevTools #Bundlers #Performance
🟣لینک مقاله:
https://golangweekly.com/link/176649/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Do more with less. | Polar Signals
The Inner Workings of JavaScript Source Maps
A deep dive into how JavaScript source maps work under the hood, with examples showing how all the pieces fit together.
👍1