首页 >后端开发 >php教程 >Web开发中的18个关键监督

Web开发中的18个关键监督

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原创
2025-02-20 09:15:11519浏览

Web开发中的18个关键监督

Web开发中的18个关键监督

在过去的几年中

>本文将涵盖大多数PHP开发人员在处理中和大型项目时所做的最大的编码监督。诸如开发环境之间没有区别或不实施缓存和备份等监督。

>

以下示例在PHP中,但是每个问题背后的想法是通用的。 这些问题的根源主要在于开发人员的知识和经验,尤其是缺乏它。我不是要抨击任何人,我不认为自己是了解一切的完美开发人员,所以请忍受我。

根据我的经验,我们可以将这些问题分为三个主要组:设计级别,应用程序级别和数据库级别的监督。我们将分别分解每个。

钥匙要点

始终启用开发过程中的错误报告以尽早捕获和解决问题,以确保鲁棒的应用功能。

>

>在各个级别(服务器,应用程序,数据库)上策略性地实施缓存,以增强性能和用户体验。
  • 遵守最佳实践和建立的设计模式,以避免重新发明轮子并将不必要的风险引入您的应用。
  • >合并自动测试和连续集成以保持代码质量并促进更顺畅的部署过程。
  • >在您的团队内进行定期的代码审查和审核,以确保一致性并抓住潜在的错误。
  • >通过编写防御性代码来预测和处理可能的错误,漏洞和失败,为最坏的场景做好准备。
  • >
  • >应用程序级别的监督
  • 开发随着错误报告

>我唯一可以问的问题是:为什么?为什么在开发应用程序时不打开错误报告?

> PHP有许多级别的错误报告,应在开发阶段打开所有级别。

Web开发中的18个关键监督>如果您认为错误永远不会发生,那么您正在编码理想的情况,这仅在理想的世界中发生。

>错误报告和显示这些错误也不相同。 error_reporting()设置错误级别(例如通知,警告,致命错误)和display_errors控制这些错误是否会输出。

>

>错误报告应始终处于开发中的最高设置:error_reporting(e_all);和ini_set('display_errors',true);

注意:E_ALL是自PHP 5.4以来最高的,因为E_strict错误成为PHP 5.4中E_ALL的一部分。如果使用较旧的PHP版本,则使用error_reporting(e_all | e_strict);也包括严格的错误警告。

抑制错误

>使用@运算符抑制错误,甚至比根本不打开它更糟糕,因为您有意识地在地毯下扫了污垢。您知道错误正在发生,您只想隐藏它,关闭任务并提早回家。您没有意识到的是,在摇摇欲坠的基础上建造一些东西将在以后会产生更大的后果。

>

>您可以在此处阅读有关此的深入解释。

>

中的任何地方都没有记录

开发一个项目必须从一开始就考虑登录。您不能只是在末尾登录时螺栓。

>大多数开发人员确实使用一种或另一种方式来记录,但几乎没有时间实际验证这些日志是否存在错误。如果没有人看日志,记录的意义是什么?

> PSR建议确实存在用于记录,PSR-3是准确的,这篇出色的文章说明了如何实现PSR-3记录。>

不实施缓存

可以在应用程序中的多个级别上以多种不同的方式进行缓存,例如服务器级别,应用程序级别,数据库级别等。

> 也应从一开始就实现

缓存。您总是可以在开发中将其禁用,但是一旦将所有内容都推向生产环境,请确保一切都可以。 在服务器级别上,您可以使用varnish,这是反向http代理,它将文件存储在内存中,应安装在Web服务器的前面。> 为了加快PHP的速度,您可以安装/启用OpCode缓存,该缓存将汇编优化到PHP脚本的字节代码中。对于PHP 5.5及以后的,已经在称为OPCACHE的核心中编译了OpCode缓存。

您可以在本文中深入阅读:SitePoint PHP - 未播放的Opcache。

php 5.5之前,您可以使用APC,它也具有用户缓存功能。> 在应用程序级别上,您可以使用APCU,它是从APC中提取的用户缓存,这是另一个具有与APCU相似的功能的缓存,或者是Memcach,它是分布式缓存系统,并且具有可靠的PHP支持。 MEMCACHED也可以用于缓存数据库查询。

>

在应用程序中实现缓存时,有几种技术。一个好的做法是缓存数据,该数据不会经常变化,但会反复查询。

>高速缓存数据库对数据库进行了重大查询,因为数据库始终是每个PHP应用程序中最大的瓶颈。

