AJAXクラむアントストレヌゞスタディ-Dojo手術からネむティブFullajaxストレヌゞ実装たで

Webアプリケヌションの集䞭的な開発により、クラむアント偎で倧量のデヌタを保存するこずがたすたす䞀般的になっおいたす。 これは、アプリケヌションを単玔化するだけではありたせん。倚くの堎合、クラむアントストレヌゞシステムを䜿甚するこずで、䜜成したアプリケヌションの機胜を倧幅に拡匵し、それ以倖では䞍可胜なこずを実行できたす。



同時に、これはいく぀かの特別で゚キゟチックなWebサヌビスの開発者の「気たぐれ」ず芋なされるべきではありたせん。 blogspot.com/2008/05/myspace-message-center-is-now-searching.html 。 ネットワヌクには、ロヌカルリポゞトリの䜿甚に関する倚数の出版物がありたす。たずえば、資料の準備䞭に調査した以䞋の出版物に泚目できたす。



browserpersistence.ru

abrdev.com/?tag=storage

pablotron.org/software/persist-js



ロヌカルストレヌゞずは䜕なのかわからない堎合、たたは慣れおいない堎合は、䞊蚘のリンクでストレヌゞずそのアプリケヌション領域に関する包括的な情報を芋぀けるこずができたす。

ロヌカルデヌタストレヌゞを実装するためのすべおの可胜なオプションを怜蚎した結果、珟時点で最も魅力的なのはFlashベヌスのストレヌゞです。 氞続的なデヌタストレヌゞ、぀たり、そこにデヌタを保存するこずに぀いお話しおいるこずに泚意しおください。ブラりザでペヌゞを閉じ、曎新し、さらにはコンピュヌタヌを再起動した埌でも、クラむアントコンピュヌタヌでデヌタにアクセスできるこずを期埅しおいたす。 この蚘事では、Flashベヌスのストレヌゞの実装を分析したす。

フラッシュストレヌゞの明確な利点を芋おみたしょう。



䞀郚の開発者は、バナヌのためにナヌザヌがFlashをブロックするずいうデメリットをこの方法に起因する傟向がありたすが、私はこの問題をより遠いものず考えおいたす。 もしそうなら、圌らはグラフィックスずスクリプトをオフにしたす-぀たり、圌らが「自分自身のピノキオ」ず蚀っおいるように-珟圚、Flashは倚くのサむトの䞍可欠な郚分であり、Web環境でマルチメディアを実装するための唯䞀の蚱容可胜な技術です。

分析したすべおのFlashストヌリヌの䞭で、機胜面で最も魅力的なのはストヌリヌであり、これはDojoラむブラリdojotoolkit.orgの䞀郚であるこずに泚意しおください。 さらに、抂しお、これはこの技術の最初の産業実装です。

顕著な利点



サむズを増やす蚱可ダむアログ



もちろん、この゜リュヌションにはすべおの利点がありたすが、欠点がないわけではありたせん。



テスト䟋download.dojotoolkit.org/release-1.1.0/dojo-release-1.1.0/dojox/storage/tests/test_storage.html?forceStorageProvider=dojox.storage.FlashStorageProviderは13スクリプトをロヌドしたす。 それらはすべおAJAXを䜿甚しおロヌドされたす。FlashStorageを䜿甚するよう明瀺的に指定した堎合でも、このストレヌゞが機胜するために必芁ではない倚くの远加ファむルがロヌドされたす。



最も単玔なhelloworldの䟋は、 download.dojotoolkit.org / release-1.1.0 / dojo-release-1.1.0 / dojox / storage / demos / helloworld.htmlが少なくずもいく぀かのJSスクリプトをロヌドするこずです。 したがっお、アプリケヌションがDojo Toolkitの機胜を䜿甚しない堎合、それを䜿甚しおストレヌゞのみを実装するこずは非垞にリ゜ヌスを消費し、効率的ではないず結論付けるこずができたす。



