כיצד לבצע אופטימיזציה של יישום האינטרנט של PHP Laravel לביצועים גבוהים?

Laravel זה הרבה דברים. אבל מהיר הוא לא אחד מהם. בואו ללמוד כמה טריקים מהסחר בכדי לגרום לו להתקדם מהר יותר!


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

כך או כך, אין להכחיש שלארוול החיה מחדש את המערכת האקולוגית של PHP (אני, ללא ספק, הייתי עוזב את עולם ה- PHP מזמן אם לרוול לא היה שם).

קטע של שבח עצמי (מוצדק במקצת) מלארוול

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

לגבי מה שנראה שגיאת קומפילציה באחת התצוגות, יש 18 קריאות פונקציה להתחקות. אני באופן אישי נתקלתי ב -40 ויכול להיות שיש יותר אם אתה משתמש בספריות ותוספים אחרים.

נקודה היא, שכברירת מחדל שכבות זו על שכבות קוד, גורמות לאיבר של Laravel.

כמה איטי לראוול?

בכנות, אי אפשר לענות על שאלה זו מכמה סיבות.

ראשון, אין תקן מקובל, אובייקטיבי, הגיוני למדידת המהירות של אפליקציות רשת. מהיר יותר או איטי יותר לעומת מה? באילו תנאים?

שני, אפליקציית אינטרנט תלויה בכל כך הרבה דברים (בסיס נתונים, מערכת קבצים, רשת, זיכרון מטמון וכו ‘), שזה פשוט טיפשי לדבר על מהירות. אפליקציית אינטרנט מהירה מאוד עם מאגר נתונים איטי מאוד היא אפליקציית אינטרנט איטית מאוד. ��

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

עוברים על זה GitHub מכובד למדי מקור, כך משווים מסגרות PHP בהשוואה:

יתכן שלא תבחין אפילו בלארוול כאן (גם אם תמצמצץ בחוזקה ממש) אלא אם כן תטיל את התיק שלך ממש עד קצה הזנב. כן, חברים יקרים, לרוול מגיע אחרון! כעת, כמובן, רוב “המסגרות” הללו אינן מעשיות או אפילו מועילות, אך היא אכן אומרת לנו עד כמה Laravel איטית בהשוואה למסגרות פופולריות אחרות..

בדרך כלל, “איטיות” זו אינה מופיעה ביישומים מכיוון שאפליקציות האינטרנט היומיומיות שלנו כמעט ולא זוכות למספרים גבוהים. אבל ברגע שהם עושים זאת (נניח, עד 200-500 במקביל), השרתים מתחילים להיחנק ולמות. זה הזמן בו אפילו זריקת חומרה נוספת על הבעיה לא חותכת אותו, וחשבונות תשתית מטפסים כל כך מהר שהאידיאלים הגבוהים שלך למחשוב ענן מתרסקים.

אבל היי, תתעודד! מאמר זה אינו עוסק במה שלא ניתן לעשות, אלא על מה שניתן לעשות. ��

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

ארבעה סוגים של אופטימיזציות

לדעתי ניתן לבצע אופטימיזציה בארבע רמות שונות (כשמדובר ביישומי PHP, כלומר):

  1. ברמת השפה: המשמעות היא שאתה משתמש בגרסה מהירה יותר של השפה ונמנע מתכונות / סגנונות קידוד ספציפיים בשפה שמאיימת את הקוד שלך.
  2. רמת מסגרת: אלה הדברים שנעסוק במאמר זה.
  3. רמת תשתית: כוונון מנהל התהליכים PHP, שרת האינטרנט, מסד הנתונים וכו ‘.
  4. רמת חומרה: עוברים לספק אירוח חומרה טוב יותר, מהיר וחזק יותר.

לכל סוגי האופטימיזציות הללו יש את מקומם (לדוגמה, אופטימיזציה של php-fpm היא די קריטית ועוצמתית). אולם המוקד של מאמר זה יהיה אופטימיזציות בלבד מסוג 2: אלה הקשורות למסגרת.

אגב, אין שום רציונל מאחורי המספור וזה לא תקן מקובל. פשוט השלמתי את אלה. אנא אל תצטט אותי אף פעם ואמר “אנו זקוקים לאופטימיזציה מסוג 3 בשרת שלנו”, או שמוביל הצוות שלך יהרוג אותך, מצא אותי ואז גם יהרוג אותי. ��

ועכשיו, סוף סוף, אנו מגיעים לארץ המובטחת.

היה מודע לשאילתות מסד נתונים ב- n + 1

הבעיה בשאילתת n + 1 היא נפוצה בעת השימוש ב- ORM. לרארוול יש את ה- ORM החזק שלו בשם Eloquent, שהוא כל כך יפה, כל כך נוח, שלעתים קרובות אנו שוכחים להסתכל על המתרחש.

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

ב- Laravel, אנו עשויים לדמיין פונקציית בקר שעושה את העבודה כך:

בקר הזמנות בכיתה מרחיב את הבקר
{
// …

פונקציות ציבוריות getAllByCustomers (בקש $ בקשה, מערך $ ids) {
לקוחות $ = לקוח :: findMany ($ ids);
הזמנות $ = איסוף (); // קולקציה חדשה

foreach ($ לקוחות כלקוח $) {
$ הזמנות = $ הזמנות->מיזוג (לקוח $->הזמנות);
}

תצוגת חזרה (‘admin.reports.orders’, [‘orders’ => $ הזמנות]);
}
}

מתוק! וחשוב מכך, אלגנטי, יפה. ����

לרוע המזל, זו דרך הרת אסון לכתוב קוד ב- Laravel.

הנה למה.

כאשר אנו מבקשים מ- ORM לחפש את הלקוחות הנתונים, נוצרת שאילתת SQL כזו:

בחר * מלקוחות איפה הם מזוהים (22, 45, 34, …);

שזה בדיוק כצפוי. כתוצאה מכך, כל השורות שהוחזרו מאוחסנות בלקוחות $ אוסף בתוך פונקציית הבקר.

כעת אנו עוברים על כל לקוח אחד אחד ומקבלים את ההזמנות שלהם. פעולה זו מבצעת את השאילתה הבאה . . .

בחר * מתוך הזמנות איפה customer_id = 22;

. . . פעמים רבות ככל שיש לקוחות.

במילים אחרות, אם עלינו לקבל את נתוני ההזמנה עבור 1000 לקוחות, המספר הכולל של שאילתות בסיסי נתונים שבוצעו יהיה 1 (לאחזור כל נתוני הלקוחות) + 1000 (לאחזור נתוני הזמנה עבור כל לקוח) = 1001. זה מכאן מקור השם n + 1.

האם נוכל לעשות טוב יותר? בהחלט! על ידי שימוש במה שמכונה טעינה להוט, אנו יכולים לאלץ את ה- ORM לבצע JOIN ולהחזיר את כל הנתונים הדרושים בשאילתה יחידה! ככה:

$ הזמנות = לקוח :: findMany ($ ids)->עם (‘הזמנות’)->לקבל();

מבנה הנתונים המתקבל הוא מקונן, בטוח, אך ניתן לחלץ בקלות את נתוני ההזמנה. השאילתה היחידה שהתקבלה, במקרה זה, היא דבר כזה:

בחר * מלקוחות פנימה הצטרף להזמנות על clients.id = orders.customer_id איפה לקוחות.יד IN (22, 45,..);

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

שמור את התצורה!

אחת הסיבות לגמישות של Laravel היא טונות של קבצי תצורה שהם חלק מהמסגרת. רוצה לשנות את האופן שבו / מאוחסנים התמונות?

ובכן, פשוט שנה את קובץ config / filesystems.php (לפחות נכון לכתיבה). רוצה לעבוד עם נהגים מרובים בתורים? אל תהסס לתאר אותם ב- config / queue.php. פשוט ספרתי ומצאתי שיש 13 קבצי תצורה להיבטים שונים של המסגרת, מה שמבטיח שלא תתאכזב לא משנה מה תרצה לשנות.

בהתחשב באופי ה- PHP, בכל פעם שנכנסת בקשת אינטרנט חדשה, Laravel מתעורר, מאתחל הכל ומנתח את כל קבצי התצורה האלה כדי להבין איך לעשות דברים אחרת הפעם. אלא שזה טיפשי אם שום דבר לא השתנה בימים האחרונים! בנייה מחדש של התצורה בכל בקשה היא בזבוז שניתן (למעשה, יש להימנע ממנו) והדרך החוצה היא פקודה פשוטה ש Laravel מציעה:

אומן php config: מטמון

מה שכן, זה לשלב את כל קבצי התצורה הזמינים לקובץ אחד והמטמון נמצא איפשהו לאחזור מהיר. בפעם הבאה שיש בקשת רשת, Laravel פשוט תקרא את הקובץ היחיד הזה ותתחיל.

עם זאת, מטמון תצורה הוא פעולה עדינה במיוחד שיכולה להתפוצץ בפניכם. הגאצ’ה הגדולה ביותר היא שברגע שתוציא את הפקודה הזו, פונקציית env () מתקשרת מכל מקום למעט קבצי ה- config יחזרו null!

זה הגיוני כשחושבים על זה. אם אתה משתמש במטמון תצורה, אתה אומר למסגרת, “אתה יודע מה, אני חושב שהגדרתי דברים יפה ואני בטוח ב 100% שאני לא רוצה שהם ישתנו.” במילים אחרות, אתה מצפה שהסביבה תישאר סטטית, ובשביל זה מיועד קובצי ה- env.

עם זאת, הנה כמה כללי חיפוי ברזל, קדושים ובלתי ניתנים לשבירה של זיכרון מטמון:

  1. עשה זאת רק על מערכת ייצור.
  2. עשה זאת רק אם אתה באמת, ממש בטוח שאתה רוצה להקפיא את התצורה.
  3. במקרה שמשהו ישתבש, בטל את ההגדרה במטמון של אומן PHP: ברור
  4. התפלל כי הנזק שנגרם לעסק לא היה משמעותי!

צמצם את השירותים שאושרו אוטומטית

כדי לעזור, Laravel טוען המון שירותים כשהיא מתעוררת. אלה זמינים בקובץ config / app.php כחלק ממפתח מערך ‘ספקים’. בואו נראה מה יש לי במקרה שלי:

/ *
|————————————————————————–
| נותני שירות עם טעינה אוטומטית
|————————————————————————–
|
| ספקי השירות הרשומים כאן יוטענו אוטומטית על
| בקשה לבקשתך. אל תהסס להוסיף שירותים משלך
| מערך זה כדי להעניק פונקציונליות מורחבת ליישומים שלך.
|
* /

‘ספקים’ => [

/ *
* ספקי שירותי מסגרת Laravel…
* /
להאיר \ Auth \ AuthServiceProvider :: class,
להאיר \ שידור \ BroadcastServiceProvider :: בכיתה,
להאיר \ אוטובוס \ BusServiceProvider :: class,
להאיר \ Cache \ CacheServiceProvider :: class,
להאיר \ קרן \ ספקים \ ConsoleSupportServiceProvider :: class,
להאיר \ Cookie \ CookieServiceProvider :: class,
להאיר \ מסד נתונים \ DatabaseServiceProvider :: class,
להאיר \ Encryption \ EncryptionServiceProvider :: class,
להאיר \ Filesystem \ FilesystemServiceProvider :: class,
להאיר \ קרן \ ספקים \ FoundationServiceProvider :: כיתה,
להאיר \ Hashing \ HashServiceProvider :: class,
להאיר \ Mail \ MailServiceProvider :: class,
להאיר \ Notifications \ NotificationServiceProvider :: class,
להאיר \ Pagination \ PaginationServiceProvider :: class,
להאיר \ Pipeline \ PipelineServiceProvider :: class,
להאיר \ תור \ QueueServiceProvider :: class,
להאיר \ Redis \ RedisServiceProvider :: class,
להאיר \ Auth \ סיסמאות \ PasswordResetServiceProvider :: class,
להאיר \ Session \ SessionServiceProvider :: class,
להאיר \ Translation \ TranslationServiceProvider :: class,
להאיר \ Validation \ ValidationServiceProvider :: class,
להאיר \ View \ ViewServiceProvider :: class,

/ *
* ספקי שירות חבילות…
* /

/ *
* ספקי שירות יישומים…
* /
אפליקציות \ ספקים \ AppServiceProvider :: class,
אפליקציות \ ספקים \ AuthServiceProvider :: class,
// class / Providers \ BroadcastServiceProvider :: class,
אפליקציות \ ספקים \ EventServiceProvider :: כיתה,
אפליקציות \ ספקים \ RouteServiceProvider :: class,

],

