Categories
Rehber Web Geliştirme

Tensorflow NLP: Doğal Dil İşleme ve Kelime Tahmini

Yapay zeka sistemlerinin iniş ve çıkış dönemleri olduğunu artık hepimiz biliyoruz. Teknoloji geliştikçe yapay zeka alanına yapılan yatırım farklı evrelere dönüşerek bir anda karşımıza çıkıyor.

Artık hayatımızın her alanında irili ufaklı yapay zeka sistemlerinin çıkmasını bu evrelere borçluyuz. 

Sosyal mecralarda teknoloji ile ilgilenen insanları takip ediyorsanız akışınızda kesinlikle yapay zeka ile ilgili içerikler çıkmıştır.

Genellikle basit yüz tanıma, maske kontrolü, cisim tanıma ve yaş tahmini gibi işlerin yoğun olduğunu görebiliriz. Bu işleri yapmanın artık zor bir yolu -tabi isterseniz- yok.

Artık her yapay zeka aracı, bahsi geçen tüm işleri yapabilecek modüller içeriyor.

Bizim bu yazımızda kullanacağımız kütüphane Tensorflow. Bu aşamada amaç, sizlere kurulum ya da başlangıç öğretmek değil, bir dil işleyebilen ağ oluşturmak olduğunu belirtelim.

Tensorflow ile Doğal Dil İşleme

“Tensorflow Nedir?”, “Neural Network Nasıl Çalışır?” gibi sorularınız için farklı kaynaklar bulmanız gerekecektir. Buradaki amacımız net olarak “Tensorflow ile doğal dil işleme” dir. 

Kodlarımızı Google Colab üzerinden yazacağımız için kendi makinenizi yormaya ya da kurulumları yapmaya ihtiyacınız yok.

Colab üzerinden yeni bir Notebook oluşturalım. Açılan sayfada menüden “Çalışma zamanı” sekmesine gelip “Çalışma zamanı türünü değiştir”’e tıklayalım.

çalışma zamanı seçeneğinden çalışma zamanı türünü değiştir butonunu işaret eden bir ekran görüntüsütürünü

Açılan popup içerisinde “Donanım hızlandırıcı” olarak “GPU” seçeneğini seçelim. Bu işimizi hızlandıracaktır.not defteri ayarlarından bir düzeltme göstermek için alınan bir ekran görüntüsü

Genel bilgileri vermeyeceğimizi söylemiştik ancak yazacağımız her satır kodun ve kullanacağımız kütüphanelerdeki alt modüllerin neden import edildiğini, ne için kullanılacağını açıklayacağım.

import tensorflow as tf

Öncelikle “Tensorflow” import ediyoruz. Versiyon öğrenmek için aşağıdaki komutu kullanabiliriz. 

print(tf.__version__)

Çıktımız bu şekilde görünecektir.

tensorflow kod görüntüsü

Bizim yapacağımız proje, vereceğimiz metin ya da kelime üzerinden sonraki kelimeninin ne olacağını tahmin eden bir proje olacak. Gerekli kütüphanelerimizi eklemeye başlayalım.


import tensorflow as tf

from tensorflow.keras.preprocessing.text import Tokenizer

from tensorflow.keras.preprocessing.sequence import pad_sequences

from tensorflow.keras.models import Sequential

import numpy as np

İlk satırda Tensorflow ‘u tf adıyla ekliyoruz.

İkinci satırda vereceğimiz verileri kelime olarak parçalara yani tokenlara ayırarak indexlenmiş halde vermesi için “Tokenizer” modülünü içeri alıyoruz.

Üçüncü satırda eklediğimiz “pad_sequences” modülü sinir ağımıza verileri sabit matrix uzunlukları ile verebilmemizi sağlayacak.

Dördüncü satırda bulunan “Sequential” modülü sinir ağımızın oluşturulacağı modül yani modelimiz bu modül tarafından üretilecek.

Son satırda ise bolca kullandığımız numpy kütüphanesini ekliyoruz. Çeşitli array manipülasyonları için kullanacağız. 

