لماذا لا أحب الويب الحديث



الخطوة الأولى في العمل مع الويب هي إرسال البيانات إلى تطبيق الخادم الخاص بك. وإذا كان من الممكن تكليف تحليل عشرات الخطوط الصغيرة بالإطار ، فماذا عن تنزيل الملفات؟

لنأخذ PHP كمثال ، على الرغم من أن الموصوف صحيح لـ 99٪ من اللغات والتقنيات الأخرى. لنفترض أننا نريد السماح للمستخدم بتحميل الصور إلى الموقع ، لذلك نقوم بعمل نموذج يحتوي على حقل من نوع الملف و ... ظاهريًا ، كل شيء بسيط للغاية ، فقط بضعة بايتات في النموذج وفي الكود قد تغيرت ، ولكن الآن يمكنك العمل مع الملفات بدلاً من النص من النماذج! ولكن ليس كل شيء بهذه البساطة ، يجب أن يستقر ملفك أولاً في مكان ما في / tmp / حتى يصل الطلب تمامًا ، ولا يتحكم البرنامج النصي ببساطة ولا يمكنك فعل أي شيء حيال ذلك. على سبيل المثال ، بدلاً من الصورة ، قام المستخدم بتحميل ملف exe ، ولكنك لن تكتشفه إلا بعد اكتمال التنزيل أخيرًا. وبالتالي ، يمكن للمهاجم لبعض الوقت أن يدق قناة ووقت نظام القرص الفرعي الخاص بك ، متظاهرًا بتحميل ملفات مفيدة ، ولن تعرف حتى ذلك. إذا كان خادم التخزين المؤقت أمام خادم التطبيق ، فإن الوضع أسوأ من ذلك: على سبيل المثال ، يقوم nginx بإنشاء ملفات مؤقتة ، أي أولاً ، سيتم تسوية الطلب من المستخدم على القرص ، بمجرد الانتهاء ، تتم إعادة قراءة الملف وتسليمه بسرعة إلى خادم التطبيق (في حالتنا ، php) ، حيث يتم حفظه على القرص مرة أخرى. إجمالي الاستخدام الثلاثي للقرص ، حتى إذا كان المستخدم يحتاج فقط إلى عرض الرسالة "لقد نسيت إدخال كلمة التحقق".

أنا لا أتحدث عن حقيقة أنه لا يمكن القيام بأشياء أكثر متعة مع هذا النهج. لا تتوفر ميزة بسيطة مثل "شريط تقدم تحميل الملف". للحصول على أمثلة أكثر تعقيدًا: يعرض Youtube إطارات من فيلم ما زال قيد التحميل ولكن لم يتم تحميله بالكامل. لن تحصل على أي تحكم (وحتى الإشعارات!) قبل تنزيل الفيلم بالكامل (2 غيغابايت ، على سبيل المثال). أنت لا تعرف حتى أن شخصًا قد أكل 1.5 غيغابايت من القرص ، ولكن بعد ذلك أغلق المتصفح أو نقر على زر التحديث في المتصفح دون انتظار أي شيء.

بالطبع ، هناك عكازات مختلفة بدرجات متفاوتة من الانحناء تسمح لك بحل المهام النموذجية ، مثل "تلقي إحصائيات الطلبات عبر json" ، والتي يتم تنفيذها كوحدات خوادم الويب ، ولكن يجب عليك القيام بهذه الأشياء بنفسك و / أو تصبح مرتبطة بالبيئة ، يتوقف التطبيق عن كونه مستقلاً وتصبح معتمدة على تطبيقات محددة ومكتباتهم.

مخبأ


المخابئ حيوية. تسمح لك تقنية التخزين المؤقت بتسريع استجابة موقعك وتقليل الحمل عليه ، مما يلغي الحاجة إلى القيام بنفس العمليات للعديد من الطلبات. على سبيل المثال ، كم من لا يفعل 2 + 2 ، سيكون هناك دائمًا 4 ، ولكن احتساب 2 + 2 يستهلك موارد الخادم ، فمن الأكثر ربحية حساب هذه القيمة مرة واحدة ، عند وصول الزائر الأول ، ثم الكتابة في مكان ما ، من أجل إعطاء هذا المستخدم الآخر النتيجة.

لا تخلط بين هذا التخزين المؤقت ورؤوس http ، فهي تؤثر فقط على عميل معين (في الأصل أيضًا على الوكلاء المتوسطين) ، بينما تم تصميم التخزين المؤقت على الخادم لإعطاء نفس المحتوى للعديد من المستخدمين.

للأسف ، ليس من المربح إعطاء التخزين المؤقت لخادم وسيط ، في حالة وجود أدنى تحديث على الصفحة ، سيكون عليك إنشاء صفحة من البداية ، وبالنظر إلى الحقائق الحديثة ، عندما يكون هناك الكثير من العناصر الديناميكية على الصفحة ، في الواقع ستكون كل صفحة فريدة ، ومن ناحية أخرى ، سيكون طلب النموذج GET / somepage.html؟ someshit = 12345 سوف تخترق ذاكرة التخزين المؤقت وسيتم تشكيل صفحة جديدة لن تأخذ هذه المعلمة في الاعتبار حتى ، ولكن مع ذلك ستكون هناك تكاليف لإنشائها ، والتي يمكن استخدامها مرة أخرى من قبل المهاجم. لذلك ، يستخدم عدد قليل من الأشخاص خوادم ذاكرة التخزين المؤقت الوسيطة ومن الصعب جدًا الاعتماد عليها.

