(function(w,d,s,l,i){w[l]=w[l]|||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=? 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Pielāgotas programmatūras izstrāde. Īss stāsts par zīmola viļņiem - The Codest
The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2019-02-04
Programmatūras izstrāde

Pielāgotas programmatūras izstrāde. Īss stāsts par zīmola viļņiem

The Codest

Bartošs Slišs (Bartosz Slysz)

Software Engineer

Viena no lietām, kas mūs mulsināja, veidojot jauno vietni, bija morfēti viļņi, kurus var redzēt dažādās lapās. Mums bija daudz ideju par to, kā tos īstenot pareizā veidā bez lielām pūlēm. Tomēr lielākā daļa risinājumu bija lēni, un mums nācās no nulles izveidot kaut ko, kas būtu ātrāks par jau esošajām bibliotēkām.

Risinājuma priekšlikumi

Sākām ar vienkāršu SVG objektu, kas tika animēts, izmantojot dažādas bibliotēkas. Tā kā mēs vēlējāmies vienā lapā izvietot 3 objektus, rezultāts nebija tik apmierinošs. Visas animācijas bija vienkārši lēnas - visi viena SVG objekta ceļi bija jāatjaunina ļoti īsos laika periodos, tāpēc visa lapa bija lēna kā gliemežvāks. Mums nācās atteikties no risinājuma ar tīru SVG, kas ievietots dokumentā. Tas atstāja mums ar diviem citiem risinājumiem.

Portāls video elements bija otrais variants. Mēs sākām ar divām problēmām:

- caurspīdīgs fons, ko nevar izmantot ar populārākajiem video formātiem, piemēram, .mp4 vai .webm,

- atsaucība, kas bija reāla problēma, jo videoklipi kā tādi nav mērogojami.
​
Mēs nolēmām paturēt šo risinājumu otrajā plānā - “ja neatradīsim neko citu, izvēlēsimies šo”.

Pēdējā iespēja bija izmantot audekls ar WebGL atveidošana. Tā bija neparasta iespēja, jo mums pašiem bija jāizstrādā visa renderēšanas mehānika. Tas bija tāpēc, ka morfiskie viļņi, kas mums bija, bija pielāgotie - tas lika mums izstrādāt pielāgotu risinājumu Un tas bija variants, kuram mēs vēlējāmies sekot un uz kuru mēs patiešām koncentrējāmies.

Risinājuma arhitektūra

Sāksim no nulles. Kāds bija materiāls, kas mums bija jāizmanto, lai veidotu šos viļņus? Ideja bija tāda, ka visi viļņi bija SVG fails ar izmēru 1×1 un konkrētiem celiņiem, kas izvietoti ap šo apgabalu. Šī SVG animācija tika veidota, izmantojot dažus šī faila stāvokļu veidus. Tādējādi visas animācijas tika attēlotas kā failu kopums, kas ietvēra formas pārvietošanas posmus.

Padziļināti aplūkojiet, kas ir stāvokļi - visi ceļi ir tikai sava veida masīvi ar konkrētām vērtībām, kas izvietotas konkrētā secībā. Mainot šīs vērtības konkrētās pozīcijās šajā masīvā, mainās forma konkrētās tā daļās. Mēs to varam vienkāršot ar šādu piemēru:


stāvoklis 1: [1, 50, 25, 40, 100]
stāvoklis 2: [0, 75, -20, 5, 120]
stāvoklis 3: [5, 0, -100, 80, 90]

Tātad varam pieņemt, ka forma, ko vēlamies atveidot, sastāv no masīva ar 5 elementiem, kas mainās ar lineāro atvieglojumu noteiktos laika periodos. Kad animācija pabeidz pēdējo posmu, tā sākas no pirmā posma, lai radītu bezgalīgas animācijas iespaidu.

Bet... pagaidiet - kas īsti ir iepriekš redzamais masīvs? Kā jau minēju, tas ir ceļš, kas ir atbildīgs par konkrētas formas attēlošanu. Visa burvība ir ietverta d SVG ceļa īpašība. Šis īpašums satur “komandu” kopumu formas zīmēšanai, un katrai komandai ir vairāki argumenti. Iepriekš minētais masīvs sastāv no visām šīm komandām pievienotajām vērtībām (argumentiem).

Vienīgā atšķirība starp šiem “valsts failiem” bija konkrētu komandu vērtības, jo komandu secība bija vienāda. Tādējādi visa burvība bija saistīta ar visu vērtību iegūšanu un to animēšanu.

Vednis ar nosaukumu Fizika

Iepriekšējā rindkopā es minēju, ka vienīgā objekta animēšanas maģija ir pāreju izveide starp visiem formas posmiem. Jautājums ir - kā to izdarīt ar audeklu?
​
Funkcija, ka visi, kas strādāja ar audekls jāzina, ir requestAnimationFrame. Ja jūs to redzat pirmo reizi, es patiesi ticu, ka jums vajadzētu sākt, izlasot šo. Tātad ar šo funkciju, kas mūs interesē, ir arguments - DOMHighResTimeStamp. Tas izskatās patiešām biedējoši, bet praksē to nav tik grūti saprast. Var teikt, ka tas ir laika zīmogs, kas norāda laiku, kas pagājis no pirmā renderēšanas brīža.

Labi, bet ko mēs ar to varam darīt? Kā requestAnimationFrame funkcija jāizsauc rekursīvi, mēs varam piekļūt laika deltai starp tās izsaukumiem. Un šeit mēs sākam ar zinātni! ⚛️ (ok, varbūt ne raķešu zinātne... vēl)
​
Fizika māca, ka attāluma delta ir vienāda ar laika delta reizinājumu ar ātrumu. Mūsu gadījumā ātrums ir konstants, jo mēs vēlamies sasniegt galapunktu noteiktā laikā. Tāpēc aplūkosim, kā mēs to varam attēlot ar iepriekš minētajiem stāvokļiem:

Pieņemsim, ka mēs vēlamies pāriet starp šiem stāvokļiem tūkstoš milisekundēs, tāpēc ātruma vērtības būs šādas:


delta: [ -1, 25, -45, -35, 20]
ātrums: [-1/1000, 25/1000, -45/1000, -35/1000, 20/1000]

Iepriekš minētais ātrums mums norāda: par katru milisekundi palielināsim vērtību par -1/1000. Un šeit ir punkts, kurā mēs varam atgriezties pie mūsu requestAnimationFrame un laika delta. Konkrētās pozīcijas vērtība, par kuru vēlamies palielināt vērtību, ir laika delta reizinājums ar tās pozīcijas ātrumu. Vēl viena lieta, ko var panākt bez problēmām, ir ierobežot vērtību tā, lai tā nepārsniegtu stāvokli, uz kuru tā dodas.
​
Kad pāreja beidzas, mēs izsaucam citu un tā tālāk. Un tas nešķiet tik grūti īstenojams, bet viens no galvenajiem noteikumiem programmatūras izstrāde ir netērēt laiku lietām, kas jau ir ieviestas. Tātad - mēs izvēlējāmies maza bibliotēka kas ļauj mums bez piepūles izveidot šīs pārejas.
​
Tā mēs izveidojām animētu vilni, kas izskatās kā dzīvs radījums.

Daži vārdi par formu klonēšanu

Kā redzat, The Codest zīmola viļņi nav viena animēta figūra. Tie sastāv no daudzām vienādas formas, bet dažāda izmēra un novietojuma figūrām. Šajā solī apskatīsim, kā šādi dublēt.
​
Tādējādi audekla konteksts ļauj mums mēroga zīmēšanas zona (zem pārsega - var teikt, ka tas reizina visus izmērus, kas nodoti drawable metodēm, ar “k”, kur “k” ir mērogošanas koeficients, kas pēc noklusējuma ir “1”), veikt audekla tulkojumu, tas ir tāpat kā mainīt zīmēšanas apgabala enkurpunktu. Ar šīm metodēm mēs varam arī pāriet starp šiem stāvokļiem: saglabāt un atjaunot.
​
Šīs metodes ļauj mums saglabāt “nulles modifikāciju” stāvokli un pēc tam atveidot noteiktu skaitu viļņu cilpā ar pareizi mērogotu un tulkotu audeklu. Uzreiz pēc tam mēs varam atgriezties saglabātajā stāvoklī. Tas ir viss par figūru klonēšanu. Daudz vieglāk nekā klonēt aitas, vai ne?

Ķirsis virsū

Es minēju, ka vienu no potenciālajiem risinājumiem noraidījām veiktspējas dēļ. Variants ar audeklu ir diezgan ātrs, bet neviens neteica, ka to nevarētu optimizēt vēl vairāk. Sāksim ar to, ka mums īsti nerūp formu pāreja, kad tās atrodas ārpus pārlūkprogrammas skata laukuma.
​
Ir vēl viens pārlūks API ka programmētāji mīlēja - IntersectionObserver. Tas ļauj sekot konkrētiem lapas elementiem un apstrādāt notikumus, kas tiek izsaukti, kad šie elementi parādās vai pazūd no skata laukuma. Šobrīd mums ir diezgan vienkārša situācija - izveidosim redzamības stāvokli, mainīsim to, izmantojot IntersectionObserver notikumu apstrādātājus, un vienkārši ieslēgsim/izslēgsim atveidošanas sistēmu konkrētām formām. Un... bums, veiktspēja ir ievērojami uzlabojusies! Mēs atveidojam tikai tās lietas, kas ir redzamas skatlogā.

Kopsavilkums

Bieži vien ir grūti izvēlēties, kā kaut ko īstenot, jo īpaši tad, ja šķiet, ka pieejamajām iespējām ir līdzīgas priekšrocības un trūkumi. Galvenais, lai izdarītu pareizu izvēli, ir analizēt katru no tiem un izslēgt tos, kurus uzskatām par mazāk izdevīgiem. Ne viss ir skaidrs - kāds no risinājumiem prasa vairāk laika nekā citi, bet, iespējams, tas ir optimizējams vieglāk vai pielāgojamāks.

Lai gan jauns JS bibliotēkas parādās gandrīz katru minūti, ir lietas, ko tās nevar atrisināt. Tāpēc ikvienam front-end inženierim (un ne tikai viņam) ir jāpārzina pārlūkprogrammu API, jāseko līdzi tehniskajām jaunumiem un reizēm vienkārši jāpadomā: “Kā izskatītos šīs bibliotēkas implementācija, ja man būtu jādara tā?”. Iegūstot vairāk zināšanu par pārlūkprogrammām, mēs varam veidot patiešām modernas lietas, pieņemt pareizus lēmumus par izmantojamajiem rīkiem un kļūt pārliecinātāki par savu darbu. kods.

Lasīt vairāk:

- Rubīns 3.0. Ruby un mazāk zināmas privātuma kontroles metodes

- #1: Slēptās izmaksas un reāla elastība produktu izstrādes procesā

- CTO izaicinājumi - programmatūras produktu paplašināšana un izaugsme

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

    The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

    Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

    Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lt_LTLithuanian is_ISIcelandic lvLatvian