`
xh584990686
  • 浏览: 11962 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

对于Web开发中要注意的18个关键性错误

    博客分类:
  • PHP
阅读更多
前几年,我有机会能参与一些有趣的项目,并且独立完成开发、升级、重构以及新功能的开发等工作。
 
  本文总结了一些 PHP 程序员在 Web 开发中经常忽略的关键错误,尤其是在处理中大型的项目上问题更为突出。典型的错误表现在不能很好区分各种开发环境和没有使用缓存和备份等。
 
  下面以 PHP 为例,但是其核心思想对每一个 Web 程序员都是适用的。
 
  应用程序级别的错误
 
  1、在开发阶段关闭了错误报告

 

    我唯一想问的是:为什么?为什么在开发的时候要关闭错误报告?

 

  PHP 有很多级别的错误报告,在开发阶段我们必须将它们全部开启。

 

  如果你觉得错误不会发生,那么你把程序太理想化了,在现实世界中,错误是必然的。error_reporting 和 display_error 是两个完全不同的方法,error_reporting ()设置了错误的级别,而 display_errors 则是设置错误信息是否要被输出。

 

  在开发阶段,错误报告的级别应该设置成最高的,比如以下设置: error_reporting (E_ALL);以及 ini_set (‘display_errors’, true);

 

  2、淹没错误

 

  和上一点相反,很多程序员喜欢将错误淹没了,你明知道错误会发生,但是你选择将错误隐藏掉,然后可以早早回家睡大觉,殊不知将来会发生更严重的错误。

 

  3、代码中任何地方都没有使用日志

 

  软件开发的一开始你就要牢记使用日志,不能到项目结束了才去弥补日志功能。很多程序员都会用这样或那样的手段进行日志记录,但是很少有人能真正用日志来记录异常信息,试问一个没有人查看的日志系统有什么用?

 

  4、没有使用缓存

 

  在的应用系统中,我们可以在多个系统层次上使用缓存,比如在服务端、应用端和数据库端等。和日志一样,缓存也应该在一开始就应用到系统中去,你可以在开发阶段禁用缓存,等到了产品发布后再将缓存开启。

 

  5、丢弃了最佳实践和设计模式

 

  你看到过多少人使用自己的密码加密算法?很遗憾的告诉你,有很多,因为他们认为将更了解它。

 

  最好的实践方式和设计模式已经由前辈创建了,这往往比你自己再造一个轮子要来的简单奏效,我们开发者只需要熟练掌握这些设计模式并且合理地应用在项目中即可,比如一些加密算法。

 

  6、没有使用自动化测试

 

  在每一个 Web 项目中都会使用到测试,就像日志一样,如果没有人管理和使用,那么测试也是一无是处的。

 

  运行测试工程是一项枯燥乏味的工作,幸好有一系列工具帮助我们实现自动化测试。在 PHP 开发中,有一款很好的测试工具叫 Jenkins,使用起来非常方便。

 

  7、没有做代码审查

 

  在团队中工作是一项非常大的挑战,因为每一个成员都有自己不同的工作习惯和方式,如果没有良好的规范,那么项目开发就会走很多弯路。

 

  团队中的每一个成员都应该互相审查代码,就像单元测试,它可以帮助项目变得更加干净和一致性。

 

  8、编程只考虑理想情况

 

  你是否遇到过自己或者别人的代码在交到客户手中后经常出问题,甚至是乱套了?我当然没有。

 

  出现这种情况往往是因为开发者懒惰了,只考虑了理想情况,这会导致数据库崩溃了、PHP 发生致命错误、甚至是服务器被黑。程序员在写代码时不仅要考虑最理想的情况,更要考虑最坏的情况,思考全面,才能让代码覆盖所有的情况。

 

  9、没有正确运用面向对象编程的思想

 

  大部分 PHP 初学者都不会再其代码中运用面向对象的思想,因为这个概念在刚开始的时候很难理解。

 

  当然面向对象的概念并不是简单地将一些类组织在一起。

 

  对象、属性、方法、继承和封装等都是 OOP 中最基本的概念,开发者正确使用了面向对象设计模式后,就有能力写出更干净、更有扩展性的代码了。

 

  10、“飞行模式”(On-the-fly)编程

 

  大部分开发者都会遇到这样的情况:“快,客户需要一项新功能,要能运行 ASAP”,于是你就在源代码上新增一些功能,然后直接上传到正在运行的服务器上,这种编程方式我们称其为“飞行模式”(On-the-fly)编程。

 

  我们在开发软件时,尤其是中大型的项目,都必须按照工作流程来进行分析、编程和发布,这将大大减少未来软件的 bug。这种“飞行模式”并不可取。

 

  数据库级别的错误

 

  11、没有将数据库读写分离

 

  为了能长时间运行复杂的系统,每一个程序员都应该考虑到系统的可扩展性,系统 99% 的时间都不需要考虑扩展,因为并没有如此大的流量。

 

  为什么要数据库读写分离?

 

  在每一个系统中,数据库将会是第一个出现的瓶颈,在大流量的冲击下,数据库很可能将会是第一个阵亡的。所以大部分情况下我们会用多个数据库来分散流量,开发者经常会使用 Master – Slave 模式或者 Master – Master 模式。Master – Slave 是最受欢迎的一种数据库分压模式,它会将指定的 select 语句路由到每一个 Slave 服务器,这样 Master 服务器的压力会减轻不少。

 

  12、代码只能连接到一个数据库

 

  这和上一个错误非常像,但是开发者有时候因为某些原因需要连接到多个数据库,比如你会将用户日志、活动信息流、实时数据分析等高负载的数据放到不同的数据库中来缓解对主数据库的压力。

 

  13、没有检测数据库漏洞

 

  如果你不对数据库进行漏洞检测,就相当于给大部分黑客敞开了服务器的大门。

 

  在众多漏洞中,数据库漏洞是最脆弱的,最常见的就是 SQL 注入。因此定期做数据库漏洞检测还是很有必要的。

 

  14、数据表不建索引

 

  索引在数据表中有着非常重要的作用,合适的索引可以提高每张表的性能,这里有一篇文章就讲述了如何创建索引以及何时创建索引。

 

  15、没有使用事务机制

 

  数据完整性对 Web 系统非常重要,如果数据一致性发生错误,那么整个系统都会崩溃并且难以修复。合理地运用数据库的事务机制将有效地解决这个问题。比如你要保存用户数据,在 table1 中有e-mail, username 和 password,table2 中有 first name, last name,和 gender age。我们可以利用事务对两张表更新时保证数据同时被更新或者同时不被更新。

 

  16、没有加密敏感数据

 

  对于数据库中的敏感信息,如果你不对它们进行加密,或者用简单的算法进行加密,那么在 2014 年你肯定会遇到一些麻烦的问题,黑客们一旦入侵你的数据库,用户的密码或者其他重要信息就会一览无余。

 

  PHP5.5 中提供了一个哈希加密方法,使用如下:

 

 

$hash = password_hash ( $password, PASSWORD_BCRYPT );

 

  17、没有备份

 

  看到下面这张图片没,如果遇到这样的情况,你又没有备份,那么一切都 over 了。

 

  18、没有监控

 

  没有监控,你将不知道接下来会发生什么事情,对于监控,要注意以下几个问题:

•有多少人可以直接访问这个应用服务?

•服务器是否在高负载下运行?

•我们需要用另一台数据库服务器来扩展系统吗?

•应用系统的失败点在哪里?

•系统目前正处于离线状态吗?

 

 

分享到:
评论

相关推荐

    WEB开发注意事项

    在WEB开发过程中,需要注意多个方面的细节来确保代码的性能和稳定性。以下是一些重要的实践和技巧: 1. **集合和映射对象初始化**:在创建`Collection`和`Map`对象时,应预估所需容量并正确初始化。例如,创建`...

    Web开发新人培训系列

    Web开发新人培训系列主要涵盖了Web开发的几个核心概念,包括协议、经典的Web应用网络模型、上线流程以及实践中的快速迭代与并行开发。这一系列内容对于刚接触Web开发的新人来说,是理解和掌握Web开发基础知识的重要...

    海康威视WEB3开发包.zip

    本开发包主要面向熟悉Web开发的程序员,尤其是那些希望将海康威视设备集成到自定义监控平台或业务流程中的用户。 这个"海康威视WEB3开发包.zip"包含了一系列与海康威视Web3.0开发相关的资源和文档,这些资源可以...

    海康威视开发包web版

    在"海康威视web3.0开发包"中,我们可以预期其包含了一系列针对Web3.0时代的特性升级,例如增强的用户体验设计、更强大的实时流处理能力、优化的网络适应性以及对现代Web技术(如HTML5、Websocket)的深度整合。...

    全套Web开发手册

    《全套Web开发手册》是一本综合性的资源,涵盖了Web开发的多个重要方面,包括PHP、CSS、JavaScript、HTML以及ASP等技术。对于无论是初入Web开发的新手还是有一定经验的老手,这都是一份非常实用的学习资料。下面,...

    海康web 开发包

    对于开发者来说,这是理解海康Web开发包的关键。通过阅读这些文档,开发者可以了解如何初始化控件、设置参数、获取设备状态、处理事件等,从而实现自定义的监控应用功能。 4. **Demo**: 提供的示例代码(Demo)是...

    PB12.5 web开发实例

    本实例聚焦于PB12.5中的Web开发,特别是Webservice的发布与调用,这是将PB应用程序扩展到Web平台的关键技术。 在PB12.5中,Webservice是通过SOAP(Simple Object Access Protocol)协议来实现的,它允许不同系统间...

    海康HK-WEB功能开发3.0官方开发包

    2. **跨浏览器兼容性**:在现代Web开发中,确保应用程序在不同浏览器上的正常运行至关重要。海康HK-WEB 3.0考虑到IE和Chrome的广泛使用,提供跨平台支持,尽管对Chrome的版本有特定要求。这通常涉及到对不同浏览器的...

    PHP和MySQL Web开发(原书第5版)_源码

    《PHP和MySQL Web开发(原书第5版)》是一本经典的编程教材,...通过阅读源码,你可以更深入地理解实际应用中的编程实践,提升解决问题的能力,对于想要在Web开发领域深化技能的开发者来说,这是一个不可多得的资源。

    中控指纹仪Live20R的WEB开发包

    在Web开发领域,将硬件设备如指纹仪集成到网页应用中是一项挑战,但中控提供的Web开发包解决了这个问题。这个开发包包含了所有必要的组件和文档,使开发者能够轻松地在IE和Chrome浏览器上实现指纹识别功能。这说明了...

    web开发调试方法

    在web开发过程中,调试是必不可少的一个环节,它帮助开发者找出并修复代码中的错误,提高软件的质量和稳定性。本文将深入探讨web开发的调试方法,包括常见的工具、技巧以及如何有效地利用它们来提升开发效率。 首先...

    Java Web开发实践教程源码ch10

    通过这个Java Web开发实践教程的第10章源码,你可以系统地学习和掌握Java Web开发的关键技能,为未来更复杂的应用开发打下坚实基础。同时,实际操作和调试源码将有助于加深对理论知识的理解,并提升问题解决能力。

    delphi开发webservices 接口实例

    WebServices是另一种关键的技术,它允许不同系统通过网络进行通信,实现了分布式应用程序的互操作性。在这个“delphi开发webservices接口实例”中,我们将深入探讨如何使用Delphi来创建和消费WebServices。 首先,...

    Java Web开发实战宝典 第18章

    这一章涵盖了多个关键知识点,对于任何希望深入理解Java Web开发的人来说,都是不可错过的资源。以下是根据章节标题和描述所推测的详细内容: 1. **Servlet与JSP基础** - 18.02可能涉及到Servlet和JSP的基础概念,...

    Web网站开发项目案例

    【标题】"Web网站开发项目案例"涉及到的是一个...通过学习和分析这个"Web网站开发项目案例",开发者不仅可以掌握Web开发的基本技能,还能了解到实际项目中可能遇到的问题及解决方案,提升其在Web开发领域的专业能力。

    php web 2.0开发实战

    1. **Web 2.0概念与技术**:首先,书中会介绍Web 2.0的基本概念,如Ajax(异步JavaScript和XML)、RESTful API设计、RSS/Atom订阅以及OAuth认证等,这些都是构建交互性强、用户体验良好的Web 2.0应用的关键技术。...

    Web开发常用图片

    "Web开发常用图片"这个资源包显然包含了各种在Web项目中常用的图像,旨在帮助开发者快速找到并应用这些常见的图形元素,从而节省设计和制作图片的时间。 1. **图标图片**:在Web开发中,图标常用于导航菜单、按钮、...

    《PHP和MySQL Web开发》(原书第4版)—源代码

    《PHP和MySQL Web开发》(原书第4版)是一本经典的编程教材,专注于使用PHP与MySQL技术构建动态Web应用程序。这本书的源代码包含了作者在书中...这些经验对于任何想要在Web开发领域取得进步的人来说都是宝贵的财富。

Global site tag (gtag.js) - Google Analytics