როგორ ოპტიმიზაცია PHP Laravel ვებ პროგრამა მაღალი ეფექტურობისთვის?

ლარაველი ბევრი რამ არის. მაგრამ სწრაფი არ არის არც ერთი მათგანი. მოდით ვისწავლოთ ვაჭრობის რამდენიმე ხრიკი, რომ ეს უფრო სწრაფად მოხდეს!


PHP არცერთ დეველოპერს ხელი არ მიუწვდება ლარაველი ამ დღეებში. ისინი არიან ან უმცროსი ან საშუალო დონის დეველოპერები, რომლებსაც უყვართ სწრაფი განვითარება, რომელსაც ლარაველი გთავაზობთ, ან ისინი არიან მაღალი დეველოპერი, რომლებიც იძულებულნი არიან ისწავლონ ლარველი, საბაზრო ზეწოლის გამო.

ასეა თუ ისე, არ არსებობს უარყოფა, რომ ლარველმა აღადგინა PHP ეკოსისტემა (მე, რა თქმა უნდა, დავტოვებდი PHP სამყაროს დიდი ხნის წინ, თუ Laravel არ იქნებოდა).

(გარკვეულწილად გამართლებული) თვით-ქებათა ლაპარაკი ლარაველისგან

ამასთან, რადგან Laravel იხვეწება უკან, რათა ყველაფერი უფრო ადვილი გახდეს თქვენთვის, ეს ნიშნავს, რომ ამის გაკეთება ტონებსა და ტონებში მუშაობს, რომ დარწმუნდეთ, რომ კომფორტული ცხოვრება გაქვთ როგორც დეველოპერი. Laravel- ის ყველა “ჯადოსნური” თვისება, რომელიც, როგორც ჩანს, მუშაობს, აქვს ფენების კოდირების ფენებს, რომლებიც საჭიროა თვისების ამოღებისას. თუნდაც უბრალო გამონაკლისის კვალი, თუ რამდენად ღრმაა კურდღლის ხვრელი (შეამჩნიეთ, საიდან იწყება შეცდომა, ყველა მთავარ ბირთვისკენ):

იმის გამო, რომ ერთი შეხედულებისამებრ შედგენილია შეცდომა, ჩანს კვალიფიკაციის 18 ფუნქცია. მე პირადად მე შევხვდი 40 წელს, ხოლო სხვა ბიბლიოთეკებსა და მოდულების გამოყენებას მარტივად შეიძლება.

აღნიშნავენ, რომ ამ ფენებს, კოდირების ფენებზე დაყრდნობით, ლარაველი შეანელებს.

რამდენად ნელია ლარაველი?

პატიოსნად, ამ კითხვაზე პასუხის გაცემა შეუძლებელია რამდენიმე მიზეზის გამო.

Პირველი, არ არსებობს მიღებული, ობიექტური, საღად მოაზროვნე სტანდარტი ვებ პროგრამების სიჩქარის გასაზომად. უფრო სწრაფი ან ნელი შედარებით? რა პირობებში?

მეორე, ვებ აპლიკაცია იმდენი რამზეა დამოკიდებული (მონაცემთა ბაზა, ფაილების სისტემა, ქსელი, ქეში და ა.შ.), რომ სისულელეზე საუბარი უბრალო სისულელეა. ძალიან სწრაფი ვებ აპლიკაცია ძალიან ნელი მონაცემთა ბაზით არის ძალიან ნელი ვებ – პროგრამა. ��

მაგრამ ეს გაურკვევლობა სწორედ ისაა, რის გამოც პოპულარობა პოპულარულია. მიუხედავად იმისა, რომ ისინი არაფერს ნიშნავს (იხ ეს და ეს), ისინი უზრუნველყოფენ რამდენიმე მითითების ჩარჩოს და დაგვეხმარებიან გაძარცვაში. ამიტომ, რამდენიმე მარილი მარილის მზადყოფნით, მოდით მივიღოთ არასწორი, უხეში იდეა სიჩქარის PHP ჩარჩოებში.

მიმდინარეობს ამ საკმაოდ საპატიო GitHub- ით წყარო, აქ მოცემულია PHP ჩარჩოების შედარება, როდესაც შედარებულია:

თქვენ შეიძლება ვერც კი შეამჩნიოთ Laravel აქ (მაშინაც კი, თუ თქვენ ნამდვილად არ სცემთ რთულს), თუ არ ჩასვამთ თქვენს საქმეს კუდის ბოლომდე. დიახ, ძვირფასო მეგობრებო, ლარაველი მოდის ბოლოს! ახლა, რა თქმა უნდა, ამ „ჩარჩოების“ უმეტესი ნაწილი არცთუ ისე პრაქტიკული და არც კი სასარგებლოა, მაგრამ ის გვეუბნება, თუ რამდენად დელიკატურია ლარაველი, როდესაც შედარებით სხვა პოპულარულებთან..

