web-dev-qa-db-ja.com

ネイティブJavaScript開発にはどのような利点がありますか?

ネイティブJavaScriptと比較した場合、jQuery開発がどれほど単純であるかを考えると、人々はjQueryのようなライブラリーを完全に見捨てるのでしょうか。

これはjQueryに制限があるか、遅いためですか?つまり、jQueryがネイティブJavaScriptに比べて非常に簡単な場合、人々はまだ純粋なJavaScriptを使用しなければならない理由は何ですか?

33
Mike

車について話しましょう。

待って、私たちはすでにしました-私たちが会ったその時間を覚えていますか?車について話しました。実際、あなたは自動車のかなりの専門家のようでした。最新のF1レースについて、正しい点、間違っている点、エキサイティングな点をすべて詳しく説明することができました。ランボルギーニのすべてのモデル(価格と在庫状況を含む)を暗記しています。自分で購入することさえ考えていた フェラーリ599 GTBフィオラノ のために貯蓄していた(ステーキディナーはあまり役に立たなかったに違いない)。

トヨタの欠点をわくわくするような声で説明しているときに、突然椅子から飛び降りて空中に叫び、拳を振りながら言いました。自動車整備士になるぞ!」

そして、あなたは行った。あなたは面接を受けました、ボスマンは私と同じくらいあなたの知識で感銘を受けました、そしてあなたは雇われました。最初のクライアントが入ってきた。彼のクラッチが壊れていた。あなたはそれを調べましたが、何をすべきか分かりませんでした。実際、あなたはボスマンがあなたに与えたアドバイスに従う方法を全く知りませんでした。あなたは解雇されました。

しかし、どうしてそれができるのでしょう!?あなたは車についてすべてを知っています!を除いて...車についてのすべて。夢の車にV12エンジンが搭載されていることはよくわかりますが、それが実際に何を意味するのかはわかりません。

つまり、あなたは自動車整備士ではありません。あなたは自動車愛好家です。そして、あなたが車がどのように機能するかを学ぶまで、あなたは熱狂者のままです。

さて、質問させてください。 _$.fn.text_はどのように機能しますか?そして、_$.fn_はどうですか?彼らは実際にはどういう意味ですか?どのように$(something)は、ものを含む巨大なものを返しますか、そしてそのものは正確には何ですか?理論的にも、少なくとも少しは機能を再現できますか? jQueryがなくても対応できますか?

