クラむアント偎でフォヌラム゚ンゞンの改善

私たちの倚くは、サヌバヌ䞊のファむルを倉曎せずに、ロヌカルツヌルを䜿甚しおWebサむトの倖芳を倉曎できるこずを認識しおいたす。 これを行うにはさたざたな方法がありたすが、最も䞀般的なのはナヌザヌスクリプトずスタむルであり、ブラりザによっおロヌドされたペヌゞに自動的に適甚されたす。 もちろん、そのような線集の可胜性は非垞に限られおおり、デヌタベヌスぞの非暙準のク゚リを必芁ずする深刻な問題を解決するには、この方法は機胜したせん。



ただし、この堎合でも、すべおがそれほど絶望的ではないこずが刀明する堎合がありたす。 この蚘事では、トピックや投皿の既読ステヌタスの衚瀺を修正するphpBB2フォヌラム゚ンゞン甚のロヌカルアドむンを䜜成した経隓に぀いお説明したす。 この詊みの結果は完党に機胜する補品でしたが、今では垞に䜿甚しおいたすが、この蚘事を執筆する目的は補品のプレれンテヌションではなく、問題を解決するアプロヌチの説明です。 私は受け取ったプログラムのコヌドを投皿したすが、タスクの詳现のため、特定のサむトの゚ンゞンの予備的なそしおかなり骚の折れる構成なしでは、それは十分に普遍的ではなく、そのたた䜿甚できたせん。 がっかりしないように、事前に譊告するこずにしたした。



そしお今、問題文に関するより詳现に瀺したす。



3番目のバヌゞョンはphpBBの珟圚のバヌゞョンであるず長い間考えられおきたしたが、2番目のバヌゞョンはただむンタヌネット䞊で非垞に䞀般的です。 私のツヌルが戊うように蚭蚈されおいるphpBB2の匱点のリストを以䞋に瀺したす。

  1. ログむンたたはブラりザを再起動した埌、および䞀定時間非アクティブになった埌、未読トピックはすべお自動的に既読ずしおマヌクされたす。
  2. トピックを開くず、開いおいるペヌゞに関係なく、トピック党䜓が読み取られたす。
  3. 読み取りステヌタスは、シリアル化された配列ずしおクッキヌに保存されたす。 Cookieの最倧サむズは通垞4 KBに制限されおいるため、玄140トピックのステヌタスのみを保存できたす。 アクティブなフォヌラムの堎合、これはごくわずかです。
肩をすくめる人もいたすが、実際問題は䜕ですか しかし問題は、すべおの事項に遅れないようにしたい堎合、未読のトピックずメッセヌゞを基本スキンのオレンゞリヌフでマヌクするず、どのトピックが曎新され、どのトピックが曎新されおいないかをすばやく確認できるこずです。 あなたは、たずえば、脇にそれらを曎新するためにフォヌラムに移動し、任意のメッセヌゞに迅速に察応し、残りの郚分を読んでするこずになりたしたこずを決定した堎合は、未読の状態に次の蚪問は廃棄される、そしおそれぞれの最埌の蚪問だったずきに思い出しお、手動で新しいメッセヌゞを探すこずが必芁です特定のトピック、および投皿の日付たたはテキストを探し、その瞬間からその䞭に登堎したもの。 たた、垞にすべおのトピックを䞀床に読んだずしおも、これは保蚌ではありたせん。結局、ブラりザヌがクラッシュしたり、コンピュヌタヌがクラッシュしたり、ラむトが消えたりする可胜性がありたすすべおのナヌザヌがUPSを持っおいるわけではありたせん。



もちろん、問題に察する最も正しい解決策はフォヌラム゚ンゞンを倉曎するこずですが、実際にはこれは垞に可胜ずはほど遠いものです。 したがっお、私はこの問題を自分で、クラむアント偎で解決しようずするこずにしたした。 もちろん、サヌバヌ䞊のデヌタベヌスに盎接アクセスするこずなく、完党に理想的な゜リュヌションに疑問の䜙地はありたせん。 具䜓的には、ほずんどの堎合、正確にあなたが圌のテヌマのすべおのペヌゞのフルセットをダりンロヌドし、分析しない限り、それは長い時間です正しくホヌムペヌゞにアむコンを衚瀺するために特定のサブフォヌラムで未読の存圚/䞍圚を決定するこずはできたせん。 それにもかかわらず、いく぀かの重芁な改善を達成するこずはかなり可胜です。



合蚈アドむンアヌキテクチャは以䞋のずおりである。各被隓者のための最埌の蚪問のタむムスタンプを栌玍し、プラスフォヌラムのすべおのペヌゞを通過するプロキシサヌバヌを実行しおいるロヌカルデヌタベヌスに栌玍されおいるクラむアントマシン䞊で、修正ラベルは、実際の状況に応じおテヌマやメッセヌゞを持っおいたすロヌカルデヌタベヌスから取埗した読み取り倀およびもちろん、必芁に応じおこのデヌタベヌスを曎新したす。



基本圢匏ずしお、「00000000000000」ずいう圢匏の行のセットを持぀テキストファむルを遞択したした。 各行は1぀のトピック、行番号れロからカりント-トピックの識別子、およびUNIX時間圢匏での最埌の蚪問のタむムスタンプに察応し、行のコンテンツずしお蚘録されたす。 れロトピックはないため、れロ行は特別な方法で䜿甚されたす。フォヌラム党䜓の日付/時刻が保存されるため、すべおのフォヌラムトピックを䞀床に既読ずしおマヌクできたす。 したがっお、各トピックに぀いお、最埌の蚪問のリアルタむムは、䞀般的なフォヌラムず特にこのトピックの2぀の倀の最倧倀ず芋なされたす。



なぜ私は、テキスト圢匏で停止したしたか たず、必芁に応じお、バむナリ゚ディタヌを䜿甚せずに゚ラヌを修正するのに䟿利です。 第二に、私のプロキシサヌバヌはパヌルで曞かれおおり、バむナリファむルよりもテキストファむルで䜜業する方が䟿利です。 テキスト文字列から数倀を解析するこずは、リ゜ヌスを倧量に消費する操䜜ではなく、文字列の長さが固定されおいるため、ファむル党䜓を行ごずに読み取らずに、むンデックスで目的のレコヌドに盎接移動できたす。



プロキシサヌバヌの実装に関しおは、その䞊でテキストを操䜜するのが非垞に䟿利であるずいう理由で、パヌル蚀語が遞択されたしたそしおもちろん、HTMLの解析が重芁な郚分になりたす。 私の基準では、結果ずしお埗られる速床はかなり蚱容できるこずが刀明したしたいずれにせよ、別の蚀語に切り替えるこずによる朜圚的なパフォヌマンスの向䞊は、劎力ず時間のコストほど重芁ではないようです。 プロキシサヌバヌはそのポヌトをリッスンし、ブラりザヌから芁求を受信するず、タヌゲットサヌバヌに芁求を送信し、応答を読み取り、受信したペヌゞのコンテンツをブラりザヌに送信したす。 その途䞭で、ペヌゞはフィルタヌを通過し、その動䜜は宛先アドレスに䟝存したす。 これは我々が必芁ずするフォヌラムの䞀぀であり、viewtopic.phpスクリプト 、viewforum.php、index.phpの たたはフォヌラムのちょうどルヌトURLの䞀぀ではなく、䜕でもある堎合、フィルタは、日付に基づいお、ラベルやメッセヌゞを亀換し、ペヌゞを解析するために開始したす/ロヌカルデヌタベヌスから取埗した最埌の蚪問の時間。 そうでない堎合、フィルタヌは機胜せず、倉曎されおいないコンテンツをブラりザヌに送信したす。



最も困難で予枬䞍可胜な郚分は解析です。 問題は、特定のフォヌラムごずに異なるテヌマず拡匵機胜をむンストヌルできるため、サヌバヌから受信したペヌゞのHTMLコヌドが非垞に広い範囲で倉化するこずです。 さたざたなフォヌラムの機胜を考慮するために、phpBB2゚ンゞンの䞻芁な構造的機胜のみをハヌドコヌディングし、起動時にプロキシサヌバヌによっお読み蟌たれる個別のモゞュヌルに特定の信号線を配眮し、各フォヌラムを独自のルヌルセットに埓っお凊理できるようにしたした。 もちろん、新しいフォヌラムのサポヌトを远加する必芁がある堎合は、サヌバヌから受信したHTMLペヌゞを分析しお、信号線の匷調衚瀺ず蚭定のすべおの䜜業を手動で行う必芁がありたす。 ゚ンゞンの倉曎が小さい堎合、すべおがこれに制限されたす。 しかし、゚ンゞンが倧幅に再蚭蚈され、HTML構造が完党に異なっおいるこずが刀明する堎合がありたす。 その埌、メむンモゞュヌル党䜓をやり盎す必芁がありたすが、䞀般に「マルチフォヌラム」を維持できるずいうのは事実ではありたせん。 プロキシサヌバヌの別のバヌゞョンを保持する方が簡単である可胜性がありたす。これは、「ファンシヌ」フォヌラムの1぀に特化したものです。



解析が正しく機胜するためには、フォヌラムのプロファむルを倉曎する必芁もありたす。 事実、デフォルトでは、゚ンゞンは秒を指定せずにメッセヌゞの日付/時刻を衚瀺したすが、これ以䞊時間をかける堎所がないため、マヌクを配眮する際の゚ラヌは1分になりたすが、これはもちろん倚すぎたす。 したがっお、プロファむル[蚭定]でより完党な時間圢匏を秒単䜍で遞択する必芁がありたす。 「D dmY、Gis」ずいう圢匏に決めたした。これにより、「Mon 02/14/2011、10:57:44」の圢匏で日付を衚瀺できたすもちろん、プロキシサヌバヌは曜日を必芁ずしたせんが、愛する人にずっおも䟿利です忘れないでください。 別の圢匏を䜿甚する堎合は、タむムスタンプの解析機胜を適切に修正する必芁がありたす。 日付の代わりに「今日」たたは「昚日」ずいう単語を挿入できるphpBBの倉曎を忘れおはなりたせん。 残念ながら、これにはコヌドの改良も必芁です。



たあ、いく぀かのより倚くの機胜を蚀及するのを残したした。



さお、誰かがこのトラブルをすべお怖がらなかった堎合、サヌバヌ自䜓はここからダりンロヌドできたす アヌカむブ、5 Kb。 キットには、公匏フォヌラムTotal Commanderの䞀連のルヌルがありたす。これは、私の実隓の基瀎ずしお採甚したもので、基本的にこのすべおのボディアゞヌが始たりたした。



All Articles