ჩვეულებრივ, ეს „ნელი“ არ მოქმედებს პროგრამებში, რადგან ჩვენი ყოველდღიური ვებ – პროგრამები იშვიათად ხვდება მაღალ ციფრებს. როდესაც ისინი გააკეთებენ (ვთქვათ, 200-500 კონკურენციის პირობებში), სერვერები იწყებენ ხოლმე და კვდებიან. ეს არის დრო, როდესაც პრობლემის მეტი ტექნიკის გადაყლაპვაც არ ამცირებს მას, და ინფრასტრუქტურული გადასახადები ისე სწრაფად ხვდება, რომ ღრუბლოვანი კომპაქტური თქვენი მაღალი იდეალები ჩამოვარდება.

მაგრამ ჰეი, მხიარულად! ამ სტატიაში არ არის საუბარი იმაზე, თუ რა არ შეიძლება გაკეთდეს, მაგრამ რა შეიძლება გაკეთდეს. ��

კარგი ამბავი ის არის, რომ თქვენ შეგიძლიათ ბევრი რამ გააკეთოთ თქვენი Laravel აპი სწრაფად. რამდენჯერმე სწრაფად. დიახ, არა. თქვენ შეგიძლიათ გააკეთოთ იგივე კოდის ბაზა ბალისტიკური და დაზოგოთ რამდენიმე ასეული დოლარი ინფრასტრუქტურაზე / ჰოსტინგის გადასახადებზე ყოველთვიურად. Როგორ? მოდით, მივიღოთ იგი.

ოთხი ტიპის ოპტიმიზაცია

ჩემი აზრით, ოპტიმიზაცია შეიძლება გაკეთდეს ოთხ განსხვავებულ დონეზე (რაც შეეხება PHP პროგრამებს, ეს არის):

  1. ენის დონე: ეს ნიშნავს, რომ თქვენ იყენებთ ენის უფრო სწრაფ ვერსიას და თავიდან აიცილებთ კოდირების სპეციფიკურ მახასიათებლებს / სტილს, რაც თქვენს კოდს შენელდება.
  2. ჩარჩო დონეზე: ეს არის ის, რაც ამ სტატიაში გაშუქდება.
  3. ინფრასტრუქტურის დონე: თქვენი PHP პროცესის მენეჯერის, ვებ სერვერის, მონაცემთა ბაზის და ა.შ..
  4. ტექნიკის დონე: უკეთესი, სწრაფი, უფრო ძლიერი ტექნიკის ჰოსტინგის პროვაიდერთან გადასვლა.

ყველა ამ ტიპის ოპტიმიზაციას აქვს თავისი ადგილი (მაგალითად, php-fpm ოპტიმიზაცია საკმაოდ კრიტიკული და ძლიერია). მაგრამ ამ სტატიის ყურადღების ცენტრში იქნება მხოლოდ მე -2 ტიპის ოპტიმიზაცია: ჩარჩოებთან დაკავშირებული.

სხვათა შორის, ნუმერაციის საფუძველი არ არსებობს, და ეს არ არის მიღებული სტანდარტი. მე მხოლოდ ეს შევადგინე. გთხოვთ, ნუ გამიწერთ ერთხელ და ნუ იტყვით: ”ჩვენ გვჭირდება ტიპი 3 – ის ოპტიმიზაცია ჩვენს სერვერზე.” ან თქვენი გუნდის ხელმძღვანელი მოგკლავს, იპოვნებს მე და შემდეგ ასევე მომკლავს. ��

ახლა კი, საბოლოოდ, ჩვენ მივადექით დაპირებულ მიწას.

გაითვალისწინეთ n + 1 მონაცემთა ბაზის მოთხოვნები

N + 1 შეკითხვის პრობლემა ხშირია, როდესაც ORM– ების გამოყენება ხდება. Laravel- ს აქვს თავისი მძლავრი ORM სახელწოდებით Eloquent, რომელიც ისეთი ლამაზი, ისეთი მოსახერხებელია, რომ ხშირად გვავიწყდება შევხედოთ რა ხდება.

განვიხილოთ ძალიან გავრცელებული სცენარი: მომხმარებლის მიერ მოცემულ ჩამონათვალში განთავსებული ყველა შეკვეთის ჩამონათვალის ჩვენება. ეს საკმაოდ ხშირია ელექტრონული კომერციის სისტემებში და ზოგადად ნებისმიერი საანგარიშო ინტერფეისები, სადაც ჩვენ გვჭირდება ზოგიერთ პირთან დაკავშირებული ყველა პირის ჩვენება..

Laravel- ში, ჩვენ შეიძლება წარმოვიდგინოთ მაკონტროლებელი ფუნქცია, რომელიც ასრულებს საქმეს ასე:

class OrdersController ვრცელდება Controller
{
// …

საჯარო ფუნქცია getAllByCustomers (მოითხოვეთ $ მოთხოვნა, მასივი $ ids) {
$ მომხმარებლები = მომხმარებელი :: findMany ($ ids);
$ შეკვეთები = შეგროვება (); // ახალი კოლექცია

foreach ($ მომხმარებლები, როგორც $ მომხმარებელი) {
$ შეკვეთები = $ შეკვეთები->შერწყმა ($ მომხმარებელი->შეკვეთები);
}

დაბრუნების ხედი (‘admin.reports.order’, [‘ბრძანებები’ =)> $ შეკვეთები]);
}
}

Ტკბილი! და რაც მთავარია, ელეგანტური, ლამაზი. ����

სამწუხაროდ, ეს არის კატასტროფული მეთოდი კოდების დასაწერად Laravel- ში.

აი რატომ.

როდესაც ჩვენ ORM- ს ვთხოვთ, რომ მოძებნოთ მოცემული მომხმარებლები, მსგავსი SQL შეკითხვა წარმოიქმნება:

SELECT * მომხმარებლებისგან, სადაც არ არის ID (22, 45, 34,…);

რაც ზუსტად ისეა მოსალოდნელი. შედეგად, ყველა დაბრუნებული რიგები ინახება კოლექციაში $ მომხმარებლებს კონტროლერის ფუნქციის შიგნით.

ახლა ჩვენ ერთმანეთზე გადავკრავთ თითოეულ მომხმარებელს და ვიღებთ მათ შეკვეთებს. ეს ასრულებს შემდეგ შეკითხვას . . .

SELECT * ბრძანებებიდან რომელი მომხმარებელი_იდ = 22;

. . . რამდენჯერმე არსებობს მომხმარებელი.

სხვა სიტყვებით რომ ვთქვათ, თუ საჭიროა შეკვეთის მონაცემების მიღება 1000 მომხმარებლისთვის, შესრულებული მონაცემთა ბაზის მოთხოვნების რაოდენობა იქნება 1 (ყველა მომხმარებლის მონაცემების მოსაძებნად) + 1000 (თითოეული მომხმარებლისთვის შეკვეთის მონაცემების მისაღებად) = 1001. ეს საიდან მოდის სახელწოდება n + 1.

შეგვიძლია უკეთესობა გავაკეთოთ? Რა თქმა უნდა! გამოყენებით, რაც ცნობილია როგორც დატვირთვის დატვირთვა, ჩვენ შეგვიძლია აიძულოთ ORM შეასრულოს JOIN და დაუბრუნოს ყველა საჭირო მონაცემი ერთ შეკითხვაში! Ამგვარად:

$ შეკვეთები = მომხმარებელი :: findMany ($ ids)->ერთად (“ბრძანებები”)->მიიღეთ ();

შედეგად მიღებული მონაცემების სტრუქტურა მყარად არის განლაგებული, მაგრამ შეკვეთის მონაცემები მარტივად შეიძლება იქნას მიღებული. შედეგად მიღებული ერთი შეკითხვა, ამ შემთხვევაში, მსგავსია:

SELECT * მომხმარებლებისგან შეხვიდეთ შეკვეთები მომხმარებლებზე.id = შეკვეთები.customer_id სად არის მომხმარებლები. IN (22, 45, ….);

რასაკვირველია, ერთი შეკითხვის გაკეთება უკეთესია, ვიდრე ათასი დამატებითი მოთხოვნა. წარმოიდგინეთ, რა მოხდებოდა, თუ 10,000 მომხმარებელი დამუშავდებოდა! ან ღმერთმა ქნას, თუ ჩვენც გვინდოდა ყველა წესრიგში მოთავსებული ნივთების ჩვენება! დაიმახსოვრე, ტექნიკის სახელი დიდი დატვირთვაა და თითქმის ყოველთვის კარგი იდეაა.

კონფიგურაციის ქეში!

Laravel– ის მოქნილობის ერთ – ერთი მიზეზი არის კონფიგურაციის ფაილების ტონა, რომლებიც ჩარჩოს ნაწილია. გსურთ შეცვალოთ როგორ / სად ინახება სურათები?

უბრალოდ, შეცვალეთ კონფიგურაცია / filesystems.php ფაილი (როგორც მინიმუმ წერის). გსურთ იმუშაოთ მრავალრიცხოვან რიგში დრაივერებთან? შეგიძლიათ აღწეროთ ისინი კონფიგურაციაში / რიგში .php. უბრალოდ დავთვალე და აღმოვაჩინე, რომ არსებობს 13 კონფიგურაციის ფაილი ჩარჩოს სხვადასხვა ასპექტისთვის, იმის უზრუნველსაყოფად, რომ თქვენ არ იმედგაცრუებული იქნებით, თუ რა გსურთ შეცვალოთ.

