2

私は現在、HTML5/JavascriptとPHPでWebアプリケーションを作成しています。

会社の一部の従業員は、仕事のスケジュールを入力するためにそれを使用する必要があります。アプリケーションは、(Javascriptを使用して)リアルタイムでいくつかの複雑な法的情報を計算し、ページの下部に結果を表示します。完了したら、ユーザーは[保存]ボタンをクリックすると、すべてがデータベースに送信されます。

問題は、ユーザーがリアルタイムで出力を確認し、マネージャーがデータベースに保存されたものから同じ出力を取得する必要があることです。また、ユーザーがJavascriptを無効にしている場合もサポートする必要があります。言い換えれば、JavascriptとPHPの両方で同じ計算を行う必要があります。

もっと複雑にするために、式は非常に複雑で、頻繁に(毎月かそこらで)変更されるので、2つの異なるバージョンを維持することは避けたいと思います。1つをテストすることはすでに十分に難しいでしょう。

また、次の理由から、AJAXがサーバーに出力を要求することを避けたいと思います。

  • ユーザーはリアルタイムの計算結果に基づいてスケジュールを作成することが多いため、1〜2秒の遅れでも本当に迷惑になる可能性があります。
  • 可能であれば、HTML5のオフライン機能をサポートする必要があります。これにより、ユーザーはアプリを携帯電話にロードし、オフラインでスケジュールを入力して、オンラインでアップロードできるようになります。

今のところ、私が見つけた唯一の解決策は、言語に依存しない方法で数式を記述し、それを何らかの方法でPHPコードとJavaScriptコードに変換することですが、それは簡単ではありません。

4

3 に答える 3

4

基本的に2つのアプローチがあるようです。

  1. 言語に依存しない式(データベースまたは構成ファイルで頻繁に変更されるため)と2つのコードジェネレーター(Javascript、PHP)を記述できます。これは、入力形式を適切に選択し、実際には任意の計算ではなく数式を意味する限り、実際には思ったほど怖くありません。

  2. サーバーサイドJavaScriptを使用して、JavaScriptで式を1回記述することができます。ウィキペディアには、サーバー側のJavaScript実装の比較があります。少なくともphpjsJ4P5など、PHPで記述されたJavaScriptインタープリターもあります。

于 2011-09-15T20:54:35.143 に答える
0

言語に依存しないストレージ技術と解釈変換を使用してデータを永続化することは、「リアルタイム」という用語が言及されたときに頭に浮かぶ最初の考えではありません。非常に可能ですが、通常、無限にスケーラブルで保守が容易なソフトウェアを設計するには、はるかに困難で時間がかかります。

個人的には、既知のすべてのソリューションに関連するコストとメリットを比較検討し、何よりもまず、エンドユーザーにメリットをもたらし、主要な目標成果物を満たすか上回るアプローチを決定します。主要な利害関係者の期待を満たす決定を下したら、これらの期待の範囲内で可能な限り最もスケーラブルで保守可能なソリューションを設計および開発することが私の仕事です。

あなたが提供した詳細に基づいて、私は絶対に最適なパフォーマンスのためにネイティブのJavaScriptとPHPを使用して方程式を書きます。ソフトウェア仕様が文字通り(比喩的ではなく)リアルタイム通信の必要性を示している場合は、 WebSocketを実装することでこれを提供します。そうでない場合は、長時間プルするだけで十分です。

注意:すべてのWebブラウザーがWebSocketをサポートしているわけではないため、エンドユーザーはサポートされているWebブラウザーに準拠する必要があります。Socket.IOのようなものを使用して、シームレスなクライアント側フェイルオーバーを(または完全に)採用することで、この難問を回避することができます。

于 2011-09-15T23:52:14.237 に答える
0

今朝、計算にXSLTを試してみることにしました。これは、JavascriptとPHPの両方でサポートされているため、非常に興味深いものです。信頼性が高く(コードジェネレーターとは異なり、自分で作成する必要があります)、入力データは既にXMLであるため適切です。

入力データの例:

<schedule>
  <element start="2011-19-09 08:00:00" end="2011-19-09 17:00:00" type="work" />
</schedule>

XSLTの例(ハートで書かれているため、機能しない場合があります):

<xsl:stylesheet>
  <xsl:template match="/">
     <output>
       <out name="totalWorkHour"><xsl:value-of select="sum(/element[@type='work'](@end-@start))" /></out>
     </output>
  </xsl:template>
</xsl:stylesheet>

XSLTを使用してすべてをコーディングしようとしますが、それができれば、このソリューションを維持します。

于 2011-09-19T18:37:42.557 に答える