yorumlanan dillerde static metod kullanımı

Başlatan 91011, 17 Mayıs 2018 - 12:19:02

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

91011

Merhaba arkadaşlar,

Yorumlanan yani interpreted bir dilde (javascript te) bir kodum var kullandığım bazı sınıflar static metodlara sahip bu metodların içerisinde de değişken tanımlamışım. Sonradan kodu çalıştırdığımda firefox ta yavaşlama oluyor, chrom da nispeten daha iyi.

Saniyede 40 50 defa bu static metodları kullanıyorum, bu static metodların içinde değişken tanımlama yapılmış bazı metodlarda 20 tane değişken var bu işlem performans kaybetmeme neden olabilir mi ?
Bu static metodları normal metod yapıp constructor da tanımlarsam daha performanslı olabilir mi ?

Örnek olarak şöyle :

class IslemClass{
  static islem(){
    var x,y,z,b,n,gf,d
    x*y
    ...
  }
}


IslemClass.islem()

bunun yerine:

Class IslamClass(){
  consttructor(){
   this.x, this.y, this.z ...
  }
  islem(){
   this.x*this.y
  }
}

bu şekil kullanım daha performanslı olur mu ?

Tanrı konuşmaz, şeytan fısıldar...

ethernity

Sorduğunuz soruya kesin yanıt olur mu bilmem ama faydalı bilgiler bulabilirsiniz bu linkte.
https://www.linkedin.com/pulse/performance-optimization-ravi-thapa

91011

#2
Cavabı ben verebilirim araştırmalardan sonra:

Javascript her ne kadar yorumlanan ve type safe bir dil olmamasına rağmen arkada kodu işleyen engine; örneğin v8 engine ı diyelim. Çalıştırdığı kodu en performanslı çalıştıracak şekilde ele alıyor.

Ve Her ne kadar es6 da class syntax ı olsa da javascript özünde prototype tabanlı bir dil yani class yapısı yok.

Şimdi gel gelelim persformans olaylarına:

Oluşturduğumuz her obje v8 engine ı tarafından arkada  hidden class adını verdiğimiz bir yapı tarafından tutulur.
Örneğin:  Point objemiz olsun ve x, y adında propertiy lerimiz olsun



class Point (){
constructor(x,y){
  this.x = 0
  this.y = 0
}


bu nesneden yeni bir instance oluşturduğumuzda:

var yeni_nesne = new Point(3,5)

Engine arkada Point nesnesine ait bir hidden class oluşturuyor ve sırası önce x özelliğinin pointerini sonra y özelliğinin pointeri gelecek şekilde tutuyor.

biz yeni_nesne değişkenindeki özelkileri değiştirdiğmizde veya sayıların tipini değiştirdiğimizde mesela bir float verdiğimizde veya önce y değişkenini set edip sonra x değişkenni set edersek arkada Point tipinde  bir hidden class daha oluşur. Yani şu şekilde.


yeni_nesne.y =10
yeni_nesne.x = 6


Yukarıdaki kullanımda Point objesi için ilk olarak x,y şeklinde giden bir hidden class vardı, ancak sırayı bozduğumuz için engine y,x sıraasında Point tipinde bir hidden class daha oluşturdu.


Ve bu farklı kullanımlarda engine hangi hidden classı kullanacağını şeçerek(seçim işlemi bir arama algoritması ile oluyor tabi) run time esnasında vakit kaybetmez.

Aslında static metodu nasıl ele alıyor onu pek bulamadım ama yukarıdaki gibi arkada bir hidden class oluşturuyorsa ve ve constructorda değişkenlerin sırasına dikkat edilmeden ordan burdan çağrılıyorsa bu gereksiz yere hidden class oluşumu ve bu classları sürekli değiştirmesi anlamına gelir bu bir performans kaybı yaratabilir.


Garbage collector periyodik olarak çalışır ve çalıştığında program durur, programdan bağımsız asenkron olarak çalışmaz. Bunun için ben singleton yani bir kere instance edilmiş bir obje yapıp kullandım bu bir performans artışı sağladı.

Tanrı konuşmaz, şeytan fısıldar...