Kendimize bir metin bulacağız. İster şiir ister bir imdb yorumu isterseniz de kaggle.com’dan bir veri seti kullanabilirsiniz. Ben imdb üzerinden birkaç yorumu ekleyerek ilerleyeceğim. Bunu bir text değişkenine atıyorum, tüm karakterleri küçültüp satır satır kesiyoruz.  

text = """

----

"""

lines = text.lower().split("\n")

Şimdi tokenlarımızı oluşturma zamanı içeri aldığımız “Tokenizer” modülünden bir tane türetip “fit_on_texts” fonksiyonuna “lines” arrayimizi gönderiyoruz. Bu sayede tokenlarımızı oluşturuyoruz. Oluşan tokenların sayısını bir değişkene atıyoruz modelimizi oluştururken işimize yarayacak. “input_sequences” objemiz birazdan manipülasyona uğratacağımız, modelimize girdi olacak tokenlar içerecek.

tokenizer = Tokenizer()

tokenizer.fit_on_texts(lines)

total_words = len(tokenizer.word_index) + 1

input_sequences = []

Şimdi “input_sequences” ın içerisini dolduracağız. Buradaki amaç her bir kelimeden sonra gelecek olan kelime için yeni bir varyasyon, yani bir veri oluşturmak. Kod harici örnek vermek gerekirse “güç: 1, tuşuna: 2, entegre: 3, şekilde: 4” şeklinde oluşan bir token indexin ana verimize eklenmesi bu şekilde olacaktır.

[1 2]            // güç tuşuna

[1 2 3]         // güç tuşuna entegre

[1 2 3 4]      // güç tuşuna entegre şekilde

for line in sliced_lines:

    token_list = tokenizer.texts_to_sequences([line])[0]

    for i in range(1, len(token_list)):

        tokens = token_list[:i + 1]

        input_sequences.append(tokens)

Hemen projemizdeki çıktısına da bir bakalım.tensorflow kod görüntüsü

Şimdi “input_sequences” da bulunan en uzun satırın değerini alıp “maxlen” içerisinde atıyoruz. “pad_sequences” için padding değişkeni oluşturduk ve “pre” ataması yaptık. Yani “maxlen” den küçük olan her satırın ön kısmına bir tampon oluşturulacak.

Eğer sonuna isteseydik “padding” değerini “post” olarak atayacaktık. Dördüncü satırda verimizdeki her satırın son kısmını kesiyor ve “xs” değişkenine atıyoruz.

Son kısımları ise “labels” değişkenine. Bu sayede “xs” de predict edilecek bir kelimenin sonucu labels a düşmüş olacak.

Beşinci satırda ise “labels” değişkeni içerisinde bulunan verileri modele output olarak verebilmek amacı ile “tf.keras.utils.to_categorical” fonksiyonunu kullanıyoruz.

“num_classes” parametresi ile verimizde kaç farklı kelime olabileceği ile ilgili bilgiyi veriyoruz.

maxlen = max([len(x) for x in input_sequences])

padding = "pre"

input_sequences = np.array(pad_sequences(input_sequences, padding=padding, maxlen=maxlen))

xs, labels = input_sequences[:,:-1], input_sequences[:,-1]

ys = tf.keras.utils.to_categorical(labels, num_classes=total_words)

Bu durumda “preprocessing” aşamamız tamamlanmış oluyor şimdi sırada modelimizi oluşturmak ve eğitmek var.

Modelimizi oluşturuyor ve üç adet katman ekliyoruz. İlk katmanımız “Embedding”. Bu katman kelimelerimize bir vektörleme sağlıyor.

Kelimelerimize uzayda birer konum atıyoruz. Bu katman yerine GlobalMaxPooling1D katmanı kullanmamız da mümkün.

İçerisindeki parametrelere baktığımızda ilk parametre “dimension” yani kelimelerimizin bağlantıları ikinci parametremiz “total_words” yani toplamda uzaya yerleştirilecek kelime miktarı ve son olarak “input_length”, adından da anlaşılacağı üzere katmana girdi yapabilecek verinin uzunluğu.

