


JavaScript クライアントはアップロードされた画像のサイズを検証します (IE および Firefox と互換性があります)_JavaScript スキル
前回の投稿 (翻訳) では、各ブラウザが制御不能なスクリプト プロンプトを表示する状況について説明しました。Internet Explorer の場合、ブラウザが実行するステートメントが多すぎると、他のブラウザではスクリプトの実行が停止されます。スクリプトが一定期間以上実行され続けるとプロンプトが表示されます。私たちが議論したい中心的な問題は、これらのブラウザが暴走スクリプトをどのように検出するかではなく、これらの警告を回避するためにスクリプトの実行を高速化する方法です。
スクリプトが制御不能になる理由は基本的に 4 つあります。
ループ内で実行される操作が多すぎます。
関数本体の肥大化
再帰が多すぎます
DOM 呼び出しが多すぎます
この投稿では、1 つ目のループ内の操作が多すぎることに焦点を当てます。ループは同期して動作するため、ループの実行にかかる時間はループの数に完全に依存します。したがって、ループの実行時間が長すぎてブラウザがロックされる直接的な原因となる状況が 2 つあります。 1 つはループ本体に含まれる演算が多すぎること、もう 1 つはループの数が多すぎることです。これらの状況はいずれも、ブラウザがロックアップし、スクリプトが制御不能であることを示すメッセージを表示する直接的な原因となる可能性があります。
この問題を解決するコツは、次の 2 つの質問で各ループを評価することです:
このループは同期的に実行する必要がありますか?
ループ内のデータは順番に実行する必要がありますか?
両方の質問に対する答えが「いいえ」の場合は、ループ内の操作を分解することを選択できます。重要なのは、コードの特定のコンテキストに基づいて、上記の 2 つの質問に対する答えを判断することです。典型的なループは次のようになります。
for ( var i=0; i < items.length; i ){
process(items[i]);
}
一見すると、特に問題はありません。このループが長時間実行されるかどうかは、ループの数によって決まります。ループの直後に、ループの結果に依存する必要がある他のコードがない場合、最初の質問に対する答えは「いいえ」です。また、ループでは一度に 1 つの値のみが処理され、前のループの結果に依存しないことがわかります。そのため、2 番目の質問に対する答えも「いいえ」です。これは、暴走したスクリプト メッセージでブラウザをロックしない方法でループを解消できることを意味します。
書籍『プロフェッショナル JavaScript 第 2 版』では、実行時間が非常に長いイリュージョンを処理するために次の方法をお勧めします:
function chunk(array, process, context){
setTimeout(function(){
var item = array.shift ();
process.call(context, item);
if (array.length > 0){
setTimeout(arguments.callee, 100);
}
},
}
chunk() 関数の目的は、配列を小さな部分に分割して処理することです (これが名前の由来でもあります)。3 つのパラメーターを渡すことができます。処理される配列オブジェクト、処理関数、および process() 関数で対応するこのオブジェクトを設定するために使用されるオプションのコンテキスト変数。最初のタイマーは、操作間の遅延を処理するために使用されます (ここでは 100 ミリ秒に設定されていますが、実際のニーズに応じて変更できます)。この関数が実行されるたびに、配列内の最初のオブジェクトが取り出され、処理のために process() 関数に渡されます。この時点で process() にまだ未処理のオブジェクトがある場合は、Waiting を使用して別のタイマーが開始されます。繰り返し。上記のループでは、次のメソッドでこの関数を使用できます:
chunk(items, process);
ここでの配列はキューの形式をとり、ループ プロセス中に変更が発生することに注意してください。毎回。配列の元の状態を変更したい場合は、2 つの方法があります。1 つは、 concat() 関数を使用して、現在の配列を渡す前にそのコピーを作成する方法です。
chunk(items.concat(), process) );
もう 1 つのオプションは、chunk() 関数を直接変更し、関数内で直接変更することです:
function chunk(array, process, context){
var items = array.concat(); // 配列のクローンを作成します
setTimeout(function( ){
var item = items.shift();
process.call(context, item);
if (items.length > 0){
setTimeout(arguments.callee, 100) ;
}
}、100)
}
次のタイマーが有効になる前に配列の内容が変更される可能性があるため、この方法は単にインデックスを保存するよりもはるかに安全であることに注意してください。
ここで説明した chunk() 関数は、ループのパフォーマンスを最適化するための開始点にすぎません。必要に応じて、さらに機能を追加するために改良を続けることができます。たとえば、配列内のすべてのオブジェクトが処理された後、関数コールバックを追加できます。この方法で関数を変更するかどうかに関係なく、これは配列処理のパフォーマンスを最適化し、スクリプトが制御不能になっているという警告を回避するのに役立つ単なる JavaScript コード開発パターンです。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック








![VMware Horizon Client を開けない [修正]](https://img.php.cn/upload/article/000/887/227/170835607042441.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
VMware Horizon Client を使用すると、仮想デスクトップに簡単にアクセスできます。ただし、場合によっては、仮想デスクトップ インフラストラクチャで起動の問題が発生することがあります。この記事では、VMware Horizon クライアントが正常に起動できない場合に実行できる解決策について説明します。 VMware Horizon クライアントが開かないのはなぜですか? VDI を構成するときに、VMWareHorizon クライアントが開いていないと、エラーが発生する可能性があります。 IT 管理者が正しい URL と資格情報を提供していることを確認してください。すべて問題がない場合は、このガイドに記載されている解決策に従って問題を解決してください。 Windows コンピュータで VMW が開かない場合に VMWareHorizon Client が開かない問題を修正する
![VMware Horizon クライアントが接続中にフリーズまたは停止する [修正]](https://img.php.cn/upload/article/000/887/227/170942987315391.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
VMWareHorizon クライアントを使用して VDI に接続すると、認証中にアプリケーションがフリーズしたり、接続がブロックされたりする状況が発生することがあります。この記事では、この問題を調査し、この状況を解決する方法を示します。 VMWareHorizon クライアントでフリーズまたは接続の問題が発生した場合、問題を解決するために実行できることがいくつかあります。 VMWareHorizon クライアントが接続中にフリーズするかスタックする問題を修正する Windows 11/10 で VMWareHorizon クライアントがフリーズするか接続に失敗する場合は、以下の解決策に従ってください。 ネットワーク接続を確認する Horizon クライアントを再起動する Horizon サーバのステータスを確認する クライアント キャッシュをクリアする 修正方法

MQTT (MessageQueuingTelemetryTransport) は、IoT デバイス間の通信に一般的に使用される軽量のメッセージ送信プロトコルです。 PHP は、MQTT クライアントの開発に使用できる、一般的に使用されるサーバー側プログラミング言語です。この記事では、PHP を使用して MQTT クライアントを開発する方法を紹介します。以下の内容が含まれます。 MQTT プロトコルの基本概念 PHPMQTT クライアント ライブラリの選択と使用例: PHPMQTT クライアントを使用した公開と使用
![VirtualBox でディスク サイズを増やす方法 [ガイド]](https://img.php.cn/upload/article/000/887/227/171064142025068.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
事前に定義されたディスク サイズにそれ以上のデータを入れる余地がないという状況によく遭遇します。後の段階でさらに多くの仮想マシンのハード ディスク領域が必要になった場合は、仮想ハード ディスクとパーティションを拡張する必要があります。この記事では、VirtualBox でディスク サイズを増やす方法を説明します。 VirtualBox でのディスク サイズの増加 問題が発生する可能性が常にあるため、これらの操作を実行する前に仮想ハード ディスク ファイルをバックアップする必要があることに注意することが重要です。常にバックアップを作成することをお勧めします。ただし、このプロセスは通常は正常に機能します。続行する前に必ずマシンをシャットダウンしてください。 VirtualBox でディスク サイズを増やすには 2 つの方法があります。 CLを使用したGUIを使用してVirtualBoxのディスクサイズを拡張する

多くの友人がファイルをダウンロードする場合、最初に Web ページを閲覧し、次にクライアントに転送してダウンロードします。ただし、Baidu Netdisk Web ページでクライアントを起動できないという問題が発生することがあります。この問題に対応して、編集者は百度ネットディスク Web ページでクライアントを起動できない問題を解決するための解決策を用意しましたので、困っている友人は参照してください。解決策: 1. Baidu Netdisk が最新バージョンではない可能性があります。Baidu Netdisk クライアントを手動で開き、右上隅の設定ボタンをクリックし、バージョン アップグレードをクリックします。アップデートがない場合は以下の画面が表示されますが、アップデートがある場合は画面に従ってアップデートしてください。 2. Baidu Cloud Disk の検出サービス プログラムが無効になっている可能性があります当社が手動またはセキュリティ ソフトウェアを使用して、Baidu Cloud Disk の検出サービス プログラムを自動的に無効にする可能性があります。チェックアウトしてください

モバイルクライアントとは、スマートフォン上で動作し、ネイティブクライアントやWebクライアントの形でユーザーにさまざまな機能やサービスを提供するアプリケーションを指します。モバイル クライアントは、オリジナル クライアントと Web クライアントの 2 つの形式に分けることができます。ネイティブ クライアントは、特定のプログラミング言語と開発ツールを使用して、特定のオペレーティング システム用に作成されたアプリケーションを指します。Web クライアントの利点は、優れたクロスプラットフォーム互換性があることです。 、オペレーティング システムの制限なしでさまざまなデバイス上で実行できますが、ネイティブ クライアントと比較して、Web クライアントのパフォーマンスとユーザー エクスペリエンスが低下する可能性があります。

PHP で FTP クライアントを作成する方法 1. はじめに FTP (File Transfer Protocol) は、ネットワーク上でのファイル転送に使用されるプロトコルです。 Web 開発では、FTP 経由でファイルをアップロードまたはダウンロードする必要があることがよくあります。人気のあるサーバーサイド言語として、PHP は強力な FTP 機能を提供し、FTP クライアントを簡単に作成できるようにします。この記事では、PHP を使用して単純な FTP クライアントを作成する方法とコード例を紹介します。 2. PHP で FTP サーバーに接続します。f を使用できます。

一部の Win11 ユーザーは、パーソナル コンピューター上の一部のソフトウェア アイコンの横に盾のロゴが表示されることに気づいています。これにより、コンピュータ システムだけでなく、そこに保存されている重要な情報やデータも侵害から保護されます。それが気に入らない場合は、次の方法で解決できます。 win11クライアントでシールドロゴを削除する方法 1. コンピューターのタスクバーを右クリックし、「タスクマネージャー」を選択します。 2. 次に、上の「スタート」をクリックします。 3. ここで「Windows Defender」を見つけ、右クリックして「無効にする」を選択します。 」と表示されたら、コンピューターを再起動するだけです。
