Solana Web3.js 2.x Versiyonu: Özellik Ayrımı ve Performans Optimizasyonu
Solana Web3.js, zengin özelliklere sahip bir JavaScript kütüphanesi olarak, Kasım ayında 2.x sürümünü resmi olarak yayınladı. 1.x sürümüne kıyasla, yeni sürümde önemli değişiklikler yapıldı. Bu makalede, ana değişiklikler özetlenecektir.
2.x sürümü yeni yayımlanmış olmasına rağmen, kullanım oranı henüz yaygınlaşmamıştır ve birçok yaygın kütüphane de geçiş yapmamıştır, ancak bu değişiklikleri anlamak gelecekteki geçiş çalışmaları için faydalı olacaktır.
Versiyon Karşılaştırması
Eski sürüm kullanımı görece basit olup, yalnızca bir @solana/web3.js paketi içerir ve tüm işlevsellik bu pakette toplanmıştır. Sınıf tabanlı bir tasarıma dayanmaktadır ve çok sayıda yaygın işlemi kapsar. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevselliği neredeyse kapsayan onlarca yöntem sunar. Ayrıca, Solana cookbook içinde sunulan çok sayıda örnek kod da geliştiricilere kolaylık sağlamaktadır.
Ancak, bu tasarım bazı sorunları da beraberinde getiriyor. Geliştiricilerin gerçekten kullandığı özellikler belki de çok küçük bir kısmı kapsasa da, tüm kod kütüphanesi kullanıcı cihazına indirilecektir ve kütüphanenin kod miktarı oldukça büyük olduğundan, bu belirli bir süre alabilir.
2.x sürümü farklı bir strateji benimsedi. Resmi ekip, mevcut kod tabanını @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birkaç daha küçük modüle ayırdı. Aynı zamanda, sınıf tabanlı uygulamalardan vazgeçildi ve daha çok tekil fonksiyon yaklaşımı benimsendi. Bu değişiklik, JavaScript kodunun derlenmesi sırasında optimizasyon için faydalıdır; kullanılmayan kodlar silinecek ve kullanıcı cihazına indirilmeyecektir. Resmi belgelerdeki istatistiklere göre, yeni sürümü kullanan DApp'ler temel olarak %30 boyut optimizasyonu elde edebilir, eğer yalnızca az sayıda özellik kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin belgelerinin kalitesine daha yüksek talepler getirdi ve geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulmalarını sağlamak önemli bir konu haline geldi. Şu anda, paket adları iyi bir anlamsallığa sahip gibi görünüyor; adlarından, kullanım amaçlarını kabaca anlayabiliyoruz ve bu, bir bakıma geliştiricilerin geçiş zorluklarını azaltıyor.
Yeni sürümün kısa süre önce yayınlanması nedeniyle, birçok proje henüz geçiş yapmamıştır. Solana Cookbook'ta 2.x sürümü ile ilgili örnekler de görece azdır. Ayrıca, yeni sürüm anahtarı çiftleri oluşturma gibi çalıştırma zamanı yerleşik işlevlerini kullanma eğilimindedir, ancak belgelerde bununla ilgili açıklama yetersizdir, bu da geliştiricilerin bazı yerlerde kafa karışıklığı yaşamasına neden olabilir.
2.x sürümünün bir diğer önemli özelliği sıfır bağımlılıktır. Bu, birçok kullanıcı için o kadar önemli olmayabilir, ancak bu yılın Aralık başında @solana/web3.js 1.95.5 ve 1.95.6 sürümlerinde meydana gelen tedarik zinciri saldırılarını göz önüne alındığında, daha fazla dış girdi ve bağımlılık güvenlik olaylarının meydana gelme olasılığını önemli ölçüde artıracaktır. 2.x sürümünün yayınlanmasıyla birlikte, Web3.js geliştirme ekibi daha fazla yerel işlev kullanmaya karar verdi ve dış bağımlılıkların ve Polyfills'in getirilmesini iptal etti. Gelecekte değişiklikler olabilir, ancak şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklik Noktaları
bağlantı
1.x sürümünde, Connection sınıfı birçok yöntem sunar. Ana işlevi, RPC istek adresini yapılandırarak bir istek göndereni oluşturmaktır; ardından çeşitli istekleri göndermek için bunu kullanır.
2.x sürümü daha işlevsel bir şekilde uygulanmıştır:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
sendAndConfirmTransaction çağrıldığında, otomatik olarak HTTPS isteği gönderilir ve işlem durumunu aboneliği için WSS bağlantısı kurulur, işlem onaylandıktan sonra işlem hash'i döndürülür.
anahtar çifti
Açık anahtar ve özel anahtar ile ilgili kısımlarda da büyük değişiklikler oldu. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey sınıfları artık mevcut değil, bazı fonksiyonlarla değiştirilmiş.
Örneğin, await generateKeyPair() kullanarak bir anahtar çifti oluşturabilirsiniz, önceki Keypair.generate() yerine.
Yeni generateKeyPair bir Promise döndürüyor, çünkü yeni uygulama mümkün olduğunca JavaScript'in Web Crypto API'sinden yararlanıyor ve yerel Ed25519 uygulamasını kullanıyor. Web Crypto API'sinin birçok yöntemi asenkron. Ancak, bu değişiklik, Promise ile tanışık olan JavaScript geliştiricileri için çok fazla sorun yaratmamalıdır.
işlem gönder
1.x sürümünde yaygın olarak kullanılan Transaction ve VersionedTransaction sınıfları 2.x sürümünde artık mevcut değildir.
Eski versiyonda sağlanan System Program ile ilgili yöntemler artık mevcut değil, SystemProgram sınıfındaki statik yöntemler başka yerlerden alınmalıdır.
Örneğin, transfer komutu @solana-program/system içindeki getTransferSolInstruction fonksiyonunu çağırmalıdır.
Artık class sağlanmadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan pipe biçimini sunmaktadır. Aşağıda, pipe fonksiyonu kullanarak 1.x'deki transfer işlevinin nasıl gerçekleştirileceğine dair bir örnek bulunmaktadır:
javascript
import { pipe } from "@solana/functional";
import { getTransferSolInstruction } from "@solana/system";
import {
createSolanaRpc,
sendTransaction,
setTransactionFeePayer,
createTransaction,
appendTransactionInstruction,
} from "@solana/web3.js";
const imza = await sendTransaction(rpc, işlem, [payer]);
1.x versiyonuna kıyasla, kod miktarı artmıştır ancak özelleştirilebilirlik daha güçlüdür.
İşlemler HTTPS RPC üzerinden başlatılır ve daha sonra işlem sonuçlarını doğrulamak için WSS RPC'ye abone olunur. Yeni yöntem, WSS'ye olan bağımlılığı artırır ve bu da RPC sağlayıcılarının hizmet istikrarı için daha yüksek beklentiler doğurur.
React
@solana/web3.js projesinde ayrıca signIn gibi bazı işlevsellikler sunan bazı React Hook'ları sağlayan @solana/react adında bir kütüphane bulunmaktadır.
Özet
@solana/web3.js 2.x sürümünün yayınlanması, Solana ekibinin sürekli gelişim ve iyileştirme taahhüdünü yansıtmaktadır. Bu, geliştiricilere Solana ağıyla etkileşimde bulunmanın verimli, esnek ve özelleştirilebilir bir yolunu sunarak, platformun benimsenmesi ve gelişimini desteklemektedir.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
18 Likes
Reward
18
7
Share
Comment
0/400
BlindBoxVictim
· 07-10 20:02
İlk projenin ne zaman tamamlanacağını bekleyelim... Yorgun görünüyor.
View OriginalReply0
ForeverBuyingDips
· 07-10 17:13
Şimdi tekrar taş taşımaya mı başlayacağız?
View OriginalReply0
airdrop_huntress
· 07-10 07:51
Yükseltme çok hızlı ama bu hatayı düzeltebilir misiniz?
View OriginalReply0
DefiEngineerJack
· 07-10 07:47
*aslında* modülerleştirme basit değil... performans artışı umut verici görünüyor ama bana benchmarkları göster ser
View OriginalReply0
GateUser-75ee51e7
· 07-10 07:44
sol kardeş bu yine büyük bir güncelleme olacak
View OriginalReply0
SelfCustodyIssues
· 07-10 07:41
Ne berbat bir optimizasyon, yine kodu yeniden yazmam gerekecek.
View OriginalReply0
GlueGuy
· 07-10 07:28
Ah, yükseltildi, fena değil. Gidip bakalım çok mu çukur var.
Solana Web3.js 2.x sürümü yayınlandı: Fonksiyon ayrımı ve performans optimizasyonu
Solana Web3.js 2.x Versiyonu: Özellik Ayrımı ve Performans Optimizasyonu
Solana Web3.js, zengin özelliklere sahip bir JavaScript kütüphanesi olarak, Kasım ayında 2.x sürümünü resmi olarak yayınladı. 1.x sürümüne kıyasla, yeni sürümde önemli değişiklikler yapıldı. Bu makalede, ana değişiklikler özetlenecektir.
2.x sürümü yeni yayımlanmış olmasına rağmen, kullanım oranı henüz yaygınlaşmamıştır ve birçok yaygın kütüphane de geçiş yapmamıştır, ancak bu değişiklikleri anlamak gelecekteki geçiş çalışmaları için faydalı olacaktır.
Versiyon Karşılaştırması
Eski sürüm kullanımı görece basit olup, yalnızca bir @solana/web3.js paketi içerir ve tüm işlevsellik bu pakette toplanmıştır. Sınıf tabanlı bir tasarıma dayanmaktadır ve çok sayıda yaygın işlemi kapsar. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevselliği neredeyse kapsayan onlarca yöntem sunar. Ayrıca, Solana cookbook içinde sunulan çok sayıda örnek kod da geliştiricilere kolaylık sağlamaktadır.
Ancak, bu tasarım bazı sorunları da beraberinde getiriyor. Geliştiricilerin gerçekten kullandığı özellikler belki de çok küçük bir kısmı kapsasa da, tüm kod kütüphanesi kullanıcı cihazına indirilecektir ve kütüphanenin kod miktarı oldukça büyük olduğundan, bu belirli bir süre alabilir.
2.x sürümü farklı bir strateji benimsedi. Resmi ekip, mevcut kod tabanını @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birkaç daha küçük modüle ayırdı. Aynı zamanda, sınıf tabanlı uygulamalardan vazgeçildi ve daha çok tekil fonksiyon yaklaşımı benimsendi. Bu değişiklik, JavaScript kodunun derlenmesi sırasında optimizasyon için faydalıdır; kullanılmayan kodlar silinecek ve kullanıcı cihazına indirilmeyecektir. Resmi belgelerdeki istatistiklere göre, yeni sürümü kullanan DApp'ler temel olarak %30 boyut optimizasyonu elde edebilir, eğer yalnızca az sayıda özellik kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin belgelerinin kalitesine daha yüksek talepler getirdi ve geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulmalarını sağlamak önemli bir konu haline geldi. Şu anda, paket adları iyi bir anlamsallığa sahip gibi görünüyor; adlarından, kullanım amaçlarını kabaca anlayabiliyoruz ve bu, bir bakıma geliştiricilerin geçiş zorluklarını azaltıyor.
Yeni sürümün kısa süre önce yayınlanması nedeniyle, birçok proje henüz geçiş yapmamıştır. Solana Cookbook'ta 2.x sürümü ile ilgili örnekler de görece azdır. Ayrıca, yeni sürüm anahtarı çiftleri oluşturma gibi çalıştırma zamanı yerleşik işlevlerini kullanma eğilimindedir, ancak belgelerde bununla ilgili açıklama yetersizdir, bu da geliştiricilerin bazı yerlerde kafa karışıklığı yaşamasına neden olabilir.
2.x sürümünün bir diğer önemli özelliği sıfır bağımlılıktır. Bu, birçok kullanıcı için o kadar önemli olmayabilir, ancak bu yılın Aralık başında @solana/web3.js 1.95.5 ve 1.95.6 sürümlerinde meydana gelen tedarik zinciri saldırılarını göz önüne alındığında, daha fazla dış girdi ve bağımlılık güvenlik olaylarının meydana gelme olasılığını önemli ölçüde artıracaktır. 2.x sürümünün yayınlanmasıyla birlikte, Web3.js geliştirme ekibi daha fazla yerel işlev kullanmaya karar verdi ve dış bağımlılıkların ve Polyfills'in getirilmesini iptal etti. Gelecekte değişiklikler olabilir, ancak şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklik Noktaları
bağlantı
1.x sürümünde, Connection sınıfı birçok yöntem sunar. Ana işlevi, RPC istek adresini yapılandırarak bir istek göndereni oluşturmaktır; ardından çeşitli istekleri göndermek için bunu kullanır.
2.x sürümü daha işlevsel bir şekilde uygulanmıştır:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
sendAndConfirmTransaction çağrıldığında, otomatik olarak HTTPS isteği gönderilir ve işlem durumunu aboneliği için WSS bağlantısı kurulur, işlem onaylandıktan sonra işlem hash'i döndürülür.
anahtar çifti
Açık anahtar ve özel anahtar ile ilgili kısımlarda da büyük değişiklikler oldu. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey sınıfları artık mevcut değil, bazı fonksiyonlarla değiştirilmiş.
Örneğin, await generateKeyPair() kullanarak bir anahtar çifti oluşturabilirsiniz, önceki Keypair.generate() yerine.
Yeni generateKeyPair bir Promise döndürüyor, çünkü yeni uygulama mümkün olduğunca JavaScript'in Web Crypto API'sinden yararlanıyor ve yerel Ed25519 uygulamasını kullanıyor. Web Crypto API'sinin birçok yöntemi asenkron. Ancak, bu değişiklik, Promise ile tanışık olan JavaScript geliştiricileri için çok fazla sorun yaratmamalıdır.
işlem gönder
1.x sürümünde yaygın olarak kullanılan Transaction ve VersionedTransaction sınıfları 2.x sürümünde artık mevcut değildir.
Eski versiyonda sağlanan System Program ile ilgili yöntemler artık mevcut değil, SystemProgram sınıfındaki statik yöntemler başka yerlerden alınmalıdır.
Örneğin, transfer komutu @solana-program/system içindeki getTransferSolInstruction fonksiyonunu çağırmalıdır.
Artık class sağlanmadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan pipe biçimini sunmaktadır. Aşağıda, pipe fonksiyonu kullanarak 1.x'deki transfer işlevinin nasıl gerçekleştirileceğine dair bir örnek bulunmaktadır:
javascript import { pipe } from "@solana/functional"; import { getTransferSolInstruction } from "@solana/system"; import { createSolanaRpc, sendTransaction, setTransactionFeePayer, createTransaction, appendTransactionInstruction, } from "@solana/web3.js";
const rpc = createSolanaRpc("");
const transaction = pipe( createTransaction(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: alıcı, miktar, }) ) );
const imza = await sendTransaction(rpc, işlem, [payer]);
1.x versiyonuna kıyasla, kod miktarı artmıştır ancak özelleştirilebilirlik daha güçlüdür.
İşlemler HTTPS RPC üzerinden başlatılır ve daha sonra işlem sonuçlarını doğrulamak için WSS RPC'ye abone olunur. Yeni yöntem, WSS'ye olan bağımlılığı artırır ve bu da RPC sağlayıcılarının hizmet istikrarı için daha yüksek beklentiler doğurur.
React
@solana/web3.js projesinde ayrıca signIn gibi bazı işlevsellikler sunan bazı React Hook'ları sağlayan @solana/react adında bir kütüphane bulunmaktadır.
Özet
@solana/web3.js 2.x sürümünün yayınlanması, Solana ekibinin sürekli gelişim ve iyileştirme taahhüdünü yansıtmaktadır. Bu, geliştiricilere Solana ağıyla etkileşimde bulunmanın verimli, esnek ve özelleştirilebilir bir yolunu sunarak, platformun benimsenmesi ve gelişimini desteklemektedir.