开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

LAMP架构下的Web开发概念、流程及优化策略(二)

简介:
+关注继续查看

六、目前流行的PHP框架 

应用场景二: M (业务模型,应用者编写)

C (业务控制器,应用者编写,由框架控制器自动载入)

V (视图,应用者编写,框架自动载入)

现实中复杂应用场景:

1.用户请求: http://domain/blog/list/

2.分析URL,实例化逻辑控制类blog,执行方法list

3.在控制类news,又分别实例化业务模型类bloguser,并做相应处理.

4.业务模型类blog,user,调用数据模型(专用,M),对数据进行处理.

5.回到逻辑控制类中,展现视图$this->view->output( );

 

运用中需要注意的地方

 PHP没有持久层,每一次访问请求都是独立运行,建立的模型对象不能持久存在,无法跨访问复用.如果框架/应用的设计过于繁琐,每次装载/初始化都会浪费不少时间.

 各层之间的耦合度尽量降到最低,尤其是业务模型和业务逻辑之间要尽量分离.以便日后修改或复用.

 PHP本身只有较少功能是抛出异常,大部份是抛出错误(Notice,warning,error),代码编写中应时常对应用环境的正确性做手工检查,不符合条件时手工抛出异常,并设置异常接收器统一处理

 

 单入口模式

http://domain/index.php?control=blog&action=list

http://domain/index.php?control=news&action=read

 多入口模式

http://domain/blog.php?action=list

http://domain/news.php?action=read

 PathInfo模式

http://domain/index.php/blog/list/

http://domain/index.php/news/read/

 Rewrite模式

http://domain/blog/list/

http://domain/news/read/

Rewritepathinfo的好处:对搜索引擎友好,对用户更直观

 

九、数据库抽象层、Active recode

 数据库抽象层的作用

减少与具体数据库的底层接触,提供跨数据库平台的访问接口,以实现数据操作与数据库类型的无关性.方便数据库系统的迁移变更.

 PHP本身提供的抽象层

Pear::DB(php4),PDO(php5,6)

 框架中引入的各种类Active Recode系统

目的:将数据库字段与映射到对象,不用关心具体的SQL语句,只需要操作数据对象及调用相关的方法即可实现数据的CRUD操作。

好处:模型化了数据库,快捷开发,是数据库抽象层的进一步进化。

缺点:对于复杂数据模型的处理较为无力,例如多表连查、子查询。

缺乏灵活性,比如只想要一列数据,却取出了整行。

与数据库字段名的耦合度太高。如通过配置改进,执行效率又打折扣。

难以应付复杂的Web环境。(多种数据库,分布式数据库,缓存系统介入)

 

十、模板引擎

  

 为什么引入模板引擎

视图:在web开发中通常就是指前端页面。模板引擎的引入,是为了实现视图层的分离,降低视图与逻辑、模型部份的耦合度。使得前端页面与程序部份可以并行工发、轻松整合的工具

 常见的模板引擎及特点

PHP中常用的模板引擎有 Smarty, SmartTemplate

其中smarty提供了强劲的功能,STE则非常轻巧。

两者的核心原理,都是将页面中的变量标签替换成通过assign方法注册的PHP运行变量,并将替换后的页面(“编译”后的页面文件)生成缓存保存在磁盘中。或者提供一定的逻辑控制功能供前端使用。这样即方便将程序和视图分离,使前端设计人员更着重于表现和数据,而不用关心程序上的流程.

 缺点

初次加载模板时,因生成缓存,需要额外的处理开销和IO开销

之后加载模板时,会判断模板文件的最后修改时间是否大于生成的缓存文件时间,亦有一定的额外IO开销.

 

使用模板引擎的注意事项

 

 

 

八、访问模式 

 

 Qee /FleaPHP (领域设计驱动)
 ThinkPHP (大的类库J
 Zend FrameworkPearOOP版)
 Yii 
 KiwiPHP (工业微内核)
 Symfony (配置最简单)

七、WEB中的MVC开发模式

应用场景一: M (数据模型,框架提供)

C (控制器,框架实现)

V (视图,应用者编写,框架自动载入)

应用者编写的,是供控制器装载的业务处理类

 

 

 尽量折分公用组件。

 

 不要在视图中使用太多的控制语句

