יישום אינטרנט מתקדם

ממוזער|סמל יישום אינטרנט מתקדם (PWA)
**יישום אינטרנט מתקדם** (באנגלית: **Progressive Web Application** או **PWA**) הוא סוג של יישום מחשב שעובד כאתר אינטרנט עם חווית אפליקציית Native ללא תלות בדפדפן. יישומי אינטרנט מתקדמים נכתבים באמצעות HTML, JavaScript, CSS, ו-WebAssembly. היישומים פועלים בכל פלטפורמה שבה יש דפדפן שתומך בתקנים הנדרשים, ביניהם מחשבים שולחניים וטלפונים ניידים.

מכיוון שיישום אינטרנט מתקדם הוא סוג של דף אינטרנט הוא לא דורש כלי הפצה נפרד. המפתחים יכולים לפרסם את היישום באופן מקוון, לוודא שהוא עומד בכל הדרישות הבסיסיות, והמשתמשים יוכלו להוריד את היישום למסך הבית שלהם. ניתן גם לפרסם יישומי אינטרנט דרך App Store ו-Google Play.

## היסטוריה
### חלופות קודמות
במעמד השקת האייפון ב-2007, הכריז סטיב ג'ובס שיישומי אינטרנט (שפותחו באמצעות HTML 5 בארכיטקטורת AJAX) יהיו הפורמט הסטנדרטי לפיתוח אפליקציות באייפון. לא נדרשה ערכת פיתוח תוכנה (SDK), והאפליקציות שולבו באייפון באמצעות הדפדפן ספארי. באוקטובר 2007 הודיע סטיב ג'ובס כי בכוונת החברה להשיק SDK במועד מאוחר יותר, מה שהקל על אפל לעבור להשתמש ב-App Store, כדי להקשות על פריצת מערכת ההפעלה ולאור דרישות המפתחים.

החל מ-2010 ואילך, דפי אינטרנט דינמיים אפשרו ליצור יישומי אינטרנט אינטראקטיביים. עיצוב אתרים רספונסיבי והגמישות בגודל המסך הפכו את הפיתוח לנגיש יותר. שיפורים בשפות כמו HTML וג'אווה סקריפט הביאו יכולות חדשות ליישומי האינטרנט והפכו את חוויית השימוש בהם לדומה יותר לאתר.

בשנת 2013 הוציאה מוזילה את Firefox OS, מערכת הפעלה בקוד פתוח להפעלת יישומי אינטרנט כיישומי ברירת מחדל בטלפונים ניידים. הפיתוח של המערכת הסתיים ב-2016, וב-2017 היא נזנחה לחלוטין. עם זאת, חלקים קטנים מהמערכת משמשים ב-KaiOS.

### הצגת הכלי
ב-2015, המעצב פרנסיס ברימן ומהנדס גוגל כרום אלכס ראסל המציאו את הביטוי "יישום אינטרנט מתקדם" כדי לתאר יישומים שעושים שימוש בדפדפנים כדי לאפשר למשתמשים לשדרג את יישומי האינטרנט שלהם ליישומים מתקדמים במסגרת מערכת ההפעלה. לאחר מכן, גוגל החלה לשים דגש על קידום PWA באנדרואיד. דפדפן פיירפוקס החל לתמוך ביישומים אלה ב-2016, ומיקרוסופט אדג' וספארי של אפל החלו לתמוך ב-2018.

בדצמבר 2020, דפדפן פיירפוקס בגרסת הדסקטופ זנח את התמיכה ב-PWA.

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

## מאפיינים
יישומי אינטרנט מתקדמים מיועדים לעבוד על כל דפדפן שתומך בתקן. בדומה לפתרונות חוצי–פלטפורמות אחרים, המטרה היא לאפשר למפתחים לפתח יישומים בקלות רבה יותר לעומת אפליקציות נייטיב.

יישומי אינטרנט מסוימים בארכיטקטורה המכונית App Shell Model. במודל זה, מתאפשר ל-PWA לפעול גם ללא חיבור לאינטרנט. עובדה זו יכולה לשפר את זמן הטעינה, על ידי טעינת מסגרת ראשונית ולאחר מכן להוריד תוכן נוסף בצורה דינמית.

## לעומת אפליקציות Native
בשנת 2017 השיקה טוויטר את טוויטר לייט, גרסת PWA של אפליקציית הנייטיב באנדרואיד וב-iOS. לפי טוויטר, הגרסה הקלה צרכה רק 1%–3% מגודל האפליקציה הרגילה. סטארבקס גם היא מספקת אפליקציית PWA, שקטנה ב-99.84% מהמקבילה שלה ל-iOS.

ביקורת שפורסמה בפורבס בשנת 2018 מצאה שמשתמשים ב-PWA של פינטרסט השתמשו בו 40% יותר לעומת המשתמשים באתר הרגיל לנייד. בנוסף, שיעורי ההכנסות ממודעות גדלו ב-44% והמעורבות עלתה ב-60%.

## טכנולוגיות
ישנן טכנולוגיות רבות המשמשות ליצירת יישומי אינטרנט מתקדמים. יישום נחשב ל-PWA אם הוא עומד בקריטריונים שונים ויכול לפעול במצב לא מקוון, וכן במידה וניתן להוסיף אותו לדף הבית של המכשיר.

### WebAssembly
WebAssembly מאפשרת הרצת קוד מראש בדפדפן האינטרנט במהירות דומה למהירות המקורית. ספריות שכתובות בשפות כמו שפת C יכולות להתווסף ליישומי אינטרנט.

### אחסון נתונים
Web Storage הוא API סטנדרטי של W3C המאפשר אחסון ערכי מפתח בדפדפנים מודרניים. ה-API מורכב משני אובייקטים: sessionStorage שמאפשר אחסון שנמחק עם סגירת הדפדפן, ו-localStorage שנשמר לאורך ההפעלות.

#### Indexed Database API
Indexed Database API הוא מסד נתונים בסיסי של W3C שזמין בכל הדפדפנים בעולם. הוא מאפשר אחסון של אובייקטי JSON וכל המבנים שניתן להציג כמחרוזת.

## קישורים חיצוניים
*Web Applications Working Group

## הערות שוליים

קטגוריה:יישומי רשת