كيف وصلنا إلى هنا
لسنوات وسنوات ونحن نبني تطبيقات الويب (Web Applications) بالاعتماد على HTML القديم الجيّد المُعرض على الخادم (server-rendered HTML)، باستعمال منصّة الويب (Web Platform) كما قُصد لها. روابط للتنقّل إلى صفحات أخرى، ونماذج (forms) لإرسال البيانات إلى الخادم، فيعالج الخادم البيانات ويعيد صفحةً جديدة بالبيانات المحدَّثة.
الويب، الذي وُجد في الأصل وسيلةً لقراءة الأشياء والنقر على الروابط لقراءة أشياء أخرى، وجد نفسه في هذا الموقف الحلو حيث أراد الناس استعماله في أمور أكثر.
احتاج الناس إلى بناء واجهات مستخدم أعقد.
فصنع الناس تقنيات إضافية لجعل ذلك ممكنًا.
إحدى التقنيات التي لقيت رواجًا هي AJAX. فقدّمتها Microsoft مع IE، وأتاحت بناء تطبيقات مثل Gmail و Google Maps، وهي أمور نعدّها اليوم طبيعية، لكنها كانت نقلةً نوعية في زمن إطلاقها.
يعني AJAX أننا نتمكّن من إرسال طلب إلى عنوان URL باستعمال JavaScript والحصول على بعض البيانات في المقابل. وباستعمال JavaScript، استطعنا إضافة هذه البيانات الجديدة إلى الصفحة. رائع. كان الأمر معقّدًا بعض الشيء في البداية، لكن مكتبات مثل jQuery قدّمت واجهات برمجية (APIs) جيّدة مثل $.ajax() أو $.post() للتعامل مع هذا الأسلوب. وأنا الآن أشعر بالحنين إلى تلك الأيام.
لكن في مرحلة ما أصبحت JavaScript قويّةً جدًّا، وأصبحت الحواسيب سريعةً جدًّا، فبدأت فكرة أخرى في الظهور: ماذا لو أنشأنا تطبيق JavaScript يعمل داخل المتصفّح، ومهمّته تصيير HTML يعرضه المتصفّح للمستخدم؟
وهكذا انتهينا إلى أشياء مثل React.
لم تكن React الأولى (ومن أولى ما نتذكّره Backbone و Ember و Knockout..) لكنها في النهاية كانت الأكثر نجاحًا.
إذن لنلخّص، انتقلت تطبيقات الويب من معمارية عميل-خادم (Client-Server) يكون فيها العميل «غبيًّا» ومسؤولًا عن عرض HTML الذي يرسله الخادم فحسب، إلى أن صارت «ذكيّة» وتُشغّل تطبيقات كاملة داخل نافذة.
ما زلت تحتاج خادم ويب (Web Server) مسؤولًا عن إرسال البيانات، عادةً بصيغة JSON، وهي صيغة بيانات مُسلسَلة تشبه JavaScript وحظيت بشعبية هائلة، وعن طريق معالجة الإجراءات وتعديل البيانات، مثلًا بالتواصل مع قاعدة بيانات.
معظم المواقع التي تستعملها هي تطبيقات.
وبعض تلك التطبيقات معقّد جدًّا. فعلى سبيل المثال أفكّر في Figma، وأشياء مثل Photopea و Google Maps التي ذكرناها من قبل، وحتى محرّرات الفيديو مثل Descript، فهي تعمل كليًا داخل المتصفّح.
لن تكون تلك التطبيقات ممكنة من دون كمٍ هائل من شيفرة JavaScript التي تعمل في جهة العميل. إنه شيء لا يُصدّق ما نستطيع فعله.
لكن معظم التطبيقات التي أبنيها، وأنت أيضًا تبنيها، ليست على هذا المستوى.
قد يكون لديك مسار تسجيل دخول (login workflow)، وبعض النماذج، وإدخال بيانات من قِبل المستخدمين، وعرض بيانات، وهكذا وهكذا، لكنها ليست معقّدة بطبيعتها.
إنها مجرّد تطبيقات CRUD.
وأسلوب تطبيقات الصفحة الواحدة (SPA) الحديث أكثر من اللازم بالنسبة إليها.