忽略最佳实践和设计模式

您看到有人实现了自己的密码加密算法多少次?可悲的是,这仍然发生在今天,因为缺乏知识或更危险的是,因为“我知道更好”的态度。

好吧,我不想给您带来坏消息,但是有99%的时间您不了解它。

这些最佳实践和设计模式被认为是由软件工程师的原因比您和我更明智的原因,开发人员的唯一工作是为这项工作选择正确的模式。>

>有关此主题的书籍和资源很多。我将提到两个:

Martin Fowler的企业应用程序体系结构的模式
    Matt Zandstra
  1. 不使用自动测试
  2. 应为Web应用程序的每个功能添加测试,但是测试对于一无所有,就像日志一样,如果没有人看着它们并实际运行测试代码以查看是否有任何破坏。
>

>手动运行测试是一个令人讨厌的过程。幸运的是,“有一个

app

工具”。实际上,有很多工具可以帮助您自动化测试,这是一个称为连续集成的整体实践。

>在PHP社区中广泛使用的一种工具称为Jenkins,它是CI服务器,不仅可以测试应用程序。塞巴斯蒂安·伯格曼(Sebastian Bergmann)为詹金斯(Jenkins)创建了一个出色的模板。 如果您发现这太压倒了,则至少使用phpunit,behat或phpspec为应用程序编写单元测试。起初似乎有很多工作,但是从长远来看,测试可以帮助项目。 不审查 /审核代码

在团队中工作的

>在每个团队成员都习惯不同风格的编程风格的情况下,并且如果没有良好的规范,项目就可以迅速进行侧面。

如果您在团队中并且不检查彼此的代码,那么您应该真正做到这一点。就像单位测试一样,它有助于项目保持清洁和一致。

>

审核和审核之间的区别是您检查代码的时间。审查通常发生在将代码库合并到代码库并合并后进行审核之前。 Web开发中的18个关键监督审核是一件更好的事情,因为您有机会谈论代码,建议改进或修复,然后再与其他团队成员的代码合并。 评论的缺点是它正在阻止开发,因为在每次合并(在所有测试均为绿色的测试均为绿色之后)之前,至少有两个开发人员需要讨论代码,这是审计发挥作用的地方。

>

审核发生后进行了合并,但它是无障碍的,但功能大大降低,因为它错过了早期捕捉虫子的机会。

审核比根本不检查代码还要好。

>

为了帮助此过程尽可能平滑,您可以使用称为Phabricator的工具,该工具是由Facebook的优秀工程师专门为此目的而创建的。它支持两种代码检查策略。

为理想方案编码

>曾经发现自己或听说过一些无关紧要的样板代码并融入了所有地狱的情况?我当然做到了。

大多数情况下,这是因为开发人员很懒惰,并且为理想方案编写代码,在此情况下,数据库失败,PHP致命错误和服务器黑客攻击是不存在的。

代码应以完全相反的情况编写,开发人员应为他们能想到的最糟糕的情况编写代码,即使这样,该代码也不会涵盖某些晦涩的角案例签名并具有即时的完整管理员访问。

>假设您的服务器不会被黑客入侵,否则您的代码不会在某个时候断开,并且您的数据库始终启动并运行是错误的。生产代码应涵盖这些方案和日志错误。

在PHP中,甚至没有意识到错误,就很容易提出错误。这主要是因为过去做出的不良语言设计决策,而不是由于时间而纠正。 PHP希望使开发人员不必考虑安全性,编码和角落案例,实际上开发人员应该非常了解这一点,并始终练习防御性编程。>

不正确使用OOP原理

> PHP新的PHP开发人员

在其代码中没有使用面向对象的编程,因为首先,该概念很难掌握。 OOP在1960年代首次使用,多年来一直在不断完善,网络上有大量有关它的信息。

>

>此外,OOP不仅仅是课堂上组织的程序代码。

对象,属性,方法,继承,封装等的概念都是OOP的组成部分。

>正确使用这些原则的开发人员了解了OO设计模式,坚实的原则(单一责任,开放式,Liskov替代,接口隔离和依赖性反转)以及如何在一般而言编写清洁代码,灵活的代码,没有't具有硬编码的依赖性,并且易于扩展和建立。

> >

>了解OOP并开始编写不依赖硬依赖性的干净代码永远不会太晚(查看您,PHP Frameworks)。

“即时”编码

大多数开发人员在

