1

ユーザーがプロジェクトを作成してこのページで表示できる機能があります。リソース (pdf、img など) をインポートして、プロジェクトと共に保持することができます。だから今、私は、ユーザーが自分のすべてのものと、同じグループに属している人々を、きれいなリボンを zip ファイルにまとめてエクスポートできるようにする機能を作成したいと考えています。

現在、私は Archive:Zip を使用してファイルを事前に圧縮し、CRC32 チェックサムを保持し、これを毎日の cronjob として実行して、ユーザーの待ち時間を短縮しています。ただし、いずれかのファイルに変更がある場合は、すべてを再実行する必要があります。

私の最初のベンチマークでは、103MB のファイルの実行に最大 47 秒かかることがわかりました。このプロセスには、それらを XSL にリンクする XML の生成、画像のコピー、iframe の html などが含まれます。

テーブルまたはテキスト ファイルを作成して、すべてのファイルの CRC32 チェックサムまたは最終更新日を一時保存領域に保持し、ユーザーがエクスポートをクリックするたびにこのリストと比較し、新しいファイルがある場合は、キャッシュされた zip ファイルから同じファイルを削除し、新しいファイルを追加します。または、緩いファイルをすべて保持し、新しいファイルをコピーして置き換え、クリックするたびにアーカイブを実行します。

私の質問は次のとおりです。

  1. これは時期尚早または不適切な最適化手法と見なされますか?
  2. これを適切に最適化するにはどうすればよいですか?
  3. この種の最適化手法について学べる書籍やリソースはありますか?
4

1 に答える 1

1

次のアイデアの何が問題になっていますか。

  • ユーザーファイルが変更される(ファイルの追加、削除、または変更)たびに、ある種のフラグを設定します。
  • ファイルが変更された各ユーザーに対して夜間圧縮を実行してから、そのフラグをリセットします。
  • フラグが設定されているときにユーザーがエクスポートを要求した場合、エクスポートが完了する前に再度圧縮を実行する必要があります(これを回避する方法はありません)。

ユーザーエクスペリエンスをさらに高速化するために、エクスポート要求をエクスポート操作から切り離すこともできます。たとえば、(フラグが設定されている)ユーザーがエクスポートを要求した場合、圧縮が発生したときにエクスポートが実行されることをユーザーに通知し、別のフラグを設定します。次に、上記の2番目の手順を変更して、この2番目のフラグが設定されている場合は、新しく作成されたパッケージもエクスポートします。

これにより、ユーザーは何かが起こるというフィードバックを即座に得ることができますが、うなり声の仕事は未来に移ります。

または、エクスポートを圧縮に関連付ける必要はありません。毎晩圧縮することもできますが、必要に応じて、日中に追加の圧縮/エクスポートジョブを許可します。ただし、リクエストをイベントから切り離すのは良いことです。

あなたの特定の質問に答えます。

1/私はこの時期尚早または悪い最適化を考慮していません。「コード」は、要求されたすべてのことを実行するため、機能的に完全であり、最適化するのに適切なタイミングです。さらに、ボトルネックを特定し、適切な領域を最適化しています。

2/上記の私のテキストを参照してください。自分が行ったことを正確に実行して最適化する必要があります。ボトルネックを特定し、それを改善することに集中してください。圧縮パフォーマンスが大幅に向上する可能性は低いため、私が提案したデカップリングの「トリック」は優れたものです。プログレスバーやスプラッシュ画面のように、それは通常、速度自体ではなく、ユーザーの速度の認識に関係しています。

3 /本?気にしないでください。ネット上には何千ものリソースがあります。SOに質問し続け、すべての回答を印刷します。最終的にあなたの脳は私のものと同じくらいいっぱいになり、コードの新しいスニペットはすべてあなたにあなたの妻の名前を一時的に忘れさせるでしょう:-)。

于 2009-01-05T10:17:35.700 に答える