Çözüldü Flask 2.5 MB Dictionary'yi 16 saniyede gönderiyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
9 Nisan 2023
Mesajlar
10.129
Makaleler
13
Çözümler
201
Yer
Hinohara Nishitama
Filtreleme işlemleri tarayıcıda yapılsın diye bütün veriyi gönderen route yaptım. Bu route, zaten bellekteki sözlüğü gönderiyor. 16 saniyede.

Sanırım bir şeyler yanlış, ama yaptığım pek de bir şey yok. Flask olduğu için mi böyle?

Python:
#Program başlarken değişkenimi tanımlıyorum.

OrderList []

...
# Entegrasyon servislerinden sipariş bilgilerini toparlayarak dönen fonksiyon.

def get_all_orders():
    all_orders = []
    for userServices in userIntegrationServices:
        Orders = userServices["orderIntegrationService"].get_shipment_packages(filter_params={})
        Pages = Orders["totalPages"]
        for page in range(0, Pages):
            Orders = userServices["orderIntegrationService"].get_shipment_packages(filter_params={"page": page})
            for order in Orders["content"]:
                order["shopfriendlyname"] = userServices["friendlyName"]
                all_orders.append(order)
    return all_orders

...
# Flask sunucusu başlamadan siparişlerimi önbellekliyorum.

def refresh_orders():
    global OrderList
    OrderList = get_all_orders()
  
refresh_orders()

...

app = Flask(__name__)
@app.route("/")

...
# Hazır, önbellekli veriyi dönüyorum.

@app.route("/order/all")
def all():
    return {"orders": OrderList}



İstek 16 saniye sürüyor.
 
Son düzenleyen: Moderatör:
Çözüm
Filtreleme işlemleri tarayıcıda yapılsın diye bütün veriyi gönderen route yaptım. Bu route, zaten bellekteki sözlüğü gönderiyor. 16 saniyede.
NoSQL (örneğin mongodb) veritabanı kullanmayı denediniz mi bunun için. Burada "cacheledim" diyorsunuz ama tüm veriyi gönderirken JSON serialize yapması gerekiyor programın. O yüzden eğer bu şekilde kullanacaksanız veriyi sunuc başlarken dict olarak tutmak yerine JSON string olarak tutarsanız daha hızlı bir sonuç alırsınız diye tahmin ediyorum.
Filtreleme işlemleri tarayıcıda yapılsın diye bütün veriyi gönderen route yaptım. Bu route, zaten bellekteki sözlüğü gönderiyor. 16 saniyede.
NoSQL (örneğin mongodb) veritabanı kullanmayı denediniz mi bunun için. Burada "cacheledim" diyorsunuz ama tüm veriyi gönderirken JSON serialize yapması gerekiyor programın. O yüzden eğer bu şekilde kullanacaksanız veriyi sunuc başlarken dict olarak tutmak yerine JSON string olarak tutarsanız daha hızlı bir sonuç alırsınız diye tahmin ediyorum.
 
Çözüm

Gerçekten işin o kısmı aklıma bile gelmemişti. String olarak saklayıp gönderdiğimde istek 150 Ms'de tamamlandı. Teşekkürler.
 
Gerçekten işin o kısmı aklıma bile gelmemişti. String olarak saklayıp gönderdiğimde istek 150 Ms'de tamamlandı. Teşekkürler.
2.5MB datayi serialize etmesinin 16sn surmesi de enteresanmis.
Text cok iyi compress edilebildiginden string'i de gzip yapmak bir opsiyon. Boylece client tarafta download edilecek data da epey azaltilmis olur, memory'de de string yerine gzip bytearray tutulabilir.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…