שוב, ספרתי ויש 27 שירותים הרשומים! עכשיו, יתכן שתזדקק לכולם, אבל זה לא סביר.

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

התבונן בקשה ארוכה וקשה ביישום שלך. האם זה זקוק לכל ספקי השירותים האלה? אבל למען השם, אנא אל תגיב בעיוורון לשירותים אלה ולחץ לייצור! הרץ את כל הבדיקות, בדוק את הדברים ידנית במכונות dev ומערכות הבמה, והיה מאוד פרנואידי לפני שאתה לוחץ על ההדק. ��

היה חכם עם ערימות תווך

כאשר אתה זקוק לעיבוד בהתאמה אישית של בקשת האינטרנט הנכנסת, יצירת תוכנת ביניים חדשה היא התשובה. עכשיו, זה מפתה לפתוח את האפליקציה / Http / Kernel.php ולהדביק את התווך ברשת או בערימת ה- api; בדרך זו הוא הופך לזמין בכל האפליקציה ואם הוא לא עושה משהו פולשני (כמו רישום או הודעה למשל).

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

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

הימנע מ- ORM (לעיתים)

אמנם אלוקנט הופך היבטים רבים של אינטראקציה עם DB למהנה, אך זה מופיע במחיר המהירות. בהיותו מיפוי, ה- ORM לא רק צריך להביא רשומות ממסד הנתונים, אלא גם מייצר את אובייקטים המודל ומייבש (מלא אותם) אותם בנתוני עמודות.

אז אם אתם מבצעים משתמשים פשוטים של $ = User :: all () ויש, נניח, 10,000 משתמשים, המסגרת תביא 10,000 שורות מהמאגר ותבצע באופן פנימי 10,000 משתמשים חדשים () ותמלא את המאפיינים שלהם בנתונים הרלוונטיים. . מדובר בכמויות אדירות של עבודה שמתבצעות מאחורי הקלעים, ואם מסד הנתונים הוא המקום בו היישום שלכם הופך לצוואר בקבוק, עקיפת ה- ORM היא רעיון טוב לפעמים.

הדבר נכון במיוחד לשאילתות SQL מורכבות, בהן יהיה עליכם לקפוץ הרבה חישוקים ולכתוב סגירות לאחר סגירות ועדיין בסופו של דבר עם שאילתה יעילה. במקרים כאלה עדיף לבצע DB :: raw () ולכתוב את השאילתה ביד.

עובר ליד זה לימוד ביצועים, אפילו עבור תוספות פשוטות אלוקנט הוא איטי בהרבה ככל שמספר הרשומות עולה:

השתמש במטמון ככל האפשר

אחד הסודות השמורים ביותר באופטימיזציה של יישומי אינטרנט הוא מטמון.

עבור הבלתי-פתחה, מטמון פירושו לחשב ולאחסן תוצאות יקרות (יקר מבחינת השימוש במעבד וזיכרון), ופשוט להחזיר אותם כשחוזרים על אותה שאילתה..

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

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

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

העדיפו זיכרון מטמון בזיכרון

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

באופן אידיאלי, ברצונך להשתמש בזיכרון זיכרון (המתגורר ב- RAM כולו) במטמון כמו Redis, Memcached, MongoDB וכו ‘, כך שמתחת לעומסים גדולים יותר, מטמון משמש שימוש חיוני ולא להפוך לצוואר הבקבוק עצמו.

כעת, אתם עשויים לחשוב שלשימוש בדיסק SSD זהה כמעט לשימוש במקל זיכרון RAM, אך הוא אפילו לא קרוב. אפילו לא פורמלי מדדים הראה ש- RAM עולה על 10-20 פעמים ב- SSD בכל מה שקשור למהירות.

המערכת האהובה עלי בכל הקשור למטמון היא Redis. זה כן במהירות מגוחכת (100,000 פעולות קריאה בשנייה נפוצות), ועבור מערכות מטמון גדולות מאוד, ניתן להתפתח ל- אשכול בקלות.

שמור את המסלולים

ממש כמו תצורת היישום, המסלולים לא משתנים הרבה לאורך זמן והם מועמדים אידיאליים למטמון. זה נכון במיוחד אם אינך יכול לעמוד בקבצים גדולים כמוני ובסופו של דבר מפצל את ה- web.php וה api.php שלך על מספר קבצים. פקודה אחת של Laravel אורזת את כל המסלולים הזמינים ושומרת עליהם שימושים לגישה עתידית:

מסלול אומן php: מטמון

וכשאתה בסופו של דבר להוסיף או לשנות מסלולים, פשוט עשה:

מסלול אומן php: ברור

מיטוב תמונה ו- CDN

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

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

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

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

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

שרת {

# קובץ קטום

# הגדרות דחיסת gzip
gzip על;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied כל;
gzip_vary ב-;

# בקרת מטמון דפדפן
מיקום ~ * \. (ico | css | js | gif | jpeg | jpg | png | woff | ttf | otf | svg | woff2 | eot) $ {
פג תוקף 1d;
access_log כבוי;
add_header פרגמה ציבורית;
בקרת מטמון "ציבור, גיל מקסימום = 86400";
}
}

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

מיטוב אוטומטי

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

מלחין להתקין – אופטימיזציה-אוטולאדר –no-dev

להתיידד עם תורים

תורים כיצד אתה מעבד דברים כשיש רבים מהם וכל אחד מהם לוקח כמה אלפיות השנייה להשלים. דוגמה טובה היא שליחת אימיילים – מקרה נפוץ לשימוש ביישומי אינטרנט הוא לכבות כמה דוא”ל התראות כאשר משתמש מבצע כמה פעולות..

לדוגמה, במוצר שהושק לאחרונה, ייתכן שתרצה להנהיג את החברה (כ-6-7 כתובות דוא”ל) בכל פעם שמישהו מבצע הזמנה מעל ערך מסוים. בהנחה ששער הדואר האלקטרוני שלך יכול לענות לבקשת ה- SMTP שלך בתוך 500 מ ‘, אנו מדברים על המתנה של 3-4 שניות טובות למשתמש לפני אישור ההזמנה ייכנס. חתיכה ממש גרועה של UX, אני בטוחה שת מסכים.

התרופה היא לאחסן עבודות עם כניסתם, להגיד למשתמש שהכל התנהל כשורה ולעבד אותם (כמה שניות) אחר כך. אם יש שגיאה, ניתן לנסות שוב את העבודות בתור מספר פעמים לפני שהצהירו עליהן כישלונות.

קרדיטים: Microsoft.com

בזמן שמערכת תורים מסבכת מעט את ההתקנה (ומוסיפה מעט תקורה לניטור), הדבר חיוני ביישום אינטרנט מודרני..

מיטוב נכסים (Laravel Mix)

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

Mix הוא עטיפה קלה (ומענגת, בכל הכנות!) סביב Webpack הדואגת לכל קובצי ה- CSS, SASS, JS וכו ‘, לייצור שלך. קובץ .mix.js טיפוסי יכול להיות קטן כמו זה ועדיין עושה פלאים:

const mix = דורש (‘laravel-mix’);

mix.js (‘משאבים / js / app.js’, ‘ציבור / js’)
.sass (‘משאבים / sass / app.scss’, ‘public / css’);

זה דואג באופן אוטומטי לייבוא, לצמצום, לאופטימיזציה ולכל השיבנג כשאתה מוכן לייצור ולהפעיל את הייצור של npm. Mix דואג לא רק לקבצי JS ו- CSS מסורתיים, אלא גם לרכיבי Vue ו- React שעשויים להיות לכם בזרימת העבודה של היישום..

עוד מידע כאן!

סיכום

מיטוב ביצועים הוא יותר אמנות מאשר מדע – לדעת כיצד וכמה לעשות חשוב מה לעשות. עם זאת, אין סוף לכמה ומה כל מה שאתה יכול לייעל ביישום Laravel.

אבל מה שתעשו, הייתי רוצה להשאיר לכם עצות פרידה – אופטימיזציה צריכה להיעשות כשיש סיבה מוצקה, ולא בגלל שזה נשמע טוב או בגלל שאתם פרנואידים לגבי ביצועי האפליקציה עבור 100,000 משתמשים יותר ממה שבמציאות. יש רק 10.

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

וכדי ש- newbiew יהפוך למאסטר ב- Laravel, בדוק זאת קורס מקוון.

מי ייתן והיישומים שלך יפעלו הרבה יותר מהר! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map