Bidirectional katmanımız kısaca LSTM in verileri çift yönlü olarak hem normal hem tersten okuyarak tahmini kolaylaştırmasıdır. LSTM ler dil işlemede doğan sorunları ele alarak RNN ler için özellikle geliştirilmiş fonksiyonlardır. Detaylı bilgiye bu yazımızda yer veremeyeceğiz.

Son olarak çıkış katmanımız bulunuyor. Aktivasyonların detaylarına burada değinmeyeceğim. Modelimizi çalıştırıyoruz. “compile” içerisinde bulunan “loss” hariç diğer parametreler oluşturduğunuz yapıya göre ayarlanabilir durumdalar.

“loss” ise bu durumda bize bizim görmek isteyeceğimiz “categorical_crossentropy” fonksiyonu. “metrics” ise “fit” fonksiyonu sırasında modelin eğitim sürecinde görmek ve incelemek istediğiniz parametreler.

model = Sequential([

    tf.keras.layers.Embedding(total_words, 100, input_length=maxlen - 1),

    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(100)),

    tf.keras.layers.Dense(total_words, activation="softmax")

])

model.compile(loss="categorical_crossentropy", optimizer=tf.keras.optimizers.Adam(learning_rate=0.06), metrics=["accuracy"])

history = model.fit(xs, ys, epochs=30, verbose=1)

Verilerimiz ve modelimiz hazır. Şimdi sırada tahmin var.  Bir değişken oluşturuyor ve metnin bir kısmını giriyoruz.

Preprocessing aşamasında yaptığımız gibi tokenizer ile sequences larını oluşturuyoruz ve padding yapıyoruz.

Modelimize predict ettiriyoruz ve çıktıdan gelecek olan değeri tokenizer ile oluşturduğumuz index havuzunda eşleştiriyoruz ve sonraki kelimeyi buluyoruz.

seed = "every child who I have seen watch"

token_list = tokenizer.texts_to_sequences([seed])[0]

token_list = pad_sequences([token_list], maxlen=maxlen-1, padding=padding)

predicted = np.argmax(model.predict(token_list), axis=-1)

output_word = ""

for word, index in tokenizer.word_index.items():

    if index == predicted:

        output_word = word

        break

print(output_word)

Yukarıda yapılan geliştirmeyi bir loop a alabilir output_word ü seed e ekleyerek sürekli bir sonraki kelimeyi tahmin edebilir hale getirebilirsiniz.

Tensorflow doğal dil işleme ve kelime tahmini yazımızın sonuna geldik. İlgili kodların bulunduğu Notebook u aşağıda paylaşacağım.

Bu yazının üzerine devam edip geliştirmeler yapmak istiyorsanız bir sonraki aşama olarak Tensorflow un sitesinde bulunan şiir yazma tutorial ı ile devam edebilir.

Yeni kelimelerin oluşturulmasının nasıl yapıldığını farklı ve detaylı bir şekilde inceleyebilirsiniz. 

https://colab.research.google.com/drive/1fuIn7U4yS77xwg4GggkHv1FrrCrkvWKf

https://www.tensorflow.org/tutorials/text/text_generation

Categories
Rehber Web Geliştirme

Mobil Uyumlu Web Sitesi Nasıl Oluşturulur? & Responsive Tasarım

Günümüzde akıllı telefonların kullanımının artması, alışveriş platformlarının ve diğer uygulamaların mobil uyumlu web sitesi tasarımı ile etkileşimi ve kullanımı yaygınlaştıkça, kullanıcı deneyimini kolaylaştıran tasarımların da önemi daha etkili hale geldi.

Responsive tasarım, web sayfalarının akıllı telefonlar, tabletler, dizüstü bilgisayarlar ve masaüstü bilgisayarlar dahil olmak üzere pek çok cihazda uygun boyutlarda görüntülenmesini sağlayan bir web tasarım türüdür.

Mobil uyumlu web sitesi oluşturma hakkında yeterli tecrübeniz veya bilgi birikiminiz yoksa, FastnTech olarak alanında uzman tasarımcı ve geliştirici ekibimizle sizlere yardımcı olabiliriz.

 