PHP– ს ბუნების გათვალისწინებით, ყოველ ჯერზე ახალი ვებ – მოთხოვნის შემოღებისთანავე, Laravel იღვიძებს, აწყდება ყველაფერს და აყალიბებს ყველა ამ კონფიგურაციის ფაილს, რათა გაირკვეს, თუ როგორ უნდა გააკეთოთ საქმეები ამ დროს. გარდა იმისა, რომ სულელურია, თუ ბოლო რამდენიმე დღეში არაფერი შეცვლილა! კონფიგურაციის ყველა მოთხოვნის აღდგენა არის ნარჩენები, რომლის თავიდან აცილებაც (ფაქტობრივად, უნდა მოხდეს), ხოლო გამოსავალი არის მარტივი ბრძანება, რომელსაც ლარაველი გთავაზობთ:

php artisan კონფიგურაცია: ქეში

რას აკეთებს ეს არის ყველა შესაძლო კონფიგურაციის ფაილი ერთში და დაასახელა ქეში, არის სადღაც სწრაფი მოსაპოვებლად. შემდეგ ჯერზე, როცა ვებ – მოთხოვნა იქნება, ლარველი უბრალოდ წაიკითხავს ამ ერთ ფაილს და წავა.

ამის თქმით, კონფიგურაციის ქეშირება არის ძალიან დელიკატური ოპერაცია, რომელიც შეიძლება აფეთქდეს თქვენს სახეზე. ყველაზე დიდი გატაცება ის არის, რომ ამ ბრძანების გამოსვლისთანავე, env () ფუნქციის ზარები ყველგან, გარდა კონფიგურაციის ფაილებისა, დაბრუნდება null!

აზრი აქვს მასზე ფიქრს. თუ იყენებთ კონფიგურაციის ქეშირებას, თქვენ უყვებით ჩარჩოებს, “თქვენ იცით რა, ვფიქრობ, რომ ლამაზად ვაყენებ და მე 100% დარწმუნებული ვარ, რომ არ მსურს ისინი შეცვალონ.” სხვა სიტყვებით, თქვენ ველით, რომ გარემო არ დარჩება სტატიკურს, რისთვისაა განკუთვნილი .env ფაილები.

ამის თქმასთან ერთად, მოცემულია კონფიგურაციის ქეშირების რკინის ჩაცმული, საკრალური, უცვლელი წესები:

  1. ამის გაკეთება მხოლოდ წარმოების სისტემაში.
  2. გააკეთეთ ეს მხოლოდ იმ შემთხვევაში, თუ ნამდვილად ხართ, ნამდვილად დარწმუნდით, რომ გსურთ კონფიგურაციის გაყინვა.
  3. თუ რამე არასწორედ მოხდება, გადააკეთეთ PHP artisan cache- ით პარამეტრი: გარკვევით
  4. ილოცეთ, რომ ბიზნესისათვის მიყენებული ზიანი არ იყო მნიშვნელოვანი!

შემცირება autoloaded მომსახურება

გამოსადეგია, რომ Laravel იტვირთებს ტონა მომსახურებას, როდესაც ის იღვიძებს. ეს ხელმისაწვდომია კონფიგურაციაში / app.php ფაილში, როგორც “პროვაიდერების” მასივის ღილაკის ნაწილი. მოდით გადახედოთ რა მაქვს ჩემს შემთხვევაში:

/ *
|————————————————————————–
| ავტოლოგიური მომსახურების მიმწოდებლები
|————————————————————————–
|
| აქ ჩამოთვლილი სერვისის პროვაიდერები ავტომატურად იტვირთება საიტზე
| მიმართეთ თქვენს განცხადებას. მოგერიდებათ დაამატოთ საკუთარი სერვისები
| ეს მასივი თქვენს აპლიკაციებზე გაფართოებული ფუნქციონალობის მინიჭებისთვის.
|
* /