上大喊大叫时要做什么实时服务器。这称为在线编码或牛仔编码。

>与其他每个行业一样,在软件开发中,工作流程和理智流程也应实施,以使项目取得成功。 通常,PHP和动态语言一般会鼓励对代码库进行快速更改,立即查看修改的结果,但是这些更改应在生产环境中受到限制。>

>只有关键的错误才能直接犯下并将其直接推向生产服务器。在其余的情况下,应实现工作流程,例如github的叉子和拉请求或gitflow。可以在此处找到有关使用git的工作流有关的更多信息:https://www.atlassian.com/git/workflows。 认为不必要的这些过程的经理和客户应该受到教育,以免其他情况。我从来没有见过一个客户,他迫不及待地等待几个小时或一天的时间来进行一些必要的步骤以实时部署。

>

>要注意的另一件事,不要将连续交付与牛仔编码和混乱管理混淆。持续交付恰好是实施和优化开发工作流程,因此可以尽快将代码部署到生产环境中。

>数据库级别的监督

不区分读 /写查询

为了支持一个长期运行的复杂项目,缩放需要在每个开发人员的脑海中。 99%的时间不需要扩展,因为它不会达到这种流量。

>

>您确定将使用许多人使用Web应用程序,例如公司内部数百名员工使用的企业应用程序,您可以做出必要的步骤,以使项目更轻松地缩放。 Web开发中的18个关键监督>为什么要分开读 /写查询?

>数据库始终是每个应用程序中的第一个瓶颈。这将是第一个在巨大流量下失败的人。为了将流量卸载到多个数据库服务器,开发人员使用Master -Slave或Master - Master Replication。 Master - Slave是最受欢迎的一个,它说每个选择语句都需要路由到从数据库服务器,而其他选择则需要将其路由到主服务器,以平衡流量。>

如果您的应用程序不知道读取和写查询之间的分离,则不会知道要连接哪个数据库服务器。

>请记住,如果您知道最终需要设置主人 - 从>>>

仅编码一个数据库连接

这与上述监督密切相关,但是有时开发人员可能有其他理由连接到多个数据库。例如,如果您将用户日志,活动流,分析或其他知道读/写操作经常发生的数据保留,则可以将此流量卸载到其他数据库服务器中。

>确保使用数据库库,该数据库库允许您连接到多个数据库服务器,并且在它们之间很容易切换。一个好的解决方案是实现PDO并使用aura.sql扩展PDO。

不测试exploits的查询

>此监督与上面的“理想场景编码”有关。同样的事情,不同的平台。

>如果您不测试数据库(和应用程序)的漏洞利用,则某些黑客会成功,他可能会成功。

>数据库容易受到一系列漏洞的影响,最常见的是SQL注入攻击。

>使用此备忘单,并通过应用程序的数据库访问库运行查询。在您的前端字段中写下这些语句,例如用户名,登录页面上的密码字段。

如果疑问都没有通过,您可以购买啤酒并庆祝。

不将索引添加到表

索引就像表的TOC一样,它是性能提升,应将其添加到每个表格中,并将其执行查询的列(例如,Whewh where子句之后的列)。

>数据库索引背后有一个完整的理论,何时创建它,在哪些列和涵盖的内容上。写了一个整个单独的文章系列。

>

不使用交易

数据完整性对于Web应用程序非常重要。如果错误处理数据,整个网站可能会破坏。

>

>您将交易用于处理的相关数据,持续或删除在一起。

>

例如,您保存有关用户的数据,例如:电子邮件,表1中的用户名密码以及诸如名称,姓氏,性别年龄等的个人资料数据。

现在,如果用户想删除其帐户,则使用交易,这应该是运行SQL查询的操作。如果您不使用交易,则可能会失去数据完整性,因为数据的操作正在单独运行。

>如果从

>表1

中删除数据成功,但失败了

>表2

,则用户的配置文件数据将保留在数据库中,更糟糕的是不会连接到任何东西,它将是孤儿。

>

>通过使用交易不会发生这种情况,因为只有在交易中所有单独的操作(例如,从表1和表2中删除数据)成功的整个操作才能成功,否则数据库将返回到先前的状态。

不固定敏感数据

>以纯文本存储密码,或者在2014年滚动您自己的加密算法是不可接受的。 PHP社区现在已经足够成熟,可以更好地了解。

>

仍然,大概有成千上万的数据库,其中敏感的数据被存储了未加密乞讨被黑客偷走。