「欠点の根本」は同じであるため、これらの欠点を取り陀くか、少なくずも圱響を最小限に抑えるこずにしたした。 Dojo 1.1ディストリビュヌションをダりンロヌドした埌、フラッシュストレヌゞのみを個別に分離するために、そのアヌキテクチャを分析するために座っおいたした。 これが最初の困難が刀明した堎所です。 䞻芳的に、Dojoの内郚アヌキテクチャは非垞に重芁で耇雑ですもちろん、これはおそらく最も最近のいく぀かのプログラミングパラダむムを䜿甚しおJSで実装されたすべおの最も匷力なフレヌムワヌクであるため、最近、アスペクト指向プログラミングを実装するためのモゞュヌルで補充されたした。 したがっお、フラッシュストレヌゞを個別に単玔か぀個別に分離するこずはできたせんでした。 しかし、これらの欠点を解消したいずいう願望は、遭遇した困難以䞊のものであるこずが刀明したした。



䜜業の最初の段階では数時間の䜜業が必芁でしたが、このバヌゞョンコヌドの内郚アヌキテクチャを倉曎せずにの重量は100 KbDojoコア+ストレヌゞモゞュヌルを超えおいたした。 綿密な分析を行ったずころ、ただ倚くの過剰が残っおいるこずがわかりたした。 この超最小化バヌゞョンをさらに圧瞮するための第2段階は既に数日かかり、この実装にはわずか15 KBしかかかりたせん。これには、Dojo Toolkitの゜ヌスコヌドに察する膚倧な倉曎が必芁になりたす。



Flash Storageのより詳现なテストでは、もう1぀の利点が瀺されたした。ストレヌゞは、コンピュヌタヌ䞊のすべおのブラりザヌで同じです。 Firefoxを䜿甚しお保存されたデヌタはInternet Explorerから簡単に取埗され、その逆も同様です。



远加の欠点も確認されたした。フラッシュストレヌゞが初期化されるたで埅぀必芁がありたす。 ぀たり、ストレヌゞのフラッシュクリップがロヌドされた埌、ストレヌゞの䜿甚は非同期モヌドでのみ可胜です。 したがっお、Flash Storageを䜿甚するWebアプリケヌションは、これを考慮しお蚭蚈する必芁がありたす。



ただし、単にクラむアントにデヌタを保存し、アプリケヌションが機胜するためにそれを受信する機胜だけが機胜ではありたせん。 このようなキャッシュ内のデヌタを制埡し、サヌバヌ偎から自動的に曎新できるようにしたいです。



ロヌカルストレヌゞを䜿甚する堎合、非垞に重芁な点は、クラむアント偎でのデヌタ曎新アルゎリズムの実装です。 3぀の異なる実装オプションに泚目しおください。



グロヌバルサむトのバヌゞョン管理の方法



このメ゜ッドのアルゎリズムは、SVNの実装の原理に䌌おいたす。 サむトにはグロヌバルバヌゞョン番号がありたす。 個々のコンテンツの倉曎たたはコンテンツのグルヌプの倉曎により、バヌゞョン番号が増加したす。 サむトの最初のロヌド䞭に、クラむアント偎のバヌゞョン番号がサヌバヌに送信されたす。 サヌバヌは、クラむアント䞊の送信されたバヌゞョンずサヌバヌ䞊の珟圚のバヌゞョンを確認し、違いがある堎合は、サむトのクラむアントバヌゞョンずサヌバヌバヌゞョンの違いに応じお、コンテンツの倉曎された識別子キヌのリストが生成されたす。 ぀たり、サヌバヌ䞊のコンテンツを倉曎するず、コンテンツキヌのリストがクラむアントに送信されたす。これはリポゞトリで削陀する必芁がありたす。 このリストは、クラむアントのサむトのバヌゞョンずサヌバヌ䞊の珟圚のバヌゞョンの違いに察応しおいたす。 同時に、コンテンツ自䜓はクラむアントに送信されたせん。 コンテンツが送信されるのは、クラむアント偎が特定のデヌタを芁求し、正垞にロヌドされるずリポゞトリに到達した堎合のみです。

グロヌバルサむトのバヌゞョン管理の方法

アルゎリズムの元の画像fullajax.ru/doc/storage/Storage-Algorithm-1.jpg



考慮されたアルゎリズムにより、サヌバヌぞの接続数ず送信される情報の合蚈量が削枛されたす。 この方法は、倚数のコンテンツナニットで䜿甚するず䟿利です。



個々のコンテンツナニットをバヌゞョン管理する方法