responsive tasarım illüstrasyon dizüstü bilgisayar masaüstü bilgisayar telefon alışveriş sepeti çizimleri var

Mobil Uyumlu Web Sitesinde Responsive Tasarım Nasıl Çalışır?

Responsive bir web sitesi, kullanıcıların eriştiği cihazın türünü tanımlar ve daha sonra siteyi, bu cihazların ekranına mümkün olduğunca uygun bir şekilde sığdırarak, en iyi görünümü elde edecek şekilde yapılandırır.

Bu yapı genellikle, sitedeki içeriğin herhangi boyuttaki bir cihazın ekranına en etkili görünümü ve düzeni baz alarak  kutular şeklinde, sitedeki içeriğe en etkili ve kolay erişimi sağlayarak tamamlar.

Neden Responsive Tasarım?

fastntech responsive tasarım web site mock-up

Dünya genelinde akıllı mobil cihaz kullanım oranı %67 iken, Türkiye’de bu oran %89’dur. Masaüstü ve dizüstü bilgisayar gibi cihazlarda ekran büyüklüğü ve görüntü açısının genişliği, web sitesinin kolay ve rahat bir şekilde görüntülenmesini sağlar.

Fakat mobil cihazlarda ve tabletlerde ekran boyutu küçüldüğü için, site tasarımını kullanıcıya dikey ekranda en etkili ve kolay bir şekilde sunmak gerekir.

Mobil uyumlu web sitesi için bütün bu etkenler göz önünde bulundurulduğunda, bütün cihazlar için uygun tasarımı oluşturmak ve görünümü en iyi şekilde optimize etmek, web sitesinin kalitesini ve uyumluluğunu önemli ölçüde artırır.

Sorunsuz Bir Alışveriş Deneyimi Sağlamak

Son yıllarda mobil cihazlar üzerinden yapılan alışveriş sayısı önemli ölçüde artmaktadır. Buna bağlı olarak insanların mobil cihaz üzerinden yaptığı gezinme ve etkileşimler, kullanıcı deneyimi açısından önemli bir hale gelmiştir.

Bu deneyimin sağladığı kolaylık, tek seferlik site ziyaretlerinin önüne geçerek, alışveriş yapılan web sitesindeki müşterileri de elde tutma olasılığını da arttırır.

Böylece responsive tasarımın oluşturduğu mobil uyumlu web sitesi, müşterilere tam anlamıyla alışveriş deneyimi sunmayı da sağlar.

Responsive Tasarım Yaparken Düşünülmesi Gerekenler

Kullanıcı deneyimi bizim için anahtar niteliğindedir. Responsive tasarım, bir masaüstü web sitesini mobil uyumlu yapmaktan daha fazlası olmalıdır. Çünkü bir mobil cihaz kullanılırken kullanıcının deneyimini, etkileşimini ve gerçekte aradığı en temel içeriği dikkate alarak, tasarım bu etkenlere göre yapılmalıdır.

Responsive tasarım için uygun fotoğraflar kullanmak, web sitesi yapısı ve görüntüsü için en önemli etkenlerden biridir. Fotoğrafların mobil uyumlu web sitesi ekranlarında nasıl ölçekleneceğini ve yerleşeceğini düşünmemiz gerekir.

Çünkü kısıtlı alanı olan mobil cihazlarda, kullanıcılara fotoğrafları ve içerikleri en net ve göze hitap edecek şekilde göstermek hem web sitesinin sürekliliğini hem de ziyaret süresini uzatır.

Responsive tasarımda, mobil uyumlu web sitesi menü görünümü büyük önem taşır.

Masaüstü ekranlar için tasarlanan menülerin genişliği mobil cihazlara sığmadığı için, küçük ekranlarda hamburger menü kullanılır. Bu menü geniş olan menü kısmını dikey olarak yerleştirir. Böylece kullanıcı rahat bir şekilde erişim sağlarken, web sitesinin de kullanılabilirliği artar.

Adaptive Tasarım ve Responsive Tasarım Arasındaki Farklar

