2

我目前正在用 HTML5/Javascript 和 PHP 编写一个 Web 应用程序。

公司的一些员工将需要使用它来输入他们的工作日程。该应用程序将实时(使用Javascript)计算一些复杂的法律信息,并在页面底部显示结果。完成后,用户单击“保存”按钮,所有内容都发送到数据库。

问题是我既需要用户实时查看输出,又需要管理人员从数据库中保存的内容中获取相同的输出。我还需要支持用户禁用 Javascript 的情况。换句话说,我需要在 Javascript 和 PHP 中做同样的计算。

为了使事情变得更复杂,公式非常复杂并且会经常更改(每个月左右),所以我想避免维护两个不同的版本。测试一个已经够难的了。

另外我想避免 AJAX 向服务器询问输出,因为:

  • 用户经常会根据实时计算的结果来制定自己的日程安排,所以即使是 1-2 秒的延迟也会让他很烦
  • 如果可能我必须支持 HTML5 的离线功能,这样用户可以在他的手机上加载应用程序,离线时填写它的时间表,然后在线上传

目前我找到的唯一解决方案是以与语言无关的方式编写公式,然后使用某种方式将其转换为 PHP 代码和 JavaScript 代码,但这并不简单。

4

3 回答 3

4

听起来您基本上有两种方法:

  1. 您可以编写一个独立于语言的公式(在数据库或配置文件中,因为它更改如此频繁)和两个代码生成器(Javascript、PHP)。这实际上并不像听起来那么可怕,只要您明智地选择输入格式并且您实际上是指一个公式,而不是一些任意计算。

  2. 您可以使用服务器端 JavaScript,并在 JavaScript 中编写一次公式。Wikipedia对服务器端 JavaScript 实现进行了比较。甚至还有用 PHP 编写的 JavaScript 解释器,至少包括phpjsJ4P5

于 2011-09-15T20:54:35.143 回答
0

当提到“实时”一词时,使用与语言无关的存储技术和解释性转换来持久化数据并不是首先想到的想法。设计无限可扩展且易于维护的软件是很有可能的,但通常更具挑战性和耗时。

就个人而言,我权衡与每个已知解决方案相关的成本与收益,并决定首先使最终用户受益并达到或超过关键目标可交付成果的方法。一旦我做出了满足主要利益相关者期望的决定,我的工作就是在这些期望的范围内尽可能地设计和开发最具可扩展性和可维护性的解决方案。

根据您提供的详细信息,我绝对会使用本机 JavaScript 和 PHP 编写方程式以获得最佳性能。如果软件规范从字面上(不是形象地)表示实时通信的必要性,那么我将通过实现WebSockets来提供这一点,否则长时间拉动就足够了。

请注意:并非所有 Web 浏览器都支持 WebSockets,这可能需要最终用户遵守受支持的 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 回答