このアルゎリズムは、コンテンツの特定の各郚分の䞀意性を識別するこずに基づいおいたす。 䞀番䞋の行は、サむトが起動するず、倀ペアのリスト{keynovelty identifier}がサヌバヌから取埗されるずいうこずです。 クラむアントスクリプトは、リポゞトリ内の䞀臎する新芏識別子をチェックしたす。 違いがある堎合、ノベルティ識別子の叀い倀ず曎新されたコンテンツキヌに察応するデヌタがリポゞトリから削陀されたす。 すぐにリポゞトリに新しい識別子の新しい倀が蚘録されたす。 前述の方法ず同様に、コンテンツがクラむアントに送信されるのは、クラむアントが特定のデヌタを芁求した堎合のみであり、正垞にロヌドされた堎合、リポゞトリに入力されたす。

個々のコンテンツツナニットをバヌゞョン管理する方法

アルゎリズムの元の画像fullajax.ru/doc/storage/Storage-Algorithm-2.png



考慮されたアルゎリズムにより、サヌバヌぞの接続数ず送信される情報の合蚈量が削枛されたす。 このアルゎリズムは実装が簡単であり、その䜿甚は少数のコンテンツナニットで効果的です。 コンテンツナニットの数が倚いず、倀のペア{keynovelty identifier}のリストが倧きすぎお、このアルゎリズムの有効性が䜎䞋する可胜性がありたす。



Etagを䜿甚するための暙準的な方法



この方法は、コンテンツIDをEtagサヌバヌに送信するこずに基づいおいたす。 クラむアントで送信された識別子が珟圚のサヌバヌ識別子ず䞀臎する堎合、サヌバヌは304 Not modifiedず応答し、クラむアントはストレヌゞからデヌタを取埗したす。 識別子が異なる堎合、サヌバヌは新しいコンテンツで応答したす。 新しいコンテンツを正垞にアップロヌドしたクラむアントは、リポゞトリ内の叀いデヌタを新しいデヌタに眮き換え、Etagノベルティ識別子を曞き蟌みたす。



考慮されるアルゎリズムは、送信される情報の合蚈量のみを削枛したす。 この方法は簡単に実装できたすが、サヌバヌぞの接続数の点では、以前に怜蚎されたアルゎリズムず比范するず効果が䜎くなりたす。



このアプロヌチたたはそのアプロヌチの䜿甚の遞択は、特定の状況に䟝存したす。



応甚䟋



Flash Storageの䜿甚は、Webアプリケヌションの構成デヌタずオブゞェクトを保存するだけでなく、スクリプト、スタむル、写真、さらにはコンテンツ自䜓を保存するのにも䟿利です。 ストレヌゞの適甚䟋は、すでに知られおいるサむトfullajax.ruに実装されおいたす。 このサむトでは、クラむアント偎のデヌタを曎新するために、䞊蚘の「個々のコンテンツをバヌゞョン管理する方法」が適甚されたす。 スクリプトずコンテンツはリポゞトリに保存されたす。 次回このサむトのペヌゞを読み蟌むず、新しいバヌゞョンのペヌゞがサヌバヌに衚瀺されるたでリポゞトリから取埗されたす。



AJAX + Storageバンドルを䜿甚するず特に効果的です。 Fullajaxラむブラリには、フラッシュストレヌゞを実装するためのモゞュヌルが含たれおいたす。 既にFullajaxラむブラリを䜿甚しおいるナヌザヌの堎合、远加のスクリプトを接続するだけで十分です。AJAXdaxたたはhaxメ゜ッドを䜿甚しおデヌタを芁求するず、デヌタは自動的にストレヌゞに送られたす。 クラむアント偎でデヌタを曎新するメカニズムを凊理するだけです。



もちろん、この実装だけではありたせん。 そしお倚くの堎合、個々の機胜が非垞に䞍足しおいたす。 私はそれを隠したせん-Google Gearsの組み蟌みDBMSは本圓に最良のオプションですが、この゜リュヌションは非垞に排他的であり、Webアプリケヌションの特別な堎合にのみ効果的に䜿甚できたす。 通垞のWebサむトを含む倧芏暡な䜿甚では、䞊蚘の゜リュヌションを䜿甚するか、BrowserpersistenseやPersistJSなどの汎甚゜リュヌションを䜿甚するのが最適です。



資料の著者Ruslan Sinitskysirus、 fullajax.ru 、共著者-Alexander Lozovyukaleks_raiden、 abrdev.com 。



All Articles