החלפתי את JSON בפורמט בינארי מותאם אישית ב-PHP

אנחנו צריכים לאחסן טקסט עשיר (rich text) עבור אפליקציות ווב ומובייל.

במשך שנים השתמשנו ב-HTML טהור במסד הנתונים שלנו. מאוחר יותר, עברנו ל-JSON כדי להפריד בין העריכה להדפסה.

JSON הפך לבעיה ככל שהנתונים שלנו גדלו. כדי לשנות קישור בודד, היינו צריכים לבצע parsing, בנייה מחדש ו-stringify לכל המערך. התהליך הזה היה איטי ולא יעיל.

החלטתי לבנות פורמט בינארי מותאם אישית באמצעות PHP.

הנה הסיבות שבגללן ביצעתי את המעבר:

  • מהירות: ה-parsing והחיפוש הפכו למהירים הרבה יותר.
  • שליטה: אני יכול לתמרן בייטים ספציפיים מבלי לטעון הכל לזיכרון.
  • מבנה: עברתי מעץ מקונן (nested tree) לרשימה שטוחה של אלמנטים.

רוב משימות הטקסט העשיר אינן דורשות עץ מורכב. לעיתים קרובות צריך רק למצוא טקסט או תגיות ספציפיות. מבנה שטוח של אלמנטים עם עץ פשוט של offsets עובד טוב יותר.

PHP אינה שפת low-level. היא אינה מותאמת לתמרון בייטים כמו Zig או C. עם זאת, ל-PHP יש את הכלים הנכונים:

  • pack() הופך מספרים או מחרוזות לבייטים גולמיים.
  • unpack() הופך את הבייטים הללו בחזרה לנתונים שניתן להשתמש בהם.

הפסקתי להשתמש בפונקציות מחרו