Adaptive tasarımlar genelde sabit genişlikteki cihazlar için kullanılır. Örneğin genişliği 16:9 oranında olan bir masaüstü bilgisayar ekranı için güzel görünüme sahip olan bir web sitesi, 4:9 – 8:9 gibi orana sahip olan cihazlarda kaymalara, taşmalara ve görüntüde eksilmelere neden olur.

Responsive tasarım ise Adaptive tasarımın aksine, görüntülendiği her cihaza uyacak şekilde tasarlanır. Bu durum, sitede uygulanan temanın daha farklı boyutta cihazlara hitap etmesini sağlar.

Fakat kodlaması ve tasarımı, Adaptive tasarıma göre daha uzun olsa da, web sitesinde sürekliliği ve görünümü her zaman en üst noktaya taşır.

Günlük kullanımlarda en az 2 farklı cihaz kullanıldığını düşündüğümüzde, mobil uyumlu web sitesi için responsive tasarımın kullanıcılara daha tutarlı ve göze hitap eden bir görünüm sunduğunu söyleyebiliriz.

 

Categories
Rehber Web Geliştirme

Rekabetin Gerisinde Kalmayın: Web Site Hızlandırma Yolları

Web sitenizin iyi veya kötü performans gösterdiğini nasıl anlarsınız? Bu performansı ölçmek için hangi araçları veya metrikleri kullanıyorsunuz?

Bu sorulara cevap veremiyorsanız, iş dünyasında yalnız değilsiniz. Pek çok işletme, hiçbir fikre sahip değil veya bu konunun çok karmaşık olduğunu düşünüyor.

Tasarım ve içerik olarak ne kadar dolu bir siteniz olsa da sitenizin hızı düşük ise ziyaretçilerinizin %80’ini kaybediyorsunuz demektir.

Web site trafiğinizin artmasını ve ziyaretçilerinizin sitenizde daha fazla vakit geçirmesini sağlamak istiyorsanız, web sitenizin yavaş olmaması gerekir.

Ayrıca Google’un sıralama algoritmaları arasında 200’ün üzerinde farklı madde mevcuttur. Bunlar arasında ilk üç maddede sayfa açılış hızı yer alır.

Web Site Hızı Nasıl Ölçülür?

PageSpeed Insights

google page speed insights sayfa hızı ölçme aracı web sayfası ekran görüntüsü
Google ekibi her zaman web performansı optimizasyonu ve araçlarının ön saflarında yer almıştır. PageSpeed Insights sayfalarınızı analiz eder, daha sonra onları daha hızlı hale getirmek için öneriler oluşturur.

GT Metrix

gt metrix sayfa hızı ölçme aracı web sayfası ekran görüntüsü

PageSpeed Insights’a alternatif olarak kullanabileceğiniz, Google Page Speed ​​ve YSlow kullanarak sayfanızın hız performansını analiz eden ücretsiz bir araçtır.

Web sitemizin hızını nasıl ölçeceğimizi öğrendiğimize göre, 2 adımda web site hızlandırma yolları tavsiyelerimizi detaylandırmaya başlayalım.

1. Gzip Sıkıştırma

Gzip (GNU zip) bir dosya formatı ve dosya sıkıştırma ve açma için kullanılan yazılımdır. Gzip sıkıştırması sunucu tarafında çalışır ve html, css ve JavaScript gibi metin dosyalarınızın boyutunda azalma sağlar. Bu sayede sayfa açılış hızınızda fayda sağlamış olursunuz.

Gzip sıkıştırmayı etkinleştirmek için .htaccess dosyanıza erişmeniz gerekmektedir.

Aşağıdaki kodu .htaccess dosyanıza ekleyip, mod_deflate (önerilen) methoduyla gzip sıkıştırmasını başlatabilirsiniz.


<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/opentype

# For Older Browsers Which Can't Handle Compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

 

Kullandığınız sunucu mod_deflate’yi desteklemiyorsa mod_gzip uygulayabilirsiniz.

 


<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_include mime ^text/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_include handler ^cgi-script$
</ifModule>

Eğer WordPress kullanıyorsanız;  GZip Ninja Speed Compression eklentisini kurup gzip sıkıştırmayı etkinleştirebilirsiniz.