就以前的经验来看,简单的if,变量循环输出即已足够。

在视图中加入太多的控制语句会带来的问题,是对设计思想的破坏,因为它打乱了将视图层独立出来的最初目的,让前端的设计人员不得不过多的关注“程序”而非页面本身。要不然就得由程序员最终回头修改前端设计人员已经做好的模板文件。

更重要的一点时:如果在模板中引入太多的控制语句,那还不如直接在页面中写<?php ,因为PHP的本身就是模板引擎。无论哪种都快不过它。

所以,尽量将控制放在PHP程序体内,不要放到视图中去跑.

 

十一、LAMP架构下的加速系统

 

 

十二、各级加速系统说明

 

 

 

 WEB服务层

Nginx :自身支持反向代理,提供简单的负载均衡及从错机制,能很方便的搭建起web服务集群.

Lighttpd:超轻量,合适搭建静态访问服务器

Squid:对动态内容亦能做缓存处理.

 PHP

APC:缓存opcode,减少了扫描和编译阶段,但仍无法实现持久对象.纯脚本效率提高在200%--500%,应用场景下实测通常能提高效率一倍.

XCACHE

 数据层

共享内存

Memcache: Key=>Value对形式的内存数据缓存服务.基于TCP连接.常用于缓存数据库查询结果.支持分布式.

缺点:关机即无,每次连接的时间开销大.

 

 

 

 

推荐的工具

 

 Editplus+PHP

 XDEBUG+Eclipse PDT

 SmartTemplate

Xdebug+ WinCacheGrind
 

 













本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/748346,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
移动 Web 开发的10个优秀 JavaScript 框架
选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务。开发人员可以使用框架实现的功能高效地达到他们的开发目标。这些预实现的组件采用优秀的设计模式和最佳实践,促进应用程序以标准化的方式开发。最重要的是,它让开人员在开发过程中得心应手。
59 0
【今日推荐】移动 Web 开发的10个最佳 JavaScript 框架
  选择正确的 JavaScript 框架,对于开发移动 Web 应用程序是至关重要的,也是移动应用程序开发的一项重要任务。开发人员可以使用框架实现的功能高效地达到他们的开发目标。这些预实现的组件采用优秀的设计模式和最佳实践,促进应用程序以标准化的方式开发。
1790 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-3.使用flex布局并开始搭建web端
lex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间。 其中justify-content(水平方向对齐)属性和align-content(垂直方向对齐)属性更方便地解决元素的对其、分布方式
74 0
技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-1.使用sass工具搭建前台web端页面
Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。
57 0
云开发Web应用实战营全面升级,限时开放报名中!带你轻松翻转课堂!
赛博和朋克不能兼得?云开发无需关心配置就能极速部署最IN的应用,让你感受畅快2077!
213 0
前端如何快速上手 Web 3D 游戏的开发
本文以「余额宝3D跑酷游戏」为例,介绍了前端如何快速上手 Web 3D 游戏的开发。
2495 0
比WEB更自然,jupyter用于通用软件开发的创新意义:使任何传统程序秒变WEB
本文关键字:online language,在线语言系统,jupyter,ipython jupyter,在线编译器,在线解释语言,engitor
388 0
msyscuione:基于msys的一体化CUI开发生产环境,支持qt,llvm,ros集成常见web appstack
CUI又称TUI,作为一个开发者和云主机这种服务性环境的使用者,无论有没有意识到,它都是装机时我们大多数情况下第一要装的。linux往往天然集成语言环境和包管理(语言级或系统桌面级),这使得云主机linux装机量往往占首位。相反在windows下没有这样一套东西,因为windows往往作为终端windows应用往往面向要求图形界面的普通用户。
151 0
物联网平台 web开发工作台调用API
参考官方文档调用Iot Studio的功能 https://studio.iot.aliyun.com/studioservice-doc#xf23qo.html
1156 0
云开发Web应用训练营云栖返场特辑,名额有限快抢!
不要再等风来,而要抬起头迎风跑。这个夏天最飒的camp云栖大会期间返场,从入门到精通快速上手Serverless和云开发技术,无需保有服务器,轻松开发并上线自己的个人博客、小程序、管理系统等。连续7天打卡奖励阿里云飞天代码T-shirt。
2865 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载