「ネイティブJavaScriptは難しい」と言うのは...誤りです。何よりもまず、言語としてのJavaScriptは [〜#〜] dom [〜#〜] とは何の関係もないため、これは主にjQueryが抽象化するものです。 2つ目は、DOMについて少し理解すれば、最も一般的なクロスブラウザバグをすでに通り抜けることができるためです。しかし、ちょっとした秘密-最初はすべてが難しい。ロングディビジョンは5年生のbitchでした。

この回答の2番目のアナロジーとして:_Array.prototype.forEach_がforと同様に、jQueryはJavaScript-DOM(JavaScriptではなく言語、DOMのみ)に対するものです。 99%のケースで機能します。そしてそれはうまくいきます。しかし、カバーされていないその1%については、実用的である場合に限り、forループの使用方法を知る必要があります。この全体の回答は、質問の「純粋な」側に基づいており、技術的な側(たとえば、ライブラリのサイズ、およびMichael Dorrantの回答で説明されている他のいくつかのこと)にさえ基づいていません。私はJavaScriptが好きで、人々が何気なく "pah、あのばかげたjavascriptians"と言って派手な白い手袋を振っているように見えると、道徳に陥ります。

あなたが常にJavaScriptの熱狂者であるという事実を受け入れることができるなら、あなたを止めるのは誰ですか?ただし、JavaScriptプログラマーになりたい場合は、jQuery(またはその他のライブラリ)を使用するか、ライブラリを使用しないかを少なくとも選択する知識を最初に持っている必要があります。 DOMについて学びます。それを使用する方法を学びます。独自の小さなライブラリまたはヘルパー関数のいくつかのコレクションを作成します。そして、DOMに精通し、jQuery-godspeedを使用することを選択したら、怠惰は懸命に働いた人に授与されます。

89
Zirak

私が知っている理由:

  1. 必要性が非常に少ない場合は、1 onclickと言います。

  2. ダウンロード速度が重要で、jQueryライブラリが大きすぎて、それを置き換えるために多くの(カスタム)コードを記述する必要がない場合。

  3. 他のテクノロジーと統合する場合、生のjsの方が良い場合があります。

  4. 確立されたパターンでjsですでに記述されているレガシーシステム(別名「本番」)で作業する場合。

12
Michael Durrant

jQueryは単なるフレームワークであり、JavaScriptで記述されたツールのセットです。この一連のツールを使用することで、JavaScriptを引き続き使用できます。 jQueryが提供するツールを使用してJavaScriptを書くことを好む人もいれば、そうでない人もいれば、他のツールセットを選ぶ人もいます。

JQueryを使用せずに「純粋な」JavaScriptを作成する必要があるいくつかの理由:

  • 追加のjQueryファイルを含めなくてもページの読み込みが速くなる
  • 一部のフレームワークはjQueryと互換性がない可能性があります
  • 記述されているコードは、jQueryが役立つことを何もしません
  • コードは他のユーザーが使用できるように作成されており、依存関係としてjQueryを要求すると共有がより困難になります
  • コード作成者は、jQueryが提供するよりも多くの制御を必要としています
7
user41718

jQueryは、任意のライブラリまたはフレームワークとして、別の バグのレイヤー を追加します。私はそれを愛していますが、コードではなくjQueryコアにあることが判明したバグを探す日も失いました(まれなケースですが、それほどまれではありません)。

それ以外に、使用しない理由は他にありません。

  • 特に hosted Googleバージョン を使用する場合、オーバーヘッドは最小限です。
  • 経験の浅いJavaScript開発者がよりクリーンで効率的なコードを作成するのに役立ちます。
  • これはmostlyのクロスプラットフォームであり、古いブラウザーを処理する必要がある場合に、命を救うことができます。
  • プラグインの巨大なギャラリーは、非常に短時間でプロトタイプを作成するのに役立ちます。
  • DOMは理にかなっています
  • 何とか何とか何とか...

ただし、Javascriptの知識の代わりとして使用することはできません。純粋なJavascriptでそれを行う方法がわからない場合は、最初はライブラリで済むかもしれませんが、長い目で見ればその代金を支払うことになります。

そしてもちろん、IE6との致命的な戦闘にかなりの数年間拘束されており、古い学校のトリックを簡単に手放すことができない私たち全員がいます光沢のある新しいおもちゃを支持します。

5
yannis

ブラウザ環境では、クロスブラウザ正規化ツールが必要です。このようなツールには2つの種類があります

  • hostオブジェクトを、ブラウザ間で同じように動作する新しいオブジェクトでラップします
  • hostオブジェクトを拡張してDOM APIを実装します。

通常、これらのユーティリティは3つの方法のいずれかで使用できます。

  • コード全体でaddClasssetTextなどの小さな関数を必要なときに必要な場所で使用する
  • 独自のクロスブラウザー正規化ライブラリーを作成する
  • 既存のものを使用してください。

正規化のメカニズムが必要です。それ以外の場合は、クロスブラウザーのサポートはありません。

既存のものを使用するのは問題ありません。私はjQueryを使用しません。個人的に私は現在自分のライブラリを書いています( DOM-shim これは、外部のプロパティAPIを公開せずにブラウザを修正します。これにより、ブラウザが単一の正常に動作する標準ブラウザに変わります)。

5
Raynos

DOM抽象化、クロスブラウザー、レガシーブラウザーのサポートが必要ない場合は、jQueryがなくても簡単に実行できます。

これは、ブラウザー拡張機能、グリースモンキースクリプト(場合によっては)、数を数えるものの開発、Node.jsまたは他の非ブラウザー環境向けの開発の場合に当てはまります。

3
c69

正直に答える必要があります。私はjQueryが大好きです。それは私の人生を非常に簡単にし、JavaScriptコードをより宣言的にします、それは私が物事がうまくいくはずであると私が信じる方法です。

jQueryは多くのことを行います…

はいプラグインを追加できます
はいセレクタを拡張できます
はいアニメーションを簡略化します

しかしjQueryはすべてを行いません

JQueryを使用して複数のウィンドウコンテキストで作業したことはありますか? jQuerysucksは、ウィンドウの元のwindowおよびdocumentコンテキストを保持するため、異なるウィンドウコンテキストを処理します。それが呼び出されました。

私はあちこちにコードを書いてポップアウト*を作成しましたが、jQueryは私が達成しようとしていることの邪魔になるだけです。子ウィンドウでjQueryへの新しい参照を追加すると、どのjQueryコンテキストが使用されているかがわかりにくくなり、状況が悪化することがよくあります。

*スパム広告ではなく、新しいウィンドウでメールを作成するためのGmailのポップアウトを考えてください

コードを簡単にするときに使用します

JQueryを使用するのは、コードをよりシンプル、より短く、より読みやすく、より速くできるときです。

JQueryをnotで使用するのは、コードを単純化、短縮化、読みやすく、高速化しない場合です。ロードのタイミングを微調整する必要がある場合は、イベントのオーバーヘッドのため、jQueryを使用したくない場合があります。

2
zzzzBov

ご存じのとおり、jQueryは、私たちの多くがプロジェクトで使用していない多くのメソッドを提供する汎用フレームワークです。 (使用していないものもあります。)

JQueryまたはその他の確立されたフレームワークを使用しない主な理由は2つあります。

1。プロジェクトはそのようなフレームワークを使用するほど大きくも複雑でもありません:この場合、コーダーはJavaScriptでの経験と知識に基づいて情報に基づいた決定を行います。これは、彼がページの重みを減らし、コードをより詳細に制御するのに役立ちます。

2。コーダーが独自のフレームワークを開発している独自のJavaScriptフレームワークを使用している会社のプロジェクトを見ました。彼らが引用している理由は、jQueryを使用していて、修正するバグがある場合、次のバージョンまで待たなければならないためです。さらに、追加する機能がある場合は、jQueryチームにそれを要求するか、プラグインを追加する必要があります。プラグインにすることはお勧めできません(彼らは、.liveに類似した正式にJQueryに追加される前のフレームワーク)。独自のフレームワークを使用すると、コードをより詳細に制御できます。欠点は、ブラウザーの互換性の問題などについて、ホイールを作り直す必要があることです。さらに、開発プロセスが適切でない場合、フレームワークが肥大化し、維持する時間が増えるだけです。

2
Shree

ここの他の回答、特に Michael Durrant's と一緒に、私はspeedが時々使用することを選択した主な理由だと思いました生のJavaScript。

最近、私は多くのアニメーションやその他のCPU集中型のタスクに取り組んでおり、生のJavaScriptはjQueryを使用する場合よりもはるかに高速です。

1つの例は、ユーザーがページをどれだけ下にスクロールしたかに関して、position: fixed要素の不透明度を変更したい場合です。このためにjQueryを使用すると、効果が非常に遅くなり、スクロールがぎくしゃくしてフェード効果が損なわれました。私はストレートJavaScriptを使用するように切り替えましたが、IE <= 8。

2
donut

マイク

一部のライブラリの使用を妨げているのは、インフラストラクチャ/ライブラリソリューションに依存して何らかのタスクを実行しているためだと思います。

しかし、言語は長い目で見ればライブラリのように行き来することを覚えておいてください。

ですから、それは一時的なスコープかもしれません。たぶん人々はそこにないかもしれないライブラリに投資することをためらっています-または長期的にそれの背後に多くの勢いを持っています。

私自身?特にJQueryを使用することに異論はありません。私はまた、Box2d.jsまたはthree.jsを見て、短期間の有効期間であっても、提供する必要のある果物を見落とすよりはむしろそれらを採用したいと考えています。

マイクの一番下の行は、選択したライブラリの保存期間にリスクがあることです。また、JavaScriptコミュニティの一部は、ライブラリまたはプロジェクトが終了したために損失を経験した可能性があると思います。

0
Tim Miltz

言及されなかった理由をさらに2つ追加できます。

  1. まったく新しいテクノロジーを採用するときは、多くの場合、高レベルの構成に進む前に、低レベルの構成から始めます。私は主にC++/C#開発者ですが、しばらく前にHTML/CSS/JavaScriptをいじり始めたとき、最初にテクノロジー(つまり、JavaScript)を理解したかったため、フレームワークを使用しないことを選択しました言語自体)これらのフレームワークはその上に構築されています。

    • そうは言っても、私はjQueryを発見して以来、1〜2行のコードでjQueryができることを手作業でコーディングに戻りたくありません。
  2. これがどれほど一般的であるかはわかりませんが、次のフレームワーク/テクノロジー/言語を見るとき、彼らの最初の反応は「私が学ぶための別のAPIではない!」である人がたくさんいるようです。彼らはjQueryがいかに簡単であるかを気にしていませんが、jQueryが自分たちの間に立ち、「真の試行済み」のメソッドを使用して作業を提供しているように見ているだけです。これは、 Boost library または [〜#〜] stl [〜#〜] のいずれかを使用しないで malloc ほぼすべての場合。なぜjQueryよりも純粋なJavaScriptを選ぶのかと尋ねたところ、実際にはjQueryを最初から評価することを拒否し、どんなに遅くても現在の開発のペースに完全に満足しているため、実際には選択しませんでした。

0
DXM

主な問題は、ますます多くの人々(圧倒的多数?)がJavaScriptでコーディングする方法を知らなくなったことです。 jQueryが何かを実行できない場合、彼らはそれを実行できません。

単純なjavascriptの例が入手しづらくなっているところまで来ています。 jQueryに対しては何もありません。それは素晴らしいフレームワークです。私はそこから多くの良いアイデアを得ましたが、人々はまずJavaScriptを学び、それからフレームワークを学ぶべきです。私は個人的に自分のフレームワークの方が柔軟性があり、自分のニーズにより適していると思います。そうです、私は時々車輪を再発明しますが、完全な制御とバグ修正の制御を持つことは、あなたがJavaScriptを学習することに意欲的に取り組むならば、大きなメリットです。

それだけでなく。バニラJavaScriptを知っていると、フレームワークベースの実装を待つ代わりに、新しい機能を試したり試したりすることがはるかに楽しくなります。また、jQueryは主に [〜#〜] dom [〜#〜] ライブラリであるため、jQueryを非難しませんが、大規模なプロジェクトでスケーリングするのは面倒な場合があります。他のフレームワークはこれでより良い仕事をします。 プロトタイプ が思い浮かびます。

要するに、それは素晴らしいフレームワークですが、すべての人がすべての人がそうであると理解するわけではありません。