(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'); Hvernig auka má afköst Rails - The Codest
The Codest
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Iðnaðargreinar
    • Fjártæknifyrirtæki og bankastarfsemi
    • E-commerce
    • Adtech
    • Heilbrigðistækni
    • Framleiðsla
    • Flutningar
    • Bifreiða
    • Internet hlutanna
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
Aftur ör Farðu aftur
2022-02-17
Hugbúnaðarþróun

Hvernig auka má afköst Rails

Konstanty Koszewski

Þrátt fyrir fjölmarga kosti er Ruby on Rails enn talinn tiltölulega hægur vefgrind. Við vitum öll að Twitter hefur yfirgefið Rails til að nota Scala. Hins vegar, með nokkrum snjöllum umbótum geturðu keyrt forritið þitt mun hraðar!

Hér er tómt.

Rúbín fyrst

Rúbín er mjög hlutbundið forritunarmál. Reyndar er (næstum) allt í Rúbín er hlutur. Að búa til óþarfa hluti getur kostað forritið þitt mikla auka minnisnotkun, svo þú ættir að forðast það.

Til að mæla muninn munum við nota a minnisgreiningartól göngusteinn og innbyggður Benchmark-modúl til að mæla tímaframmistöðu. 

Notaðu bang! aðferðir á strengjum

require "memory_profiler"

report = MemoryProfiler.report do
gögn = "X" * 1024 * 1024 * 100
data = data.downcase
end

report.pretty_print

Í listanum hér að neðan bjuggum við til 100 MB streng og breyttum öllum stöfum í hann í lágstöfur. Viðmiðunartak okkar sýnir okkur eftirfarandi skýrsla:

Heildarúthlutað: 210765044 bæti (6 hlutir)

Hins vegar, ef við skiptum línu 6 út fyrir:

Gögnin eru skráð í lágstöfum!Hljóðskrift

Lesið skrár línu fyrir línu

Sagt er að við þurfum að sækja gríðarlega gagnasafnið sem inniheldur 2 milljón færslur úr CSV-skrá. Venjulega lítur það svona út:

require 'benchmark'

Benchmark.bm do |x|
x.report do
File.readlines("2mrecords.csv").map! {|line| line.split(",")}
end
end
notandi kerfi samtals raunverulegt

12.797000   2.437000  15.234000 (106.319865)

Það tók okkur meira en 106 sekúndur að hlaða skránni niður að fullu. Talsvert mikið! En við getum flýtt fyrir þessu ferli með því að skipta út kort! aðferð með einföldu á meðan hringrás:

require 'benchmark'

Benchmark.bm do |x|
x.report do
file = File.open("2mrecords.csv", "r")
while line = file.gets
line.split(",")
end
end
end
notandi kerfi samtals raunverulegt

6.078000   0.250000   6.328000 (  6.649422)

Keyrslutíminn hefur nú dregist verulega saman síðan kort! aðferð tilheyrir ákveðnum flokki, eins og Hash#map eða Array#map, þar sem Rúbín mun geyma hverja línu af greindu skránni í minni meðan á framkvæmd stendur. Ruslatökumaður Ruby mun ekki losa minnið fyrr en þessir endurteknarar hafa verið fullkomlega framkvæmdir. Hins vegar mun línufyrir línu lestur kalla á ruslhreinsun (GC) til að færa minnið úr fyrri línum þegar það er ekki nauðsynlegt.

Forðastu aðferðartilvísanir á stærri safnum

Þetta er framlenging á fyrri atriðinu með algengara dæmi. Eins og ég nefndi, Rúbín Íteratorar eru aðferðir hluta og losa ekki minni meðan á þeim stendur. Á smáum skala er munurinn merkingarlaus (og aðferðir eins og kort (virðist læsilegra). Hins vegar, þegar um stærri gagnasöfn er að ræða, er alltaf góð hugmynd að íhuga að skipta því út fyrir einfaldari lykkjur. Eins og í dæminu hér að neðan:

numberofelements = 10000000
randoms = Array.new(numberofelements) { rand(10) }

randoms.each do |line|
#do something
end

og eftir endurskipulagningu:

numberofelements = 10000000
randoms = Array.new(numberofelements) { rand(10) }

while randoms.count > 0
line = randoms.shift
#do something
end
“`

Notaðu String::<< aðferðina.

Þetta er fljótleg en sérstaklega gagnleg ráð. Ef þú bætir einum streng við annan með += rekstrarmerkinu, fer það fram bak við tjöldin. Rúbín mun búa til auka hlut. Svo, þetta: 

a = "X"
 b = "Y"
 a += bHljóðskrift

Þýðir í raun þetta:

a = "X"
 b = "Y"
 c = a + b
 a = cHljóðskrift

Rekandinn myndi forðast það, sem sparar þér minni:

a = "X"
 b = "Y"
 a << bHljóðskriftHljóðskrift

Tölum um Rails

Þeir Rails-rammi er með gnægð af “gildrur”sem myndi gera þér kleift að hámarka þitt kóði hratt og án of mikillar viðbótar fyrirhafnar. 

Furðuálagning (einnig kallað n+1-fyrirspurnavandamál)

Gerum ráð fyrir að við höfum tvö tengd módel, Post og Author:

class Author < ApplicationRecord
has_many :posts
end

class Post < ApplicationRecord
belongs_to :author
end

Við viljum sækja allar færslurnar í stýritækinu okkar og birta þær í sýn með höfundum þeirra:

stýritæki

def index
@posts = Post.all.limit(20)
end

sýn

Í stýritækinu, Virkur skrá mun það búa til aðeins eina fyrirspurn til að finna færslurnar okkar. En síðar mun það einnig kalla á 20 aðrar fyrirspurnir til að finna hvern höfund fyrir sig – sem tekur aukatíma! Sem betur fer fylgir Rails fljótlegri lausn til að sameina þessar fyrirspurnir í eina. Með því að nota innifelur Með þessari aðferð getum við endurskrifað stýritækið okkar svona:

 def index
 @posts = Post.all.includes(:author).limit(20)
 endHljóðskrift

Fyrir nú er aðeins nauðsynlegum gögnum sótt í eina fyrirspurn. 

Þú getur einnig notað aðra gimsteina, svo sem kúla að sérsníða allt ferlið.

Hringdu aðeins í það sem þú þarft

Önnur gagnleg aðferð til að auka hraða ActiveRecord er að kalla eingöngu á þau eiginleika sem nauðsynlegir eru fyrir núverandi notkun. Þetta er sérstaklega gagnlegt þegar forritið þitt fer að vaxa og fjöldi dálka í hverri töflu eykst einnig.

Tökum fyrri kóðann okkar sem dæmi og gerum ráð fyrir að við þurfum aðeins að velja nöfn úr höfundum. Svo getum við endurskrifað stýringuna okkar:

def index
 @posts = Post.all.includes(:author).select("name").limit(20)
 endHljóðskriftHljóðskrift

Nú skipum við stýritækinu okkar að sleppa öllum eiginleikum nema þeim einum sem við þurfum.

Birta hluta rétt

Segjum að við viljum búa til aðskilda hlutastykki fyrir færslurnar okkar úr fyrri dæmum:

@posts.each do |post|
  
 end
HljóðskriftHljóðskriftHljóðskrift

Við fyrstu sýn virðist þessi kóði vera réttur. Hins vegar, þegar fleiri færslur þarf að birta, verður allt ferlið verulega hægara. Þetta er vegna þess að Relsar kallar á hlutdrægni okkar með nýrri endurtekningu enn og aftur. Við getum lagað það með því að nota Safnanir eiginleiki:

Rendera @postsHljóðskriftHljóðskriftHljóðskrift

Núna, Relsar mun sjálfkrafa ákvarða hvaða sniðmát eigi að nota og frumstilla það aðeins einu sinni.

Notaðu bakgrunnsvinnslu

Öll ferli sem eru tímafrek en ekki nauðsynleg fyrir núverandi vinnuflæði þitt gætu talist góðir kostir fyrir bakgrunnsvinnslu, t.d. sending tölvupósta, söfnun tölfræðiupplýsinga eða útgáfa reglubundinna skýrslna. 

Saídkík er algengasta gimsteinninn sem notaður er fyrir bakgrunnsvinnslu. Hann notar Redis til að geyma verkefni. Það gerir þér einnig kleift að stjórna flæði bakgrunnsferla þinna, skipta þeim í aðskildar biðraðir og stýra minnisnotkun hvers og eins þeirra.

Ritaðu minna kóða, notaðu fleiri gems

Relsar koma með gríðarlegt magn af gimsteinum sem ekki aðeins gera líf þitt auðveldara og flýta fyrir þróunarferli, en einnig auka afköst og hraða forritsins þíns. Perlur eins og Devise eða Pundit eru yfirleitt vel prófaðar hvað varðar hraða og virka hraðar og öruggar en sérskrifaður kóði fyrir sama tilgang.

Ef einhverjar spurningar koma upp um bætt Frammistaða Rails, ná The Codest verkfræðingar Út til að ráðfæra þig um vafa þína.

Tilboð fyrir Ruby-þróunaraðila

Lesa meira:

Kostir og gallar við forritunarþróun í Ruby

Lestar og önnur samgöngutæki

Rails-þróun með tmux, vim, fzf og ripgrep

Tengdar greinar

Myndskreyting af heilbrigðisforriti fyrir snjallsíma með hjartatákni og hækkandi heilsufarsgrafík, merkt með The Codest-merkinu, sem táknar stafræna heilsu og HealthTech-lausnir.
Hugbúnaðarþróun

Heilbrigðis-hugbúnaður: gerðir og notkunartilvik

Tólin sem heilbrigðisstofnanir treysta á í dag líta ekkert út eins og pappírsskjöl frá fyrri áratugum. Heilbrigðisforrit styðja nú heilbrigðiskerfi, sjúklingameðferð og nútímalega heilbrigðisþjónustu á klínískum og...

THECODEST
Yfirlitsmynd sem sýnir hnignandi súlurit með uppstrekktri ör og gullmynt sem táknar kostnaðarhagkvæmni eða sparnað. The Codest-merkið birtist í efra vinstra horni með slagorðinu "In Code We Trust" á ljósgráum bakgrunni.
Hugbúnaðarþróun

Hvernig á að stækka þróunarteymið án þess að fórna gæðum vörunnar

Ertu að stækka þróunarteymið þitt? Lærðu hvernig á að vaxa án þess að fórna gæðum vörunnar. Þessi leiðarvísir fjallar um merki um að kominn sé tími til að stækka, uppbyggingu teymisins, ráðningar, forystu og verkfæri—og hvernig teymið getur...

THECODEST
Hugbúnaðarþróun

Búðu til vefumsóknir sem þola framtíðina: innsýn frá sérfræðiteymi The Codest

Uppgötvaðu hvernig The Codest skarar fram úr við að búa til stigstækar, gagnvirkar vefumsóknir með nýjustu tækni, sem bjóða upp á hnökralausa notendaupplifun á öllum kerfum. Lærðu hvernig sérfræðiþekking okkar knýr fram stafræna umbreytingu og viðskipti...

THECODEST
Hugbúnaðarþróun

Topp 10 hugbúnaðarþróunarfyrirtæki í Lettlandi

Kynntu þér fremstu hugbúnaðarþróunarfyrirtæki Lettlands og nýstárlegar lausnir þeirra í nýjustu grein okkar. Uppgötvaðu hvernig þessir tækniforingjar geta hjálpað til við að efla fyrirtækið þitt.

thecodest
Lausnir fyrir fyrirtæki og vaxtarfyrirtæki

Grunnatriði í Java hugbúnaðarþróun: Leiðarvísir að árangursríkri útvistun

Kannaðu þessa ómissandi leiðbeiningu um árangursríka outsourcing Java hugbúnaðarþróun til að auka skilvirkni, afla aðgangs að sérfræðiþekkingu og tryggja árangur verkefna með The Codest.

thecodest

Gerðu þig áskrifanda að þekkingargrunni okkar og vertu upplýstur um sérfræðiþekkingu upplýsingatæknigeirans.

    Um okkur

    The Codest – Alþjóðlegt hugbúnaðarþróunarfyrirtæki með tæknimiðstöðvar í Póllandi.

    Bretland - Höfuðstöðvar

    • Skrifstofa 303B, 182-184 High Street North E6 2JA
      Lundúnir, England

    Pólland - staðbundin tæknimiðstöðvar

    • Fabryczna skrifstofugarður, Aleja
      Herbergi 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsjá, Pólland

    The Codest

    • Heim
    • Um okkur
    • Þjónusta
    • Case Studies
    • Vitið hvernig
    • Starfsferilmöguleikar
    • Orðabók

    Þjónusta

    • Það er ráðgjafi
    • Hugbúnaðarþróun
    • Bakendaþróun
    • Framhliðþróun
    • Staff Augmentation
    • Bakhliðaráþróunaraðilar
    • Skýjaverkfræðingar
    • Gagnaverkfræðingar
    • Annað
    • Gæðatryggingartæknimenn

    Auðlindir

    • Staðreyndir og goðsagnir um samstarf við utanaðkomandi hugbúnaðarþróunaraðila
    • Frá Bandaríkjunum til Evrópu: Af hverju ákveða bandarísk sprotafyrirtæki að flytja til Evrópu?
    • Samanburður á tæknifjarkerfisþróunarmiðstöðvum: Tech Offshore Europe (Pólland), ASEAN (Filippseyjar), Eurasia (Tyrkland)
    • Hvert eru helstu áskoranir CTO-a og CIO-a?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Höfundarréttur © 2026 af The Codest. Öll réttindi áskilin.

    is_ISIcelandic
    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 lvLatvian lt_LTLithuanian is_ISIcelandic