> PHP 5.5仅为此添加了强大的哈希功能,只是称其为密码哈希。它真的很容易使用 - 您使用此方法从纯文本密码中创建哈希:>

>
$hash = password_hash( $password, PASSWORD_BCRYPT );
注意:无需加盐,因为它已经为您处理。 在数据库中存储$ hash,然后用此方法验证哈希:>

>注意:如果您没有PHP 5.5(您现在应该现在应该),则可以使用password_compat库,该库实现了完全相同的方法。

处理财务数据要棘手,因为您需要对服务器,应用程序和数据库级别具有PCI合规性。此处已经写了一篇更深入的文章:SitePoint PHP - PCI合规性和PHP开发人员。

应用程序设计监督

if ( password_verify( $password, $hash ) ) { ... }
不区分开发环境

>我看到许多开发人员甚至小型团队为自己建立了糟糕的开发环境。

例如,处理新功能或修复错误并直接在实时网站上ft ft的文件。这在许多层面上都是错误的。

>有团队可以创建的无限数量的工作流程,但是网络开发的经典是使用至少三个环境:开发,分期和生产。

>

>开发环境可以是每个程序员的本地,分期和生产通常是遥远的,并且它们之间共享一些部分。开发是用于编码的,分期用于测试,最后生产用于消费。> 当这些环境未以相同的方式设置时,就会发生疏忽。例如,每个运行不同版本的PHP的开发人员或分期配置与生产不同。

猜猜会发生什么?你说得对。一切都将在开发甚至分阶段中工作,当您将其推到生产服务器上时,所有地狱都会松散,导致漫长的夜晚和很多咖啡因。

>

难怪开发圈中最常见的短语是:“它对我有用。

>解决方案是什么?确保在每个环境中以相同的方式设置所有内容。操作系统应相同,PHP,数据库,Web服务器都应在整个环境中具有相同的版本。

由于创建了Vagrant,Docker和VirtualBox,因此现在非常容易地创建每个具有相同精确配置的环境。如果您以前从未使用过这些工具,则应停止您正在做的任何事情,并立即开始使用它们。

>

no Backup

>一切都很好,网站是直播的,按时启动,一切都启动并运行,用户消耗了美丽的数据。 nom,nom,nom…直到您在凌晨3点收到电子邮件。

>

备份,就像日志记录,缓存,安全性和防御性编程一样,在开发Web应用程序时应该是不可或缺的一部分,但是大多数开发人员(或sysadmins)忘记了。

>备份也应自动化,或者如果不可能,则至少应该每周手动备份。任何备份总比没有备份好。

>

>将代码库存储在版本控制中,并使用分布式版本控制系统(例如git或mercurial)。此设置使代码库非常多余,因为每个从事该项目的开发人员都有代码库的版本。同样,将代码基库存储在github或bitbucket上,它们具有备份。

>

备份数据库更为重要,因为它是用户创建的内容。始终将实际数据和备份存储在不同的位置。

不备份数据可能会破坏业务,这将做到这一点 - 参见Ma.gnolia的著名案例,Ma.gnolia是当天更好的社交书签网站之一。有线在整个灾难上都有一个封面故事。

>

无监视

Web开发中的18个关键监督

“一切都很棒,没有人快乐。” - 路易斯·C·K·

>您不开心,因为您不知道发生了什么。为您的应用程序实施智能监控框架确实很重要。监视回答以下问题:

  1. 有人访问了主应用服务器吗?
  2. >
  3. 服务器是重载下方吗?
  4. >
  5. 我们需要扩展到另一台数据库服务器吗?
  6. 应用程序在哪里失败?
  7. >
  8. 是脱机还是不适合我?
  9. >
  10. 在任何给定的时刻,了解这些问题的答案很重要,并且通过实时监控,您会的。为了实现这一目标,Nagios或New Relic之类的工具应成为您应用程序基础架构的一部分。
>

结论

>使用此知识成为更好的程序员。记住这些疏忽,并尽量不要犯下这些疏忽。应用程序和数据库级别的监督是最重要的记忆。

备份非常重要,始终练习防御性编程并为最糟糕的情况做好准备,这就是Web开发的运作方式。编程很难,但是做对了,很有趣。

>

清单

