私は、Pythonの側にいるにもかかわらず、何年もこの質問をしました。この現象の説明は1つではありませんが、この件についての私の考えは次のとおりです。
WebフレームワークはXMLishマークアップ言語(HTML、現在のWebトライアドHTML-CSS-JavaScriptの一部)をクライアント/サーバーの方法で処理する必要があります。これは、相互に作用する3つの言語、つまりブラウザDOMと実行モデル(およびセキュリティモデル)を意味します。実際には、機能の各部分(「モジュール」)には、3つの言語すべてのコードが必要です。これに加えて、jQueryのセレクター言語は、もう1つの注意すべき言語になっています。
HTML + CSSには、オブジェクトを配置するための直感的で数学的に適切なモデルがありません。Tcl / Tkでさえも、ジオメトリマネージャーの定義においてIMHOの方が優れています。これにより、プログラマーがHTMLレンダリングを厳密に定義するのを防ぎ、代わりに運に頼ることができます。「おそらく、このdivはほとんどのブラウザーでほとんどの場合機能します」。ただし、HTML5やTwitter Bootstrapなど、この面には前向きな進展がいくつかあります。
Webテクノロジーは有機的に成長し、フレームワークもそれに伴って成長しているため、その形状は必ずしもエレガントである必要はありません。これは、プログラマーが次善のAPI、廃止予定のAPIなどを覚えておく必要があることを意味します。
Webブラウザーにはまだわずかな非互換性があり、Webフレームワークに不必要な複雑さを追加します
全体的なアーキテクチャは混乱しています。これは、バックエンドとフロントエンドのスプリットシンキングであり、バックエンド側ではリクエスト/レスポンス、フロントエンド側ではデータ駆動型レンダリングと結び付いています。実行の順序はあまり明確ではなく(同期には労力が必要)、スタイルの配置、適切なスロットへのスクリプトが必要です(ほとんどすべてのjsスクリプトはbodyタグの終わりの前などに配置する必要があります)。キャッシングは、バックエンドからプロキシ、フロントエンドに及ぶさらに別の側面です。フォームの処理についても触れていません。
Webフレームワークは、多くの概念を追加し、パイプを処理することで、これらの複雑さのほとんどに対処します。
Web業界では、通常、最小限の役割のセットとして、グラフィックデザイナー、Webデザイナー/ Webプログラマー、バックエンドプログラマーに労働力が分配されます。前者2つは必ずしもプログラミングスキルを持っている必要はないため、異なる抽象化とツールが必要であり、フレームワークもそれらを容易にする必要があります。
要約すると、Webフレームワークは多くの複雑さを抽象化しようとしますが(それ自体が複雑さを増しています)、標準やその他の可動部分の急速な開発により、達成するのは非常に困難です。新しい機能を使用しないことは通常問題ではないため、プログラミング言語ははるかに成熟しています。
私は、便利なWebフレームワークを作成することは、GUI標準が導入され(モバイルデバイスなどのさまざまな操作モードをカバー)、基礎となるテクノロジが十分に安定した後にのみ可能になると思います。
Webテクノロジードメインにはそのようなものがないため、Webフレームワークには単純な構成要素がありません。低レベルの抽象化は必然的に高レベルにリークします。