大企业发展中的特殊问题 基于用户的Web应用程序外文翻译资料
2021-12-20 21:59:40
英语原文共 5 页
大企业发展中的特殊问题
基于用户的Web应用程序
摘要—Irisz Web应用程序的规范显示,该软件将受到大量用户加载的影响。虽然使用统计测量是十分必要的,但这是创建了对数据和Web服务的多种需求供应商。这篇文章讨论了系统的特点,定时数据处理的持续压力,以及在主动使用期间提供维护的能力。
一、引言
如今,Web应用程序的开发可以运用在信息学的日常工作之中。尽管有一些开发提出了科学问题。这些问题令人担忧,如编程技术的适用性[1] [2],和技术性,安全性[3]和性能方面[4] [5] [6]。无数的例子当中的少部分,其很少出现在文献当中。他们处理水质,工业应用[7] [8]。 更多与计算机科学背景有关的重要问题正在上升[5] [9] [10]。 客户端—服务器系统,大量用户请求的数量和答案可以生成计算密集型任务。
- 发展专业
在软件规范变得清晰的过程中,这样一个复杂的系统应该遵循具有特殊和定制功能的MVC编程模型。 准备使用的MVC框架通常由开发人员应用:毫无疑问,这些框架的优势在于它们具有许多内置功能和选项,可用于快速解决特定子问题。 它们的层次分离很好,它们已经包含了很多安全功能,因此开发人员并不需要关心这些产品。
这些框架的缺点是它们可能包含许多根本不需要的功能,这是以减少响应时间或存储空间为代价的。 如果我们选择使用这样的外部系统,我们必须熟悉函数的命名,行为和效果。
因此,最终我们开始创建一个自定义MVC结构,它只包含所需的功能,并且我们自己也准备了安全问题。 这意味着我们根据JIT的原则开发了类,因此每个类描述仅在需要时加载。
A.自定义MVC框架
结构的基础由众所周知的模型,视图和控制层构成,如果需要,可以连接一些额外的模块(参见图1)。
这些模块,如邮件或内部消息传递模块,仅加载 - 和 保留内存 - 当代码引用它们时,所以自动加载发生在一个专用目录的即时。
- 主要结构
所有发送到网络服务器的请求 - 独立于URL [1] - 被重定向到index.php文件,如果引用的URL不存在,则它引用不存在的内容。在捕获请求并检查原始请求之后,索引文件决定必须向用户显示哪个页面。这些请求可以自由设计,并且可以指向虚拟目录,因为这些请求实际上是由公共控制层处理的。
图1.应用程序的文件结构
- 控制
“Control”层是一个静态类,只包含静态方法。每个方法都可以调用数据库处理模型层的函数,该层在响应中发送带有键值对的多维关联数组。可以通过处理此响应和一些可能的表单数据来生成视图。与数据库的通信是完全独特的,专用类(模型)负责它。
还有其他类型的请求,它们生成其他类型的输出或根本不生成它们。在一些表单请求之后进行重定向,然后发送退出命令以中止脚本的解释。
AJAX请求由客户端JavaScript程序生成,并以异步方式处理。尽管它的名称,响应不一定是XML结构,可以使用较小尺寸的JSON [4]。
Control层在不同的静态函数中处理AJAX请求,并将结果数组提供给浏览器。可以在AJAX II / F中找到对此的更详细描述。
- 视图
在数据库和业务逻辑层(后端)之间的操作期间 - 会话处理和表单中数据的处理 - 不会向浏览器生成输出。而不是将数据放入一个数组中,该数组将在“视图”层中进行迭代,并将所需数据写入模板文件中。
与前面的模板文件一样,这个模板文件是一个PHP脚本。遵循MVC模式的原则,此文件不包含任何外部调用,仅处理接收数组的元素,并生成具有简单输出命令的HTML框架。
为了缩短,HTML头部和尾部部分放置在不同的,不断调用的模板中:因此文件大小更小,可修改性更容易。
只有内部内容包含在“视图”文件中,并且对于开发人员而言变得更加透明。这很重要,因为在大型项目中,后端和前端开发人员不是同一个人:其他技术的知识和不同的心态是必不可少的。后端开发人员是程序员和数据库专家,前端开发人员是设计师,拥有图形和用户体验专家,而不是程序员。由于视图文件与主软件完全分离,问题的解决方案可以在几个人之间轻松分配,从而使整个应用程序适合于协同开发。
- 模型
通过“模型”层实现对数据库的访问。该图层是图案的基础。每个数据库操作,读取,写入,修改和删除都是通过此完成的。
在“模型”层的实现中,我们努力收集不同的查询,因此即使这些查询也不应该写在控制层中,只能用别名引用它们。查询按组放入关联数组中,其中每个别名都用作键。但是,这些大型数组不会在每次调用时创建,因为它会不必要地加载PHP的运行时内存(如果未使用)。使用单例创建运行时。
“Model”层的基础是PHP的PHP数据库对象(后来的PDO)类。借助PDO跨面向对象的调用可以访问指定的数据库。创建的协同功能很少,以简化查询。因此,只需要从Control调用相应的函数,将数组中的查询别名和条件值作为参数传递给它。条件的位置标记在存储的查询中,PDO在执行期间插入它们。这些查询称为准备好的查询。
如果查询基于SELECT语句,则返回值是包含关联数组的数组。在其他查询中,布尔结果通知我们插入,更新或删除的成功。
B.EduID登录
由于集中认证,使用该应用程序不需要学生和教师注册。他们可以使用大学的EduID系统登录[11]。通过这种方式,它们的识别由中央ID提供者完成,该提供者利用用户数据将分组发送到web应用。
Irisz系统按用户的Neptun ID对用户进行分组。显然,必须存储此信息,但没有密码可以通过IdP进入系统。
组信息也包含在关于经过身份验证的用户的数据包中,这有助于识别用户是学生,教师还是其他一些与大学相关的人。该系统目前仅与学生和教师打交道。
EduID系统基于SAML2认证协议,为了使用它,在软件中内置了SimpleSAMLphp模块。按照相应的链接,访问者将被重定向到IdP的登录页面,他/她可以登录。成功登录后,重定向到我们系统的登录页面,在此处提供身份验证包,正在处理此数据包,并且用户已登录。用户信息存储在PHP会话中,因此在实践中,用户数据 - Neptun ID和级别 - 在工作期间存储在变量中。
C.用户处理
用户处理是通过连接模块进行的:实际上,会创建一个User类对象。 要从任何地方访问此对象并确保只有一个用户处于活动状态,我们应用了单例模式。
现有用户在调用构造函数时从其会话中获取信息,并存储在静态的自有类型变量中,各种值 - 从中登录,用户是学生,教师或公司 - 可以到达。
公司登录与这些不同,因为身份验证不是使用EduID完成的,集中身份验证无法执行此操作。
这些公司必须单独注册,并且数据如联系人电子邮件地址和加密的哈希版密码都存储在数据库中。密码不是简单的哈希,而是在连接先前在配置中设置的随机查找字符串之后系统进行哈希处理:此方法称为“salting”。
在公司的登录过程中,如果登录成功,则从数据库查询生成的数据将传递给User实例的构造函数。
D.高速缓存
与分层模型的优点相反,到达Web上的数据库是一个非常缓慢的过程。其结果是,最重要的任务之一是改善响应时间。
如果经常需要的信息也存储在快速访问的临时存储中的数据库之外,则可以显着缩短访问数据库的响应时间。通过将此“Cache”模块集成到“Model”的Get方法中,只有临时存储中不包含结果才能从数据库访问结果。
缓存是作为静态类实现的,只有很少的公共方法和很少的私有方法。
为了保持代码的完整性,缓存主要是从文件和文件中完成的:因为到达文件的速度仍然快于数据查询。在实践中,我们从JSON编码的数组创建文件,因为它们更小,易于处理。这些序列化数据可以很容易地重新转换为PHP识别的数据结构。
如果查询是复杂的多表查询,则通常会提高缓存的有效性。在这种情况下,DB答案很慢,用于缓存的文件仍然只是一个文件操作。根据我们的测试,响应时间方面的有效性可能超过90%。
在处理PHP和缓存时,流行的范例是使用memcache。在这种方法中,存储不是基于文件的,但PHP本身使用物理上更快速响应的操作内存。在我们的模块化解决方案中,如果满足软件要求,并且提供了物理资源,则可以通过稍微修改Cache静态类将memcache集成到系统中。
E.记录
重要的要求是对系统进行详细的使用统计。目的是测量访问者的数量,部分结果和占用率,以及用户组使用哪个功能最多和最少的映射。
显然,这些结构化数据可以存储到数据库中,但是 - 就像任何数据库操作一样 - 存储是一个缓慢的过程。因为PHP是一种基于阻塞执行的解释语言,所以它等待模型端调用返回,直到它给出响应。因此,如果我们必须直接插入数据库,页面加载将等待,直到该过程未成功完成。如果给定进程生成多个日志条目,那么我们可以讨论秒,这总结了减慢用户的页面负载。
因此,日志创建需要两步解决方案,就像查询一样。与缓存方法一样,数组序列化存储在JSON文件中,但这些数据不是从数据库接收的,而是等待插入那里。
PHP将记录的数据附加到文件中,遵循JSON编码格式,稍后这些数据将在定时调用时移动到数据库。使用定时呼叫时,该过程根本不会打扰用户。在一般负载上,Linux的CRON大约在30分钟的间隔内调用该函数就足够了,响应时间只有几秒钟,这是合格的。为了确保以后不会出现问题,设置了5分钟的间隔,因此即使在庞大的用户群上,软件也能保持稳定。
F.AJAX请求
AJAX技术对于提供出色用户体验的Web应用程序是必需的。换句话说,经验的增强是不可访问的。
异步请求处理的基础,即AJAX,是在浏览器中运行的JavaScript解释器向Web服务器发送请求,并且响应被生成到页面中,而不重新加载它。
AJAX包只是页面大小的一小部分,因此给予AJAX调用的响应很快到达,并且只包含有关更改的信息。
AJAX包通常来自XML结构化数据,但发送JSON编码的字符串可能对我们的经验和文献有用[4]。 JSON当然更难以被人们检查,网状结构和数据理解
从内到外都缺失了,但是有关尺寸的差异使得JSON变得更好。
应用程序在生成对异步请求的响应时创建JSON编码的数组。这些被发送回浏览器,在那里转换为JavaScript数组,进行从PHP到JavaScript的动态转换。
- JQuery方法
值得在客户端使用某种框架来使JavaScript代码无平台。 尽管JavaScript是ECMAScript的标准,但是不同的浏览器对它提供不同级别的支持,并且通常在某些解释上会出现差异。
jQuery框架被认为是足够传统的,并且提到了高级AJAX支持作为其顶级功能。 为开发人员提供了多种功能和可能性,以创建更容易理解的无平台代码。 这些功能足以让客户端编码基于此框架。
- 档案编辑
用户在编辑自己的配置文件时可以注意到没有“保存”按钮,而是在修改后在数据库中更新每个字段。
这需要一个PHP端处理器,它捕获数据,由jQuery发送,验证用户,修改后的数据,并在成功更新后发送通知,或者在出现错误时发送错误消息。
JavaScript本身是基于事件的,因此客户端代码应该基于此。 如果修改了一个表单字段的内容,则调用一个处理函数,该函数发送必要的AJAX请求,并使用异步回调函数处理响应。
回调函数是JS语法的一个特殊功能:只有调用函数完成才会执行。
- 图片上传
图像上传是配置文件页面上的一个特殊过程。 修改图像是文件上传,AJAX不支持,但实际上,通过序列化,它可以解决,在后台处理如此大量的数据,并且生成结果而不重新加载页面。
在此过程中,使用了JQueryFileUpload命名扩展,用于修改和上传概要文件图片。
“控制”层处理配置文件图片非常特别,因为没有给浏览器直接链接。 生成具有由MVC识别的用户标识符的页面的链接,并且返回图像MIME类型数据。
在操作图像期间不更改此链接,仅替换背景数据。
- 表格验证
如果表单很大并且其验证取决于多个条件,则在提交后验证失败并且字段值丢失则不允许。
从PHP修改字段值会使服务器端代码不清楚,更好的方法是使用JavaScript进行验证。但是,完全将条件移动到JavaScript会使验证过程变得可以避免,因为JavaScript可以在浏览器中关闭,或者可以简单地修改或从内容页面中删除。
双方都需要验证(JavaScript和PHP),但两种语言的代码实现都是浪费时间。最佳解决方案是通过JavaScript引擎将表单内容发送到服务器,如果检测到错误,则在消息中响应。此消息显示在浏览器端的弹出警告框中。
如果内容由JavaScript验证,则提交表单,并进行PHP处理。
重要的是,如果没有JavaScript,页面必须正常运行,因此即使在提交表单时也会进行验证。如果没有对数据进行恶意修改,结果将与JavaScript验证一样成功。如果浏览器没有JavaScript,
资料编号:[4202]