‘პროვაიდერები’ => [

/ *
* Laravel ჩარჩო მომსახურების მიმწოდებლები…
* /
განათება \ Auth \ AuthServiceProvider :: კლასი,
განათება \ მაუწყებლობა \ BroadcastServiceProvider :: კლასი,
განათება \ ავტობუსი \ BusServiceProvider :: კლასი,
განათება \ Cache \ CacheServiceProvider :: კლასი,
განათება \ ფონდი \ პროვაიდერები \ ConsoleSupportServiceProvider :: კლასი,
განათება \ Cookie \ CookieServiceProvider :: კლასი,
ილუსტრაცია \ მონაცემთა ბაზა \ მონაცემთა ბაზა სერვისიპროვაიდერი :: კლასი,
ილუსტრაცია \ დაშიფვრა \ შიფრაცია სერვისპროვიიდერი :: კლასი,
განათება \ Filesystem \ FilesystemServiceProvider :: კლასი,
განათება \ ფონდი \ მომწოდებლები \ FoundationServiceProvider :: კლასი,
განათება \ ჰაშინგი \ HashServiceProvider :: კლასი,
განათება \ ფოსტა \ MailServiceProvider :: კლასი,
განათება \ შეტყობინებები \ შეტყობინებები სერვისიპროვაიდერი :: კლასი,
განათება \ პაგინაცია \ PaginationServiceProvider :: კლასი,
ილუსტრირება \ გაზსადენი \ მილსადენი სერვისპროვიider :: კლასი,
განათება \ რიგი \ QueueServiceProvider :: კლასი,
განათება \ Redis \ RedisServiceProvider :: კლასი,
განათება \ Auth \ პაროლები \ პაროლიResetServiceProvider :: კლასი,
განათება \ სესია \ SessionServiceProvider :: კლასი,
განათება \ თარგმანი \ თარგმანი \ სერვისიპროვაიდერი :: კლასი,
Illuminate \ Validation \ ValidationServiceProvider :: კლასი,
განათება \ ნახვა \ ViewServiceProvider :: კლასი,

/ *
* პაკეტის მომსახურების მომწოდებლები…
* /

/ *
* განაცხადის მომსახურების მიმწოდებლები…
* /
პროგრამა \ პროვაიდერები \ AppServiceProvider :: კლასი,
პროგრამა \ პროვაიდერები \ AuthServiceProvider :: კლასი,
// პროგრამა \ პროვაიდერები \ BroadcastServiceProvider :: კლასი,
პროგრამა \ პროვაიდერები \ EventServiceProvider :: კლასი,
პროგრამა \ პროვაიდერები \ RouteServiceProvider :: კლასი,

],

კიდევ ერთხელ დავთვალე და ჩამოთვლილია 27 მომსახურება! ახლა შეიძლება დაგჭირდეთ ყველა, მაგრამ ეს ნაკლებად სავარაუდოა.

მაგალითად, ახლა ვქმნი REST API- ს აშენებას, რაც იმას ნიშნავს, რომ მე არ მჭირდება სესიის სერვისის პროვაიდერი, View Service Provider და ა.შ., და რადგან მე ვაკეთებ რამდენიმე საქმეს ჩემს გზას და არ მივდივარ ჩარჩო სტანდარტებს ასევე შემიძლია გამორთოთ Auth მომსახურების პროვაიდერი, პაგინაციის სერვისის პროვაიდერი, მთარგმნელობითი მომსახურების პროვაიდერი და ა.შ. საერთო ჯამში, ამ თითქმის ნახევარი ზედმეტია ჩემი გამოყენების შემთხვევაში.

დიდხანს დააკვირდით თქვენს აპლიკაციას. სჭირდება ყველა ამ მომსახურების მიმწოდებელს? ღვთის გულისთვის, გთხოვთ, ნუ დაასაბუთებთ ამ სერვისებზე კომენტარის გაკეთებას და პროდუქციისკენ მიისწრაფვით! შეამოწმეთ ყველა ტესტი, ხელით შეამოწმეთ dev და დადგმა მანქანები და ძალიან პარანოიდული უნდა იყოს სანამ გამოიწვევს ტრიგს. ��

იყავი გონივრული

როდესაც გჭირდებათ შემომავალი ვებ მოთხოვნის პერსონალური დამუშავება, ახალი შუახნის შექმნა არის პასუხი. ახლა, მაცდურია გახსნათ აპლიკაცია / Http / Kernel.php და ჩავრთოთ შუახნის პროგრამა ინტერნეტში ან API დასტაზე; ამ გზით, ის ხელმისაწვდომი გახდება აპლიკაციის მასშტაბით და თუ ის არ აკეთებს რაიმე დამაინტრიგებლად (მაგალითად, ხეზე შესვლაზე ან შეტყობინებით).

თუმცა, როგორც აპლიკაცია იზრდება, გლობალური Middleware- ის ამ კოლექციამ შეიძლება გახდეს მდუმარე ტვირთი აპიზე, თუ ყველა ეს (ან უმეტესობა) ყველა მოთხოვნაზეა წარმოდგენილი, თუნდაც ამის მიზეზი არ იყოს საქმიანი..

სხვა სიტყვებით რომ ვთქვათ, ფრთხილად იყავით იქ, სადაც დაამატეთ / იყენებთ ახალ შუახანს. ეს შეიძლება იყოს უფრო მოსახერხებელი, რომ დაამატოთ რაღაც გლობალურად, მაგრამ შესრულების ჯარიმა გრძელვადიან პერსპექტივაში ძალიან მაღალია. მე ვიცი, რომ თქვენ უნდა განიცდიდეთ ტკივილს, თუკი თქვენ უნდა აირჩიოთ საშუალოდ, ყოველ ჯერზე, ახალი ცვლილება, მაგრამ ეს ის ტკივილია, რომელსაც სურვილისამებრ ავიღებ და გირჩევთ.!