在下面,您会找到本文中发现的所有监督的清单。看看您现在可以越过多少人,并始终尝试将它们全部弄清楚。

  1. 是否在开发和生产中显示错误并显示错误?
  2. 请勿抑制代码中的错误。
  3. 实现一个记录框架。
  4. 使用缓存策略。
  5. 请记住并使用编程设计模式和最佳实践。>
  6. 在代码中使用测试,并尝试在代码库中发生更改时运行这些测试的自动化。>
  7. 审查或至少审核团队成员的代码。
  8. 练习防御编程。
  9. 正确地学习和使用OOP原则。
  10. 有一个可靠的工作流程和用于开发和部署代码的过程。>
  11. 区分读 /写数据库查询。
  12. >
  13. 使用可以连接到多个数据库的坚固数据库库。>
  14. 测试sql查询的漏洞。
  15. 在数据库表上学习和使用索引
  16. >使用数据库事务。
  17. >数据库中的安全敏感数据。
  18. 使用不同的编码环境:开发,分期,生产。
  19. 实施备份和监视策略。
  20. 经常询问有关网络开发监督的问题(常见问题解答)
  21. > Web开发中有哪些常见的监督?
  22. Web开发是一个复杂的过程,很容易忽略某些方面。一些常见的监督包括不对移动设备进行优化,忽略SEO,忽略网站速度和性能,不设置适当的开发环境,也不考虑跨浏览器的兼容性。这些疏忽会导致较差的用户体验,并可能对网站的性能产生负面影响。
>

>我如何设置现代网络开发环境?开发环境涉及多个步骤。首先,您需要安装一个好的文本编辑器,例如Visual Studio代码或崇高的文本。接下来,安装Node.js和NPM,这对于现代JavaScript开发至关重要。您还应该设置像Git这样的版本控制系统。最后,考虑使用YARN或NPM等软件包管理器,以及像Gulp或WebPack这样的任务跑步者。

>移动优化在Web开发中的重要性是什么?随着越来越多的用户从其移动设备访问网站,开发。未针对移动设备进行优化的网站可能会导致较差的用户体验,从而导致参与度和转化率较低。移动优化涉及设计网站的响应迅速,这意味着它可以调整以适合不同的屏幕尺寸,并确保在移动设备上迅速加载。

>如何改善网站的SEO?

改进网站的SEO涉及多个步骤。首先,确保您的网站很容易通过搜索引擎爬网。这涉及使用适当的HTML标签,创建站点地图和使用robots.txt文件。接下来,通过使用相关关键字,创建高质量内容并使用元标签来优化内容。另外,请考虑使用模式标记为搜索引擎提供更多信息。

>

为什么网站速度和性能很重要?

网站速度和性能对于用户体验和SEO至关重要。缓慢加载的网站会使用户感到沮丧并导致更高的跳出率。此外,像Google这样的搜索引擎将网站速度视为排名因素。您可以通过优化图像,缩小CSS和JavaScript文件以及使用内容输送网络(CDN)来提高网站的速度和性能。

>什么是跨浏览器兼容性,为什么重要? 🎜>跨浏览器兼容性意味着您的网站正常工作,并且在不同的Web浏览器中看起来一致。这很重要,因为您的用户可能正在使用不同的浏览器,并且在特定浏览器上无法正常工作的网站会导致用户体验差。您可以通过使用符合标准的代码并在不同的浏览器上测试您的网站来确保跨浏览器的兼容性。

>

>我如何避免使用常见的Web开发监督?

避免避免进行常见的Web开发监督涉及仔细计划和测试。确保为移动和SEO优化您的网站,建立适当的开发环境,并考虑跨浏览器的兼容性。定期在不同的设备和浏览器上测试您的网站,并使用Google Lighthouse之类的工具来检查您的网站的性能和SEO。

>版本控制系统在Web开发中的作用是什么?诸如Git之类的版本控制系统使您可以跟踪代码的更改,从而更容易与他人协作,并在必要时恢复到代码的先前版本。这是现代Web开发的必不可少的工具。

什么是软件包管理器,为什么在Web开发中很重要?

>

> npm或YARN这样的软件包管理器允许您管理和安装软件包。 ,这是可重复使用的代码。它在Web开发中很重要,因为它使管理依赖项变得更容易,并确保您的项目具有所需软件包的正确版本。

>

什么是任务跑步者,为什么在Web开发中很重要?

>诸如Gulp或WebPack之类的任务跑步者会自动化重复任务,例如缩小,编译,单位测试和绒毛。这在网络开发中很重要,因为它可以节省您的时间并帮助您维护一致的代码库。

以上是Web开发中的18个关键监督的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn