検索
ホームページウェブフロントエンドjsチュートリアル がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理

How <canvas> 一日を救った - ブラウザーで大きな画像を処理する 一日を救った - ブラウザーで大きな画像を処理する" />

クライアントが、それぞれ 5800 前後の 28 枚の画像をアップロードしましたx 9500 ピクセル、サイズ 28 MB。これらの画像をブラウザで表示しようとすると、タブ全体が 10 分間 にわたってフリーズし、閉じることさえ拒否されました。そしてこれは、小型ラップトップではなく、Ryzen 9 CPU と RTX 4080 GPU を搭載したハイエンド マシン上で行われました。

状況は次のとおりです

当社の CMS (Grace Web) では、管理者が写真でもビデオでもファイルをアップロードすると、アップロードが完了するとすぐにそのファイルが表示されます。これは UX に最適です。アップロードが成功したこと、意図した内容がアップロードされたことを確認し、UI の応答性を示して操作感を向上させます。

しかし、これらの巨大な画像の場合、ブラウザはそれらをほとんど表示できず、フリーズしてしまいました。

問題はアップロード自体ではなく、これらの大きな画像の表示にあることに注意することが重要です。 28 個の巨大なイメージを同時に 1 つずつレンダリングするのは、あまりにも多すぎました。たとえ白紙のページであっても、それはただ…いや。

なぜこれが起こったのか (詳細)?

 がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理 に画像を表示するたびに、タグを使用すると、ブラウザは CPU、RAM、GPU、そして場合によってはドライブを使用するプロセス全体を実行します。場合によっては、画像の読み込みやレイアウトの再計算中に画像が表示される前に、このプロセスを複数回繰り返すこともあります。ピクセルの計算、ハードウェア間のデータ転送、アルゴリズムの補間などが行われます。ブラウザにとって、これは重要なプロセスです。

ブレーンストーミングされたソリューション

いくつかのオプションを検討しました:

  1. アップロード直後にサイズを変更してサムネイルを表示
    • 問題: サイズ変更には時間がかかりすぎる可能性があり、特にサイズ変更キューが空でない場合、即座に変更できるとは限りません。その結果、システムが応答しなくなります。
  2. ファイル サイズを確認し、大きなファイルの場合は名前のみを表示します
    • 問題: これは、特にメディア素材のより高度な制御とチェックを必要とするユーザーにとって、ユーザー エクスペリエンスを損なう可能性があります (ちなみに、これらは大きなファイルでも同じであることがよくあります)。

これらのソリューションはどちらも使いやすいとは思えませんでした。私たちは、管理者が必要なものをアップロードできるように制限したくなかったし、ユーザー エクスペリエンスにも妥協したくありませんでした。

電球! の使用

を思い出しました。要素は GPU をより効果的に利用してコンテンツをレンダリングします。最近、JavaScript と を使用して静かで複雑なゲームを構築している人を見ました。理論的には、大きな画像を  がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理 より効率的に処理できるはずです。

理論をテストする

 がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理 を置き換えることにしました。 を含む要素アップロードされた画像を表示します。使用したコード スニペットは次のとおりです:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');

const img = new Image();
// img.src = URL.createObjectURL(file); // Use this if you're working with uploaded files
img.src = filesroot + data.file_path; // Our existing file path
img.onload = function() {
  // Resize canvas to desired size (for preview)
  canvas.width = 80 * (img.width / img.height); // Adjust scaling as needed
  canvas.height = 80;
  // Draw the image onto the canvas, resizing it in the process
  ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

  file_div.innerHTML = ''; // Prepared <div> in UI to display the thumbnail
  file_div.appendChild(canvas);
};




<h3>
  
  
  結果
</h3>

<p>改善は即時かつ劇的でした!ブラウザは 28 枚の大きな画像を問題なく処理しただけでなく、<strong>28,000 x 17,000 ピクセル</strong> の <strong>120 MB 画像</strong> を読み込むことでさらに処理を進めましたが、それでも問題なく動作しました。小さなアイコンでした。</p>

<h3>
  
  
  違いはどこにあるのでしょうか?
</h3>

<p> の使用要素の場合、描画は完全に GPU の手中にあり、それらのチップは文字通りこのタスクのために作られています。</p>

<ul>
<li>
依然として 28,000 * 17,000 = 476,000,000 ピクセルをレンダリングしようとします。</li>
<li>この  80 * 80 = 6,400 ピクセルのみを描画します。</li>
</ul>

<p>内の画像のサイズを変更することで、プレビュー サイズを小さくすることで、ブラウザーが処理する必要のあるデータ量が大幅に削減されます。数億ピクセルを GPU に送信し、数千ピクセルを取り戻すことができます。これは非常に大きなことですよね?</p>

<h2>
  
  
  次のステップ
</h2>

<p>この成功を受けて、現在 <img  alt=" がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理" > を置き換えることを検討しています。 アプリケーションの他の部分、特に一度に約 250 枚の画像を表示する管理画面で。これらの画像はすでに適切にサイズ変更されていますが、<canvas> を使用しているかどうかを確認したいと思います。さらに優れたパフォーマンスを提供できます。</canvas></p>

<p>パフォーマンスの向上を測定するためにテストとベンチマークを実施します。私たちの調査結果は、今後の記事で必ず共有する予定です。</p>

<h2>
  
  
  重要な注意事項
</h2>

<p><canvas> の使用中私たちの特定のユースケースでは素晴らしい結果をもたらしましたが、<strong><canvas> を使用すべきではないことに注意しなければなりません。ウェブサイトの公開部分に画像を表示するため</canvas></strong>。その理由は次のとおりです:</canvas></p>
<ul>
<li>
<strong>アクセシビリティ</strong>: <img  alt=" がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理" >要素はスクリーン リーダーで読み取れるため、視覚障害のあるユーザーを支援します。</li>
<li>
<strong>SEO</strong>: 検索エンジンは <img  alt=" がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理" > から画像をインデックスします。タグを使用すると、サイトの可視性が向上します。 (同様に、AI トレーニング スクレイパーも画像に「インデックス」を付けます。さて、何ができるでしょうか...)</li>
<li>
 付きピクセル密度を自動的に検出し、完璧にフィットするように大きいまたは小さい画像を表示するために使用できます。できません。の構築方法に関する記事を書きました。</li>
</ul>

<p>公開 Web サイトの場合は、ユーザーに提供する前にサーバー側で画像のサイズを適切に変更することが最善です。画像のサイズ変更と最適化を自動化する方法に興味がある場合は、役立つと思われるトピックに関する記事を書きました。</p>

<h2>
  
  
  結論
</h2>

<p><strong>私は最適化が大好きです!</strong> 私たちは日々、ローカルの高性能ハードウェアを目指して進んでいますが、「それは良いことですが、もっと良くなる可能性がある」場合でも、最適化することで、このような問題を防ぐことができます。始まります。</p>

<p>このアプローチは標準ではありません。そして、私は基準をあまり気にしません。これらは厳しいルールとして扱われることが多いですが、あくまでガイドラインです。この解決策はぴったりです。私たちには、固体の  のない古いデバイスを使用しているクライアントはいません。サポート。したがって、管理するコードが増えたとしても、画像を表示する複数の方法が完璧に適合しており、それが重要なのです!</p>

<p><strong>同じような経験はありますか?どのように対処しましたか?以下のコメント欄でお気軽にあなたの経験を共有したり、質問したりしてください!</strong></p>


          </div>

            
        

以上が がいかにして窮地を救ったか - ブラウザーでの大きな画像の処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。