Joomla kullanıyorsanız; yönetici panelinin Sistem > Genel Yapılandırma > Sunucu bölümünden gzip sıkıştırmasını etkinleştirebilirsiniz.

2. Görsel Optimizasyonu

görsel optimizasyon örneği

Kalite ve Boyut Dengesi

Web sitenizde genellikle kullanıcılara kaliteli görseller sunmak istersiniz. Fakat kaliteli görseller, dolayısıyla yüksek boyuta sahip olacak ve web sayfanızın açılış hızını en çok etkileyecek faktörlerin başında gelecektir. Bu nedenle web sayfanıza yüklenecek tüm görselleri öncesinde mutlaka optimize etmeli ve kaliteden olabildiğince ödün vermeyerek küçültmelisiniz. Görsellerinizi optimize edebileceğiniz bir çok ücretli ve ücretsiz araç bulunmaktadır.

Ertelemeli Görsel Gösterimi (Lazy Load)

Geç yüklemenin temel fikri, görüntüleri yalnızca kullanıcıların bunları görüntülemesi gerektiğinde yüklemektir. Kullanıcılar sayfadaki tüm öğelerin yüklenmesini beklemek zorunda kalmazlar ve bu nedenle web sayfasını daha erken kullanmaya başlayabilirler.

Bu, sayfalarınızın yalnızca ekranın üst kısmındaki resimleri göstereceği anlamına gelir; geri kalanı, kullanıcı sayfayı kaydırır kaydırmaz gelecektir.

Teknik olarak konuşursak, Lazy Load ziyaretçilerinizin mevcut görüntü alanını kontrol eden ve yalnızca ekranın üst kısmındaki görüntüleri, yani onlar tarafından görülebilen görüntüleri yükleyen bir JavaScript’tir.

Lazy Load Nasıl Kullanılır?

  •  Pure Javascript

HTML:


<img class="lazy" data-src="Görselin Adresi veya Sitedeki Yolu" />

CSS:


.lazy{
display:block;
width:100%;
}

.text-area{
margin:30px 0;
}

JQuery:


$(document).ready(function () {
  $(window).scroll(function () {
    $(".lazy").each(function () {
      if (
        $(this).offset().top <
        $(window).scrollTop() + $(window).height() + 100
      ) {
        $(this).attr("src", $(this).attr("data-src"));
      }
    });
  });
});
  • 3. Parti Uygulamalar

Jquery Lazy Load

Vanilla Lazy Load

Dosya Formatı Seçimi

En çok kullanılan dosya formatları JPEG ve PNG dışında çok bilinmeyen WebP dosya formatını seçmek site hızımız açısından çok uygun olacaktır. Google tarafından JPEG formatının yerini almasını amaçlayarak geliştirilen WebP formatı, kaliteden ödün vermeden resim dosya boyutlarını küçültmek amacıyla son yıllarda oldukça yaygınlaşmıştır.

WebP’nin diğer formatlara göre birçok avantajı vardır.

  • Dosya boyutları çok daha küçüktür.
  • Boyutları küçük olmasına rağmen kaliteleri bozulmaz.
  • Her türlü görsel formatı WebP’ye dönüştürülebilir.
  • Diğer formatlara göre daha fazla sıkıştırılma özelliğine sahiptir.
  • Diğer formatlara göre daha hızlı yüklenen görsel formatıdır.
  • Kaynak tüketimini minimum seviyede tutar.

WebP’nin dezavantajları ise, formatı yaygın olarak desteklenmiyor. Adobe Photoshop gibi yaygın kullanılan görüntü işleme programları WebP’ dosya formatını desteklemiyor. ImageMagick, Pixelmator, XnConvert ve Leptonica WebP uzantısını destekleyen az sayıdaki uygulamalar arasında sayılabilir.

PNG ve JPEG dosyalarınızı WebP’ye dönüştürebileceğiniz web siteleri:

Web sitenizi hızlandırmak veya diğer hizmetlerimizle profesyonel yardım almak için bizimle iletişime geçebilirsiniz.