მოერიდეთ ORM (ზოგჯერ)

მიუხედავად იმისა, რომ Eloquent DB- ს ურთიერთქმედების ბევრ ასპექტს სასიამოვნოა, ის სიჩქარის სიჩქარეზე მოდის. როგორც Mapper, ORM არა მხოლოდ უნდა მიიღოს ჩანაწერები მონაცემთა ბაზაში, არამედ დაუყოვნებლივ დააფიქსიროს მოდელის ობიექტები და დაასუფთაოს (შეავსოს ისინი) სვეტის მონაცემებით.

ასე რომ, თუ თქვენ მარტივ $ მომხმარებელს აკეთებთ = მომხმარებელი :: ყველა () და არსებობს, ვთქვათ, 10,000 მომხმარებელი, ჩარჩო მიიღებს მონაცემთა ბაზიდან 10,000 რიგს და შინაგანად გააკეთებს 10,000 ახალ მომხმარებელს () და შეავსებს მათ თვისებებს შესაბამის მონაცემებთან. . ეს არის მასიური სამუშაოები, რაც ხდება კულისებში, და თუ მონაცემთა ბაზა არის სადაც თქვენ განაცხადს უქმნიან უარეს პრობლემას, ORM– ის გვერდის ავლით ზოგჯერ კარგი იდეაა.

ეს განსაკუთრებით ეხება რთულ SQL მოთხოვნებს, სადაც უნდა გადახვიდეთ უამრავი ხუჭუჭა და დახურვა დახურვისთანავე და მაინც დასრულდეთ ეფექტური შეკითხვით. ასეთ შემთხვევებში უპირატესობა ენიჭება DB :: ნედლეულს () და შეკითხვის ხელით დაწერას.

მიდის ეს შესრულების შესწავლა, თუნდაც მარტივი ჩანართებისთვის Eloquent გაცილებით ნელია, რადგან ჩანაწერების რაოდენობა იზრდება:

მაქსიმალურად გამოიყენოთ ქეშირება

ვებ – აპლიკაციის ოპტიმიზაციის ერთ – ერთი საუკეთესო დაცული საიდუმლოება ქეშირებაა.

ინციდენტისთვის ქეიზინგი ნიშნავს ძვირადღირებული შედეგების წინასწარ დათვლას და შენახვას (ძვირი CPU- ს და მეხსიერების გამოყენების თვალსაზრისით), და უბრალოდ მათი დაბრუნება, როდესაც იგივე შეკითხვის განმეორება ხდება.

მაგალითად, ელექტრონული კომერციის მაღაზიაში, იგი შეიძლება გვხვდეს 2 მილიონი პროდუქტის პროდუქტებით, უმეტეს დროს ხალხი აინტერესებს მათ, ვინც ახლად მარაგია, გარკვეული ფასების დიაპაზონში და კონკრეტული ასაკობრივი ჯგუფისთვის. ამ ინფორმაციის მონაცემთა ბაზაში მოთხოვნა არ არის ცუდი – რადგან შეკითხვის ცვლა ხშირად არ იცვლება, უმჯობესია ამ შედეგების შესანახად სადმე, სადაც სწრაფად შეგვიძლია შესვლა.

Laravel- ს აქვს ჩაშენებული მხარდაჭერა რამდენიმე ტიპისთვის ქეშირება. გარდა იმისა, რომ ქეშირების დრაივერი იყენებთ და ქეშირების ქცევის სისტემას მიწიდან ააშენებთ, შეიძლება დაგჭირდეთ გამოიყენოთ ლაარველის რამდენიმე პაკეტი, რომლებიც ხელს შეუწყობენ მოდელის ქეშირება, შეკითხვის ქეშირება, და ა.შ..

გაითვალისწინეთ, რომ გარკვეული გამარტივებული გამოყენების შემთხვევის მიღმა, წინასწარ ჩაშენებულ ქეიფინგულ პაკეტებს უფრო მეტ პრობლემას შეუქმნით, ვიდრე გადაჭრით.

ურჩევნია მეხსიერების დაცვა

როდესაც რამეს ქაშაყობთ Laravel– ში, თქვენ გაქვთ რამდენიმე ვარიანტი, სადაც შეგიძლიათ შეინახოთ მიღებული გამოთვლა, რომლის შენახვაც საჭიროა. ეს პარამეტრები ასევე ცნობილია, როგორც ქეში დრაივერები. ასე რომ, მიუხედავად იმისა, რომ შესაძლებელია ფაილური სისტემის გამოყენება ქეშირების შედეგების შესანახად, ნამდვილად არ ნიშნავს რა ქეშირებას..

