現在キュレーションメディアのようなものを作ろうとしていて、サーバーサイドの言語選択で悩んでいます。
具体的にはPythonかNode.jsかです。
プログラミング初心者なので、自分でいろいろ調べてみてわかったことは以下のようなことです。
古い情報なども含まれていて、現在とは異なるものもあるかもしれませんが。
Pythonのメリット
より少ないコードで書くことができる
エラーなどを発見しやすい
誰が読んでもわかりやすく、メンテナンスしやすい
Pythonのデメリット
Node.jsと比較すると遅い
Node.jsのメリット
処理速度が速い
大量の同時アクセスにも対応できる
よりスケーラブル
Node.jsのデメリット
ネストがすごい深くなる可能性があり、可読性が低くメンテナンスしにくい
(追記、最新版ではネストが深くなるのは克服できるているらしい)
上記が自分が調べた内容ですが、これ以外にメリットデメリットはありますか?
また、東南アジアでリリースする(ネットが極めて遅い)サイトで、月間PVが1000万を超えるようなことを想定する場合、どちらがおすすめでしょうか?
個人的にはスピードは非常に大事なので、Node.jsがいいのかなと思いつつ、RubyやPythonに比べて流行っていない気がするので、質問させていただきました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
LLman さんの回答で充分だと思いますが、
Node.jsのデメリット
ネストがすごい深くなる可能性があり、可読性が低くメンテナンスしにくい
Javascript のメリット・デメリットについては、このように単純なものではありません。他の言語と異なる点がたくさんあるの(ex. オブジェクト指向なのかどうなのかもあやしい→オブジェクト指向って本当に良いことだったのかを考えさせられる)ですが、その一つ一つにメリットとデメリットがあります。
そして、「ネストが深くなる」→「可読性が低くなる」という因果関係も単なるプログラマの慣れの問題だと思います。システムコールを呼ぶ毎に性能問題を気にするくらいのシニアプログラマからみると、Javascript ほど気持ちよく書ける言語はありません。新しく導入されたネストを少なくする仕組みは単に経験の少ないプログラマに対して敷居を低くするためだけの子供だましにしか思えません。
もともと、「シングルスレッド非同期プログラミング→ネストが深くなるけど、並列処理に対して問題が簡単になる」というメリットがあったのですが、うわさの「ネストを少なくする仕組み」を使うと、そのたびに「これは元の形に翻訳するとどうなるんだっけ?」というのを考えて使うことになり、実はあまりうれしくありません。そのプログラムを初めて見た人に対してちょっととっつきやすくなるくらいの効果しかありません。スレッドがシステムコールに対して同期的に動くことの性能問題が気にならない人には Javascript のメリットはわからないと思います。
投稿2016/10/09 13:33
総合スコア3401
0
ベストアンサー
どちらがおすすめでしょうか?
Nodeでキュレーションアプリを運用してみて - SSSSLIDE
上記事例を見ますと、どちらか一方ではなく、使い分けていますね。
クローラーや、言語処理とリコメンドのエンジンは、
(おそらく機械学習のライブラリが充実してるから)Python、
アプリ向けAPIは(おそらく早いから)Node.js、と併用されています。
これは「マイクロサービス」の考え方で、各言語で得意なことをやらせて、
小さなサービスを組み合わせて、システム全体を構築する手法ですね。
ただ一方で、両言語を習得して、別々にメンテナンスする負荷もあります。
ご質問からどちらか一方、という考えが強くうかがえましたが、
採用するかどうかは別に、選択肢を多く持つのは有益だと思い、ご参考までに。
投稿2016/10/09 13:01
総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
結論はLLmanさんと同じです。
どっちも良いからどっちも使おう! もしくはなんとなくで決めて良いです。
Node.jsで実装のパフォーマンスを出すためにはAltJSを覚える事が必要不可欠なので若干敷居が高いです。
汎用的なライブラリが優れているので極まったNode.jsは万能です。
Pythonは書きやすいですし、速度が足りない困ったという場面では奥の手が使えるので先にこちらを勉強するとやりやすいかと思います。
機械学習回りのライブラリが優れているので、そちらに少しでも興味があるならPythonは扱えるべきです。
Node.js: 大量の同時アクセスにも対応できる
https://www.techempower.com/benchmarks/
古今東西のフレームワークの捌けるアクセス数ランキングです。
上位層にPythonは十分食い込めるポテンシャルを持っています。
同じNode.jsでもsails.jsでは秒間500アクセス数しか捌けません。
遅い遅いと叩かれるRubyもJavaのバイトコードに変換して速度を稼ぐJRubyのような必殺技がありますし、
同様にPythonにもPyPyを使ってC言語やJavaのバイトコードを経由して爆速に動かす切り札があるのです。
Lisp使いも普段の業務をLispで書いてJavaのソースコードに変換して納品している…と言語間の速度を覆す工夫は至る所にあります。
さて、あなたの考えるキュレーションメディアは秒間何アクセスを叩き出す事を想定していますか?
上記ベンチマークでほぼ最下位として紹介されているsails.jsですが、一般的な感覚では頭おかしい程捌けます。
秒間500アクセスをピーク時に求められるサイトを、ピーク時3時間(毎秒500アクセス)、平時毎秒250アクセスと仮定して1日2,430万PV、月間で計算すると7億PVとなりますからね…!
アドセンスを入れると1PVあたり0.2円程度なので、7億PVもあれば月収1000万円超ですね!
浮いたお金でサーバーをアップグレードして強引に動かすのと、全部高速な言語で置き換えるのではどちらがコストが掛かるのでしょうね…?
…というわけで、言語の導入時に速度を気にする場合、
そのくらいPV数が見込めるくらいのサイトになってから悩んでも遅くはありません。
Python: 簡潔に書ける
スタートアップではでかいメリットです。
ただし素のJavaScriptは単なるゴミですが、こちらにもAltJSという奥の手があります。
本番環境へデプロイを行う直前にコンパイルしてJSファイルにすれば速度面でも問題は出ません。
例えばCoffeeScriptならPythonとほぼ同レベルの書き心地ですし、
それを更に改良したLiveScriptはPythonを完全に突き放しています(と勝手に思ってます)
型チェックを取り入れるならばTypeScriptやPureScript等があります。
投稿2016/10/12 03:23
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/12 08:35
2016/10/13 07:59
退会済みユーザー
2016/10/14 07:24
0
失礼ですが、こんな意見と同じだと感じました。
「これから総合格闘技をしようと思います。
柔道と空手とどちらがおすすめですか?」
自分がどちらが向いているかが大事だと思いますし、学ぶのを片方のみと限定するのはあまり得策ではありません。
後々双方を学ぶことを覚悟した上で、軽い入門書を書店でめくってみてどちらから先にやるか決めるのが良いかと思います。
投稿2016/10/09 13:22
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/09 13:32
2016/10/09 13:41
退会済みユーザー
2016/10/09 19:15
0
私ならメンテナンス性がデメリットにあがっているならばそれは完全に除外します。
投稿2016/10/09 12:55
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/09 13:07
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/09 19:19