يبقى تخزين كل شيء داخل التطبيق ، حيث يوفر كل إطار تقريبًا عكازات خاصة به ، بالإضافة إلى إطارات جاهزة مثل جميع أنواع المذكرات وما شابه ذلك. عادة ، يكتب المطورون المبتدئون فقط في الماء المغلي عندما يكتشفون أنه عند إنشاء صفحة ، يمكنك تقديم 500 طلب إلى ذاكرة التخزين المؤقت ولن يكون هناك أي شيء لها (على عكس الخلية المفضلة لدى الجميع). ونتيجة لذلك ، يتم تغطية جميع التعليمات البرمجية بأغلفة تتحقق أولاً من نتيجة الطلب في memcashd ، ثم يتسلقون النتيجة إلى mysql. لا أزعم أن التحكم اليدوي في ذاكرة التخزين المؤقت ضروري ، ولكن التحكم اليدوي تمامًا يؤدي إلى أخطاء محتملة ، حيث يمكنك ببساطة أن تنسى تشغيل التخزين المؤقت ، والذي ، وفقًا لقانون اللئيم ، سيكون مكانًا مهمًا.

واجهات


ما واجهة يجب أن يكون الموقع؟ فقط لا تقل أن الأخضر.

في السابق ، كقاعدة ، كان عرض الموقع فرديًا وغير قابل للتجزئة. ومع ذلك ، على البوابات الكبيرة كانت هناك أزرار "نسخة مطبوعة" ، أو حتى "نسخة WAP" ، والتي تم استبدالها فيما بعد بـ "إصدار المساعد الشخصي الرقمي" - وهو بالفعل HTML عادي ، أبسط فقط. على الرغم من الاعتماد على المكان ، إذا كنت تأخذ تويتر ، فهذه هي النسخة الوحيدة القابلة للقراءة منه. مر الوقت وكانت هناك حاجة لتحرير المواقع ليس فقط للطابعات والهواتف ، ولكن أيضًا لجميع أنواع أجهزة iPad والثلاجات التي تدعم HTML5. بطبيعة الحال ، وقع كل هذا في حب المطورين ، لأنهم اضطروا في الواقع إلى القيام بـ 10 إصدارات لكل موقع ، وقرروا القيام بشيء عالمي. نوع من API للموقع.

ما هو API - لا أعرف. بصراحة ، لا أعرف. عادة ما يكون هذا نوعًا من القرف عندما تبصق على خادم بقطعة من سلسلة urlencoded ، وفي المقابل تحصل على قطعة من json / xml / plain text ، كم هو محظوظ. بالطبع ، لا يمكن أن تكون أي معايير ، حتى أنواع البيانات البدائية ، أي شيء ، ويمكن أن تكون النتيجة الفارغة أيضًا أي شيء ، من صفر إلى "" (علامات اقتباس فارغة) ، أو حتى تكون غائبة نتيجة لذلك. من الجيد إذا قرأ المؤلفون عن كلمة مثل REST واندفعوا إلى تنفيذها ، ولكن على خلفية كل شيء آخر ، لا معنى لذلك. الوظيفة غير واضحة أيضًا ، إذا طلبنا صفحة HTML يمكننا الحصول على كل شيء في وقت واحد (آخر الأخبار والتعليقات وإبداءات الإعجاب وما إلى ذلك) ، ثم عدد الطلبات التي نحتاج إلى إجرائها في حالة واجهة برمجة التطبيقات - فقط مؤلف واجهة برمجة التطبيقات يعلم أنه من الممكن جدًا يمكن تلقي التعليقات ، ولكن يحبهم - لا. في الواقع ، واجهة برمجة التطبيقات هي طريقة لتقسيم تطوير العميل والخادم إلى فرق تطوير مختلفة تمامًا تتفاعل بشكل سيئ مع بعضها البعض. ولا يمكن الحديث عن فائدة واجهة برمجة التطبيقات هذه.

وغالبًا ما يتطلب الوصول إلى واجهة برمجة التطبيقات مفتاحًا معينًا. غالبًا ما يمكن الحصول على المفاتيح مجانًا. لماذا لا تحصل على هذا المفتاح؟ المشكلة هي أن هذا يقودنا إلى المحاسبة الصريحة للطلبات ، إلى بعض المحاسبة الداخلية. ومن يعلم متى يريد المؤلف تحقيق الدخل من كل هذا؟ من الممكن أنه بعد مرور بعض الوقت سيتم تعطيل المفاتيح المجانية أو تقييدها بشدة ، وعرض استخدام تعريفة مدفوعة. وأحيانًا بشكل عام ، يتم تعليق إصدار جميع المفاتيح ، ويتم إيقاف الخدمة ، حتى على أساس تجاري ، يحدث هذا أيضًا. حسنًا ، لماذا API؟ من الأسهل بالنسبة لي أن أقوم بتمديد الصفحة وتحليلها بشكل منتظم من تحمل مثل هذا الخزي. لذلك ، لا أستخدم أبدًا واجهات برمجة التطبيقات هذه ، خاصة وأنني لن أتعامل مع ميزاتها.

Source: https://habr.com/ru/post/ar426297/


All Articles