იდეალურ შემთხვევაში, გსურთ გამოიყენოთ მეხსიერების მეხსიერება (მთლიანად RAM- ში ცხოვრება), როგორიცაა Redis, Memcached, MongoDB და ა.შ., ასე რომ, უფრო მაღალი დატვირთვის პირობებში, ქეშირება უფრო მნიშვნელოვან გამოყენებას ემსახურება, ვიდრე თავად გახდება უტყუარი საშუალება..

ახლა, თქვენ შეიძლება ფიქრობთ, რომ SSD დისკის არსებობა თითქმის იგივეა, რაც RAM ჯოხის გამოყენებით, მაგრამ ეს არც ისე ახლოს არის. არაფორმალურიც კი საორიენტაციო ნიშნები აჩვენეთ, რომ ოპერატიული მეხსიერების სიჩქარე 10– ჯერ მეტია, ვიდრე სიჩქარე.

ჩემი საყვარელი სისტემა, როდესაც საქმე ქეშირებას ეხება, არის Redis. ეს არის სასაცილოდ სწრაფად (წამში 100,000 წაკითხული ოპერაცია საერთოა), და ძალიან დიდი ქეშიანი სისტემებისთვის, შესაძლებელია განვითარდეს ა მტევანი მარტივად.

დაალაგეთ მარშრუტები

ისევე, როგორც პროგრამის კონფიგურაცია, მარშრუტები დროთა განმავლობაში ბევრი რამე არ იცვლება და იდეალური კანდიდატია ქეშინირებისთვის. ეს განსაკუთრებით ეხება იმ შემთხვევაში, თუ ჩემსავით დიდ ფაილებს ვერ გაუძლებთ და დასრულდება თქვენი web.php და api.php რამდენიმე ფაილზე გაყოფა. ერთი Laravel ბრძანება შეფუთავს ყველა შესაძლო მარშრუტს და ხელს უშლის მათ მომავალი წვდომისთვის:

php ხელოსანი მარშრუტი: ქეში

და როდესაც დასრულდება მარშრუტების დამატება ან შეცვლა, უბრალოდ გააკეთეთ:

php artisan მარშრუტი: გარკვევით

სურათის ოპტიმიზაცია და CDN

სურათები არის ვებ – პროგრამების უმეტესობის გული და სული. სხვათა შორის, ისინი ასევე არიან სიჩქარის სიდიდის უდიდესი მომხმარებლები და ნელი პროგრამების / ვებსაიტების ერთ-ერთი ყველაზე დიდი მიზეზი. თუ უბრალოდ ატვირთულ სურათებს გულუბრყვილოდ ინახავთ სერვერზე და HTTP პასუხებში გაგზავნით, თქვენ საშუალებას აძლევთ მას დაეხმაროთ მასიური ოპტიმიზაციის შესაძლებლობას..

ჩემი პირველი რეკომენდაცია არ არის სურათების ლოკალურად შენახვა – ამით მონაცემების დაკარგვის პრობლემა არსებობს და იმისდა მიხედვით, თუ რომელ გეოგრაფიულ რეგიონში მდებარეობს თქვენი მომხმარებელი, მონაცემთა გადაცემა შეიძლება მტკივნეულად შეანელოთ.

ამის ნაცვლად, მოიძიეთ ისეთი გამოსავალი, როგორიცაა ღრუბლოვანი რომ ავტომატურად ზომის შეცვლა და ოპტიმიზაცია ხდება ფრენაზე.

თუ ეს შეუძლებელია, გამოიყენეთ Cloudflare- ს მსგავსი რამ, რათა დაალაგოთ და შეინახოთ სურათები თქვენს სერვერზე.

და თუ ეს შეუძლებელი გახდა, თქვენი ვებ სერვერის პროგრამულ უზრუნველყოფაზე ცოტათი შეცვლა აქტივების შეკუმშვისთვის და ვიზიტორთა ბრაუზერის მითითებას ახდენს ქეში ინახავს ნივთებს, უამრავ განსხვავებას იწვევს. აქ როგორ გამოიყურება Nginx- ის კონფიგურაციის ნაწყვეტი:

სერვერი {

# ფაილი შემცირდა

# gzip შეკუმშვის პარამეტრები
gzip on;
gzip_comp_level 5;
gzip_min_l სიგრძე 256;
gzip_proxied ნებისმიერი;
gzip_vary ჩართვა;

# ბრაუზერის ქეში კონტროლი
ადგილმდებარეობა * \. (ico | css | js | gif | jpeg | jpg | png | woff | ttf | otf | svg | woff2 | eot) $
იწურება 1 დ;
Access_log გამორთულია;
add_header პრაღის საჯარო;
add_header ქეში-კონტროლი "საჯარო, მაქსიმალური ასაკი = 86400";
}
}

