Node.jsはV8 JavaScriptエンジンを使用して構築されたであることに気付いたとき、私は次のように考えました。
XPathをサポートする「ネイティブ」DOMと、実行されたページでのすべてのAJAX呼び出し)を使用して、ブラウザーのようにページがレンダリングされるため、すばらしいWebスクレイピングが容易になります。
どうもありがとう!
DOMはDOMであり、JavaScript実装は単に別のエンティティです。 DOMは、WebブラウザーがJavaScript環境に公開する一連の機能を表します。 要件はありませんが、特定のJavaScriptランタイムには、グローバルオブジェクトを介して公開されるany機能があります。
Node.jsとは、スタンドアロンのJavaScript環境であり、Webブラウザーから完全に独立しています。 WebブラウザーとJavaScriptの間に固有のリンクはありません。 DOMは、JavaScript言語または仕様などの一部ではありません。
JavaベースのWebサーバーで古いRhino JavaベースのJavaScript実装を使用しています。その環境も、DOMとは何の関係もありません。グローバルオブジェクトに必要なことを実行するための機能をグローバルオブジェクトに設定するのは自分のアプリケーションであり、DOMではありません。
Nodeプロジェクトに仮想DOMが必要な場合は jsdom のようなプロジェクトがあります。サーバー側プラットフォームとしての性質から、DOMはNodeで実行できる機能であり、多種多様なサーバーアプリケーションにとって完璧な意味を持ちます。つまり、DOMが一部の人にとっては役に立たないかもしれませんが、同じことではありません。プロセス制御、I/O、ネットワーク、データベース相互運用などのサービスのカテゴリ。
「なぜ?」という質問に対する「公式」の回答があるかもしれません。 Node(Node Foundation now)を維持している人たちの基本的なビジネスです。もしそこにいる勇敢な開発者がそれを決定したら、Nodeは、デフォルトで仮想DOMをサポートする一連のモジュールとともに出荷され、正常に機能し、機能し、それを実現します。Node willはDOMを持ちます。
PS:この質問を読んでいるとき、私は V8 (node.jsがこの上に構築されている)にDOM
Chromeと同じJSエンジンを使用する場合、ネイティブDOMがないのはなぜですか?
しかし、私はgoogleを検索し、 GoogleのV8ページ を見つけました。
JavaScriptは、ブラウザのクライアント側スクリプトで最も一般的に使用され、たとえば、ドキュメントオブジェクトモデル(DOM)オブジェクトの操作に使用されます。ただし、DOMは通常JavaScriptエンジンではなくブラウザによって提供されます。 V8についても同様です。GoogleChromeはDOMを提供します。ただし、V8はECMA標準で指定されているすべてのデータ型、演算子、オブジェクト、関数を提供します。
node.jsはV8
ではなくGoogle Chrome
を使用します。
同様に、取得したページでJSを実行するモードがないのはなぜですか?
また、それほど悪いことは必要ないと思います。 Ryan Dahlはnode.jsを一人の男(シングルプログラマ)として作成しました。たぶん今、彼(彼のチーム)がこれを開発するでしょうが、私は彼が(クレイジーに)作成したコードの量にすでに非常に驚いていました。彼はノンブロッキングの簡単で効率的なライブラリを作りたかったのです。
しかし、もう一度、別の開発者が https://github.com/tmpvar/jsdom で(今日)非常に優れ、積極的に開発したモジュールを作成しました。
JavaScriptエンジンとWebブラウザーのエンジンについて何を理解していないのですか? :)
上記の引用からうまくいけば、これらは異なるものです。
Document Object Model(略してDOM)はプログラミングインターフェースですHTMLおよびXMLドキュメントの場合、ページを表し、プログラムがドキュメントの構造、スタイル、およびコンテンツを変更できるようにします。 この件の詳細
クライアント側(browser)とサーバー側(Node.js)とその主な目標:
Node.jsにDOMがないのはなぜですか?
デフォルトでは、Node.jsにはアクセス権がなく、ブラウザの実際のDOMに関する知識もありません。 Node.jsはデータを配信するだけで、DOMを含め、Webサイト全体を処理およびレンダリングするために独自のブラウザーで使用されます。サーバーは、使用および処理するためにデータをブラウザーに提供します。それが意図された方法です。
Node.jsでDOMにアクセスしたくないのはなぜですか?
Node.jsを使用してブラウザの実際のDOMにアクセスすることは、単にサーバーの目標から外れるだけです。独自のブラウザの役割は、サーバーからのデータを表示することです。ただし、それは確かに可能であり、AJAX呼び出しを使用してDOMを事前にレンダリング、操作、または変更するさまざまなレベルの深度と種類で複数のソリューションがあります。将来のトレンドがもたらすことを見ていきます。
Node.jsでDOMにアクセスする理由は何ですか?
デフォルトでは、Node.jsを使用して、独自の実際のDOM(少なくともその一部のデータ)にアクセスしないでください。クライアント側とサーバー側は、長年の経験と知識に基づいて、役割、機能、および責任の面で分離されています。いくつかの状況がありますが、そうするための確かな理由があります:
Node.jsでDOMにアクセスするにはどうすればよいですか?
これらのソリューションは、ブラウザ自体にアクセスする方法を提供していませんが、デフォルトでは実際のDOMですが、送信するプロジェクトを作成できますDOMに関する何らかの形式のデータをサーバーに送信し、必要に応じてそのデータを使用/レンダリング/操作します。
...そしてはい、ツールとユーティリティの観点から見たWebスクレイピングとWeb開発は、いくつかの分野でより洗練され、確かに簡単になりました。
node.jsは、標準ライブラリに含めないことを選択しました。どの機能についても、包括性、スケーラビリティ、および保守性の間で避けられないトレードオフがあります。
それはそれが潜在的に有用ではないという意味ではありません。少なくとも1つの JavaScript DOM 実装が(他のCommonJS実装の中で)NodeJSを対象としています。
V8とDOMは密接に関連しているという誤った仮定があるようですが、そうではありません。 DOMは実際にはWebkitによって処理され、V8はDOMを処理せず、DOMへのJavaScript呼び出しを処理します。これで落胆しないでください。Node.jsは、リアルタイムサーバー市場で重要なニッチを切り開いていますが、それがサーバー専用であることを誰にも言わせないでください。 Nodeを使用すると、JavaScriptでほとんどすべてのものを構築できます。
あなたが話していることをすることは可能です。たとえば、本当にDOMへのアクセスが必要な場合は、非常に優れた jsdom ライブラリがあり、 node-htmlparser があります。これらを利用する非常に優れたスクレイピングライブラリもあります。 アプリコット のように。
これは関連しています:WebkitからNodeにDOMなどを追加しようとする node-webkit という新しいプロジェクト(2012)があります。応援してね!
根本的な質問に答えるために、JSDomとjQueryを使用して、node.jsのページをこすることができます: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs
私は自分でこのアプローチを数回使用しましたが、うまくいきました。
ノードはランタイム環境であり、ブラウザのようにDOMをレンダリングしません。
JavaScript!=ブラウザ。言語としてのJavaScriptはブラウザに関連付けられていません。 node.jsは、ブラウザではなくサーバーを対象とした単なるJavaScriptの実装です。したがって、DOMはありません。
2018年の回答:主に歴史的な理由からですが、これは将来変更される可能性があります。
これまで、サーバー上で行われたDOM操作はほとんどありませんでした。偶然にも、他の回答が示唆しているように、JS stdlibとDOMは別々のライブラリです-たとえば、Unixスクリプトなどのノードを使用している場合、HTMLElement
とNodeList
などは実際にはありませんそれに関連しています。
ただし、サーバー側のDOM操作は、Webアプリケーションの配信において非常に一般的な部分です。 Webサーバーはページの構造を理解する必要があり、リソースをHTMLとしてレンダリングするように要求された場合は、Webアプリケーションの初期状態を反映するHTMLコンテンツを配信します。これは、サーバーが単にスタブページを配信し、ブラウザーに実際のコンテンツを入力する作業を行わせる場合よりも、Webアプリの読み込みがはるかに速くなることを意味します。現在、これはJSDomなどで行われていますが、同じようにnodeにはRequest
およびResponse
オブジェクトが組み込まれており、stdlibの一部としてDOM関数を維持すると、このタスクに役立ちます。
DOMを「自分のスクリプトからすぐにアクセスできるリンクされたオブジェクト」と読んだ場合、答えは「 そうです ですが、Webドキュメントスクリプトから利用できるオブジェクトのセットとは大きく異なります」。主な理由は、ノードが「V8のHTMLツリーオブジェクト」ではなく「V8のイベントI/O」であることです。
DOMがないからです。 DOMはDocument Object Model
の略です。 Nodeにはドキュメントがないため、操作するDOMはありません。それは間違いなくブラウザのことです。
cheerio
のようなライブラリを使用できますが、簡単なDOM操作が可能です。
ノードはサーバーレベルのJavaScriptです。これは、C++やJavaなど、基本的なシステムAPIに適用される言語にすぎません。