صرفه جویی در اینترنت مشتریان خود، ارائه فایل های مجموعه داده بزرگ JSON از طریق شبکه مانند یک حرفه ای
همیشه برای سرور فایل های بزرگ JSON از طریق شبکه (مانند فایل های 100+ مگابایتی) نیاز بوده است.
راه کارآمدی که میتوانیم با این مشکل مقابله کنیم، تبدیل فایلهای JSON به باینری و ارسال آن به مشتری است.
Firs اجازه می دهد فقط JSON را تبدیل به .gz
فایل کنید و تفاوت اندازه را ببینید.
مقایسه:
اندازه واقعی فایل – 107MB
، فشرده شده است .gz
حجم فایل – 3.2MB
.
دستور لینوکس برای تبدیل JSON به .gz
gzip filename.json
این فایل شما را به .gz
فایل.
اکنون می توانید به راحتی این فایل را از طریق شبکه سرور کنید و کلاینت باید فایل را از آن رمزگشایی کند .gz
فایل به JSON.
یک کتابخانه مفید برای تبدیل داده های باینری به رشته (https://www.npmjs.com/package/pako) است.[pako].
برای تبدیل از کد زیر در React.js استفاده کنید .gz
به .json
فایل.
import { inflate } from "pako";
const parse = (bin: any) => inflate(bin, { to: "string" })
export const fetchJSON = () => {
return fetch("/data/data.json.gz").then(
async (response) => {
const blob = await response.blob();
readSingleFile(blob).then((res) => {
let jsonData = parse(rs);
console.log(jsonData);
return jsonData;
});
});
};
async function readSingleFile(file: File | Blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = function (e) {
resolve(e?.target?.result);
};
reader.readAsArrayBuffer(file);
reader.onabort = reject;
reader.onerror = reject;
});
};
*چرا این مقاله حتی منطقی است: *
خوب اخیراً با آن کار می کردم deck.gl
و باید فایلهای مجموعه داده بزرگ JSON (بیش از 150 مگابایت) را رندر میکرد. اگر فایلها به صورت محلی وجود داشته باشند، اشکالی ندارد، اما تصور کنید که آن فایلهای مجموعه داده را از یک CDN ارائه کنید 😨😨.
برای همین مشکل، من از طریق اینترنت درباره نحوه ارائه کارآمد/بهینه سازی فایل های مجموعه داده بزرگ تحقیق کردم deck.gl
و چیزی پیدا نکردم، و در نهایت به انجام تبدیل باینری و رمزگشایی آن فایل ها در مرورگر برای رندر محتوای نقشه پایان می دهم.
من می دانم که این رویکرد بهینه نیست، اما اگر کسی رویکرد بهتری دارد یا تجربه ای با deck.gl در ارائه مجموعه داده های بزرگ دارد. لطفا در زیر نظر دهید
با تشکر.