Chrome-ის უფასო გაფართოება — მოწყობილობაზე ამოჭრილი ამონაწერები

Web Worker სურათის დამუშავების საფუძვლები

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

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

მთავარ თემას აქვს მომხმარებლის ინტერფეისის სამუშაო

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

გამოსახულების რედაქტორს აქვს მრავალი ძირითადი პასუხისმგებლობა, სანამ დასკვნა დაიწყება:

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

შეტყობინებაზე დაფუძნებული საზღვარი

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

  1. რედაქტორი ქმნის ან ხელახლა იყენებს მუშაკს.
  2. ის სთხოვს მუშაკს დასკვნის გაშვების და მოდელის ინიციალიზაციას.
  3. ამზადებს გამოსახულების მონაცემებს და აგზავნის დასკვნის მოთხოვნას.
  4. მუშაკი მონაცემებს მოდელის მოსალოდნელ შეყვანად გარდაქმნის.
  5. მუშაკი აწარმოებს მოდელს და აწარმოებს ნიღბის მნიშვნელობებს.
  6. ის აგზავნის ნიღბის ან შედეგის მონაცემებს უკან.
  7. რედაქტორი აერთიანებს გადახედვას და საშუალებას აძლევს დახვეწას ან ექსპორტს.

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

სურათის მონაცემების კოპირება და გადაცემა

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

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

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

რას დებს Easy Background Remover მუშას

Easy Background Remover იყენებს Web Worker-ს ბრაუზერის დასკვნის გაშვების დროით მოწყობილობაზე სეგმენტაციისთვის. მძიმე ავტომატური გათიშვის ნაბიჯი აწარმოებს ნიღაბს. შემდეგ რედაქტორი აჩვენებს შედგენილ შედეგს და მხარს უჭერს CPU-ტილოს ფუნჯის დახვეწას.

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

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

მუშაკი არ აკეთებს გამოთვლას მყისიერად

მუშები აუმჯობესებენ რეაგირებას და არა ნედლი მოწყობილობის შესაძლებლობებს. მოდელი კვლავ მოიხმარს CPU-ს, GPU-ს ან სხვა გაშვების რესურსებს იმის მიხედვით, თუ რა შეუძლია ბრაუზერს. დიდ შეყვანას შეიძლება კიდევ უფრო მეტი დრო დასჭირდეს და მეტი მეხსიერება დასჭირდეს, ვიდრე პატარას.

რჩება რამდენიმე შეზღუდვა:

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

პროგრესის მოხსენება თანამშრომლობითია

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

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

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

გაუქმება უფრო მეტია, ვიდრე სპინერის დამალვა

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

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

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

შეცდომებმაც უნდა გადალახოს საზღვარი

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

შეცდომების კარგი დამუშავება განასხვავებს მინიმუმ:

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

მუშათა გამომუშავება ჯერ კიდევ მხოლოდ პირველი ნიღაბია

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

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

ლაკონური გონებრივი მოდელი

იფიქრეთ თანამშრომელზე, როგორც ადგილობრივ სპეციალისტზე შეტყობინების ფანჯრის მიღმა:

თავად პიქსელების მოდელის ხედვისთვის გააგრძელეთ What an on-device cutout model sees. საბოლოო პრაქტიკული მიმოხილვისთვის იხილეთ როგორ მუშაობს ადგილობრივი ფონის ამოღება.

განაგრძეთ გამოკვლევა

საინტერესოა