9 पॉइंट द्वारा xguru 2024-05-27 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • PHP इस समय इंटरनेट पर मौजूद लगभग 75% वेबसाइटों में इस्तेमाल हो रहा है
  • PHP प्रोग्रामिंग भाषाओं में कोई "sexy boy" नहीं है, लेकिन इंटरनेट की शुरुआत से ही इसकी महत्वपूर्ण भूमिका रही है
  • अब PHP को Wasmer और Wasmer Edge पर पूरी तरह चलाया जा सकता है (open beta)

WebAssembly में PHP चलाना क्यों महत्वपूर्ण है

  • WebAssembly की विशेषताओं की वजह से किसी प्रोग्राम की पहुँच वाले resources को सुरक्षित रूप से सीमित किया जा सकता है
  • OS या hardware virtualization के overhead के बिना PHP को सुरक्षित रूप से चलाया जा सकता है
  • Wasmer टीम ने PHP को WebAssembly में पूरी तरह और जितना संभव हो उतना तेज़ चलाने के लिए बहुत समय लगाया है
  • WebAssembly के भीतर opcode caching को सक्षम करके अधिकतम 3 गुना तेज़ गति हासिल की गई

PHP ऐप्स के लिए serverless-like scalability

  • अगर सभी PHP ऐप्स को serverless-like scalability दी जाए, तो इससे बहुत बड़ा मूल्य खुल सकता है
  • PHP ऐप्स को Edge पर चलाकर cloud providers द्वारा लिए जाने वाले खर्च का केवल एक हिस्सा चुकाना पड़ सकता है
  • Wasmer के साथ सभी PHP applications चलाई जा सकती हैं, और इस बात की चिंता नहीं करनी पड़ती कि ऐप sandbox तोड़कर कुछ हानिकारक काम करेगा

सबसे लोकप्रिय PHP frameworks अब Wasmer और Wasmer Edge पर चल सकते हैं

  • WordPress
  • Symfony
  • Laravel
  • सभी PHP templates: https://wasmer.io/templates?language=php
  • नोट: custom file system volumes के लिए Wasmer Edge support पर काम जारी है। SQLite का उपयोग करने वाले deployed apps (जैसे WordPress या Symfony) अभी database changes को केवल memory में सहेजते हैं और उन्हें अभी स्थायी रूप से store नहीं करते

WebAssembly और PHP से अधिकतम लाभ

  • opcode caching सक्षम करके WordPress को बिना किसी बदलाव के 3 गुना तेज़ चलाया जा सकता है (600ms से 200ms तक)

खुद आज़माएँ

  • अगर आप आम तौर पर php -S localhost:8000 . चलाते हैं, तो अब आप इसे Wasmer के ज़रिए पूरी तरह sandbox में चला सकते हैं:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • WordPress को भी आसानी से local में चलाया जा सकता है। WordPress repository को clone करने के बाद root पर wasmer run . --net चलाएँ (Wasmer 4.3.1 आवश्यक)
  • server पर चलने वाला पूरी तरह functional PHP CLI, पूर्ण sandboxing के साथ उपलब्ध है
  • अब /etc/passwd जैसी चीज़ों तक ऐप की पहुँच को लेकर चिंता करने की ज़रूरत नहीं है

तकनीकी उपलब्धि

  • Wasmer में PHP को WebAssembly पर पूरी तरह काम करने लायक बनाना आसान काम नहीं था
  • इस process के दौरान कई समस्याएँ हल की गईं:
    • PHP के भीतर try/catch statements के लिए आवश्यक longjmp/setjmp implementation में एक अस्पष्ट bug मिला, जिसमें stack overwrite हो रहा था और सही तरीके से restore नहीं हो रहा था
    • outgoing HTTP calls को 10 गुना धीमा करने वाले bug को खोजकर ठीक किया गया
    • PHP opcache को default रूप से सक्षम करके PHP समय में अधिकतम 3 गुना सुधार हासिल किया गया
    • file system virtualization layer और networking (IPv6) से जुड़े कई छोटे fixes किए गए
  • अगर आपने पहले WordPress को Wasmer पर चलाने वाली blog post का पालन किया है, तो आपको पता होगा कि WordPress के behavior को बदलने और blocking edge cases को trigger होने से रोकने के लिए बहुत सारे code changes (यानी hacks) करने पड़ते थे
  • नवीनतम Wasmer release में WordPress, Laravel और Symfony बिना किसी code changes के Wasmer पर चलते हैं

प्रदर्शन

  • PHP को सिर्फ सामान्य गति से चलाना पर्याप्त नहीं था; लक्ष्य था कि इसे WebAssembly पर जितना संभव हो उतना तेज़ चलाया जाए
  • PHP में Zend Opcache module है, जो execution speed को काफी बढ़ा देता है
  • Opcode caching module, PHP source से बने bytecode को optimize और cache करता है, जिससे पहले से processed files की AST parsing में लगने वाला समय बचता है
  • Opcode caching ऐप द्वारा संभाले जा सकने वाले requests की संख्या को 3 गुना तक बढ़ा सकता है, इसलिए इसे WebAssembly में सक्षम करना स्वाभाविक लगा
  • लेकिन opcode caching (और Zend module loading) default रूप से disabled था, क्योंकि इसके लिए dlopen, dlsym जैसी चीज़ें चाहिए थीं जो Wasm में उपलब्ध नहीं हैं
  • इसलिए एक अनोखी खोज शुरू की गई: PHP में opcode caching सक्षम करना
    • शोध के बाद static linking का एक नया तरीका मिला, और इस प्रक्रिया में कई चीज़ें ठीक करनी पड़ीं, लेकिन अंततः इसे सफलतापूर्वक चलाया गया
  • Wasm में Opcache के बिना WordPress timing: ~620ms
  • Wasm में Opcache सक्षम होने पर WordPress timing: ~205ms
  • सिर्फ Opcache सक्षम करने से ही 3 गुना performance improvement मिला!
  • यह भी स्पष्ट हुआ कि PHP को native speed के और करीब लाने के लिए अभी और सुधार की गुंजाइश है (इंतज़ार कीजिए!)

और अधिक अवसर खुलते हैं

  • इससे WordPress playground जैसे उन projects के लिए नए अवसर खुलते हैं, जो अभी browser में PHP चलाने के लिए Emscripten पर निर्भर हैं
    • ऐसे projects को ऐसे packages में बदला जा सकता है जो browser और Edge दोनों पर चल सकें
  • cold-start के लिए पूरी तरह नया और क्रांतिकारी approach तैयार किया जा रहा है (Cloudflare & Fly.io, हम आप पर नज़र रखे हुए हैं!)
  • Edge बाज़ार के लिए एक बेहद रोमांचक समय आने वाला है

2 टिप्पणियां

 
tsboard 2024-05-28

व्यक्तिगत रूप से मुझे यह काफ़ी दिलचस्प और प्रभावशाली लगता है कि PHP आज भी इतने सक्रिय रूप से इस्तेमाल हो रही है। हाहा, उसकी बदनाम दौर के बाद अब कहा जाता है कि उसमें काफ़ी बदलाव आ चुके हैं, इसलिए मुझे भी लगता है कि शायद PHP को एक बार फिर आज़माना चाहिए।

 
xguru 2024-05-29

Hacker News हो या GeekNews, PHP सुनते ही नापसंद करने वाले लोग बहुत हैं, haha।
लेकिन मुझे लगता है कि जब तक web जैसी तकनीक पूरी तरह किसी और चीज़ से बदल नहीं जाती, तब तक इसका इस्तेमाल होता रहेगा।
मेरा मानना है कि फोकस language पर नहीं, बल्कि इसे web के लिए उपयुक्त तकनीकों में से एक के रूप में देखने पर होना चाहिए।