მე ვიცი, რომ გამოსახულების ოპტიმიზაციას არაფერი აქვს საერთო Laravel- სთან, მაგრამ ეს ისეთი მარტივი და ძლიერი ხრიკია (და ის ხშირად უგულებელყოფილია), რომ ვერ დაეხმარება ჩემს თავს.

Autoloader ოპტიმიზაცია

PHOLP– ის სისუფთავე, არცთუ ისე ძველი ფუნქციაა PHP, რომელიც საეჭვოა გადაარჩინა ენა განწირულობისგან. როგორც ითქვა, შესაბამისი კლასის მოძებნისა და დატვირთვის პროცესს მოცემული სახელის სივრცის სტრიქონის გაშიფვრის გზით, დრო სჭირდება და შეიძლება თავიდან იქნას აცილებული წარმოების განლაგებებში, სადაც სასურველია მაღალი ხარისხის შესრულება. კიდევ ერთხელ, Laravel აქვს ერთი ბრძანება გამოსავალი ამისათვის:

კომპოზიტორის ინსტალაცია –optimize-autoloader –no-dev

დაუმეგობრდით რიგებს

რიგები როგორ ამუშავებთ ნივთებს, როდესაც ბევრია და თითოეულ მათგანს ასრულებს რამდენიმე მილიწამი. კარგი მაგალითია ელ.ფოსტის გაგზავნა – ფართო გამოყენების შემთხვევა ვებ – აპებში არის რამდენიმე შეტყობინებების ელ.ფოსტის გათიშვა, როდესაც მომხმარებელი ასრულებს გარკვეულ მოქმედებებს.

მაგალითად, ახლად გამოშვებულ პროდუქტში, თქვენ გსურთ, რომ კომპანიის ხელმძღვანელობას (6-7 ელ.ფოსტის მისამართები) ეცნობოს ნებისმიერ დროს, თუ ვინმეს განათავსებთ შეკვეთას გარკვეულ ღირებულებაზე. თუ ვიტყვით, რომ თქვენი ელ.ფოსტის კარიბჭეს შეუძლია უპასუხოს თქვენს SMTP მოთხოვნას 500 მმ-ში, ჩვენ ვსაუბრობთ კარგ 3-4 წამზე დაელოდებით მომხმარებელს, სანამ შეკვეთის დადასტურებას დაიწყებს. UX ნამდვილად ცუდი პირობაა, დარწმუნებული ვარ ეთანხმებით.

გამოსავალი არის სამუშაოების შესანახად შესანახად, შეატყობინეთ მომხმარებელს, რომ ყველაფერი კარგად დასრულდა, შემდეგ კი მათ დამუშავება (რამდენიმე წამში). თუ არსებობს შეცდომა, რიგის სამუშაოების ხელახლა გადადება შეგიძლიათ რამდენჯერმე, სანამ არ გამოცხადდება უშეცდომოდ.

კრედიტები: Microsoft.com

მიუხედავად იმისა, რომ რიგების სისტემა ოდნავ ართულებს კონფიგურაციას (და დასძენს გარკვეული ზედამხედველობით მონიტორინგს), აუცილებელია თანამედროვე ვებ პროგრამაში.

აქტივების ოპტიმიზაცია (Laravel Mix)

თქვენი Laravel პროგრამაში არსებული წინა აქტივებისათვის, დარწმუნდით, რომ არის გაზსადენი, რომელიც შედგენს და ამცირებს ქონების ყველა ფაილს. მათ, ვინც კომფორტს უქმნის bundler სისტემით, როგორიცაა Webpack, Gulp, Parcel და ა.შ., არ უნდა შეაწუხოთ, მაგრამ თუ ეს უკვე არ გააკეთებთ, Laravel Mix კარგი რეკომენდაციაა.

მიქსი არის მსუბუქი (და გულწრფელი, პატიოსნად!) ვებპაკეტის გარშემო, რომელიც ზრუნავს თქვენს ყველა CSS, SASS, JS და ა.შ., ფაილების წარმოებისთვის. ტიპიური .mix.js ფაილი შეიძლება იყოს ისეთივე მცირე, როგორც ეს და მაინც საოცრებაა:

const mix = მოითხოვს (‘laravel-mix’);

mix.js (‘Resources / js / app.js’, ‘public / js’)
.sass (‘Resources / sass / app.scss’, ‘public / css’);

ეს ავტომატურად ზრუნავს იმპორტზე, მინერალიზაციაზე, ოპტიმიზაციაზე და მთლიანი შაბანგზე, როდესაც მზად ხართ წარმოებისთვის და აწარმოებთ npm run- ს წარმოებას. 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