别人国庆出去玩,我在家写代码的感觉也是很不错哒。

首先介绍一下技术架构吧!

  • 使用了js框架:FFF,zepto,jquery,md5.min.js
  • 前端框架:Bootstrap
  • 后端:野狗,部分PHP

github地址:https://github.com/knowThis/fex-stack.git

官网地址:http://chatroom.zhouxianbao.cn/

制作这个聊天室的时候考虑的第一个问题,是如何保证实时性。在我自己拥有的经验中保证这个实效性有两种方案,就是js的轮询,一个serverSocket。

javascript轮询

就是设置定时通过ajax向后端查询是否有更新内容,如果有就将内容反馈给前端。这样的话,简单实用,但是如果像我这样小规模小并发,完全没有必要考虑性能,但是综合考虑这样不能单纯处理并发靠机器的数量。

Js轮询的话,我想到的就是定时向后端数据库请求数据,检查是否有新的纪录。但是我想到问题,我现在的在线人数小,对后端的服务器也产生不了什么压力,如果是N个人,在一秒内产生的请求时N个,如果一个人开了N个窗口,那就是N*N个请求了,如果这样的N不断增大的,那这样的开销还是不小的。当然由于定时的特性,也不能很完美的展示时效性。

serversocket

这个就很牛逼,说出来吓死人,哈哈!长链接,可以保证时效性哦,弥补了http短板。WebSocket 规范定义了一种 API,可在网络浏览器和服务器之间建立“套接字”连接。简单地说:客户端和服务器之间存在持久的连接,而且双方都可以随时开始发送数据。详细看这里可能需要自己搭梯子http://www.html5rocks.com/zh/tutorials/websockets/basics/。Websocket 这个就是html5的一个的套接字技术,客户端和服务器之间存在持久的连接,而且双方都可以随时开始发送数据。然而它并没有在全部的浏览器中得到实施,也找到一个很好的插件socket.io。但是为了偷懒,使用野狗提供的数据存储和一套api。然后做后端支持。当然第一使用json来存储数据,在设计数据之间的关系遇到不小的挫折。

综合的话,使用web socket技术还是很不错的选择。所以后端使用了野狗咯省得自己去写后端。

来讲讲我是如何实现这个在线聊天室。

设计了四个模块,聊天内容,左部导航,头部导航,输入框。

在接下来做的过程中,使用requirejs和一号店 FFF框架,组件化开发这个东西,开发的还是蛮顺利,但是也遇到一个问题,在实例化对象的时候向后端请求中间遇到已经实例渲染页面,但是数据还没有到位的问题,我就简单粗暴的使用了setTimeout 等到数据加载完成,然后再实例。

账号之前一直是假数据,在建立账号体系的时候遇到了一个比较大的问题,就是token和密码的安全性,通常用md5加密,md5是单向的,相同的字符串产生的md5是相同的,那么也就是说字符串的拼接过程,是不能用给用户看到的,否则其他可以通过枚举来获取到密码。Js的代码对用户都是可见的,所以我就想到用php来对这个过程进行操作,再使用localstorge保存了这些token.token是用来提供一天的保持登陆的功能。

然后基于requierJS通过index.js分别实例化对象模块。首先我第一使用这种模式来开发程序,感觉比函数是还是很不错搭!

然后其他都模块开发了

就简单看一下聊天内容的对象

现在我们来看看这程序的页面吧!

目前这个聊天室,受限于野狗后端API,在很多功能上还不能做到实现。

通过做这个在线聊天室学习到很多,发现了一些现有的东西不能满足需求,所以准备去学习一下,底层的东西。非常想进FEX,我可以学的很快,做的更多。

百度前端面试题-类似slack的在线聊天室的更多相关文章

  1. 史上最全前端面试题(含答案)-A篇

    HTML+CSS1.对WEB标准以及W3C的理解与认识标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所 ...

  2. 金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上

    金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)上 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待! ...

  3. 前端面试题2016--HTML

    本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的!也是不可能的!不可能的!不可 ...

  4. 前端面试题总结(二)CSS篇

    前端面试题总结(二)CSS篇 一.link和@import的区别? link属于HTML标签,可以引入出css以外的事务,如RSS,而@import是css提供的,只能加载css文件. link会在页 ...

  5. Java前端面试题总结

    Java前端面试题总结 简单说一下HTML,CSS,javaScript在网页开发中的定位? HTML:超文本标记语言,定义网页的结构 CSS:层叠样式表,用来美化页面 JavaScript:主要用来 ...

  6. 前端面试题 之 JavaScript

    昨天我们一起分享了关于html和css的面试题<前端面试题之Html和CSS>,今天我们来分享关于javascript有关的面试题.我面试的时候最害怕面试官问我js了,因为我真心不擅长这个 ...

  7. 【web前端面试题整理02】前端面试题第二弹袭来,接招!

    前言 今天本来准备先了解下node.js的,但是,看看我们一个小时前与一个小时后的差距: 既然如此,我们继续来搜集我们的前端面试题大业吧!!! 特别感谢玉面小肥鱼提供哟,@玉面小飞鱼 题目一览 Jav ...

  8. 各大互联网公司前端面试题(js)

    对于巩固复习js更是大有裨益.    初级Javascript: 1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型 ...

  9. 前端面试题(html篇)

    前端面试题(html篇)

随机推荐

  1. intellij idea 12 搭建maven web项目

    原来公司一直使用eclipse,突然使用这个intellij还真有点不习惯,等用了一段时间才发现的确好用,因为也是刚开始用,所以很多不理解的地方,搭建一个项目从头好好了解下intellij 最开始的m ...

  2. JS 阻止整个网页的内容被选中

    pretty-girl { -webkit-user-select: none; } 可是!可是!不是每个浏览器都可以不忧桑!!!那就只能请脚本大王出山了. 阻止选中 有时候,我们需要禁止用户选中一些 ...

  3. handler消息机制

    MessageQueue代码:http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android ...

  4. Firebug入门指南

    据说,对于网页开发人员来说,Firebug是Firefox浏览器中最好的插件之一. 我最近就在学习怎么使用Firebug,网上找到一篇针对初学者的教程,感觉比较有用,就翻译了出来. ========= ...

  5. yii中数据模型的使用

    模型是 CModel 或其子类的实例.模型用于保持数据以及与其相关的业务逻辑. 模型是单独的数据对象.它可以是数据表中的一行,或者一个用户输入的表单. yii数据库操作使用的是PDO,所以使用yii的 ...

  6. 浙大pat 1035题解

    1035. Password (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To prepare f ...

  7. FZU 1893 内存管理 模拟

    比赛的时候队友要做这道题…… 他没做出来自己也被误导了…… 也算是个教训 自己还是要有自己的思路…… 又是模拟题…… 网上都是用vector做的 我最近才会stl 怎么会用那么高大上的的东西…… 强力 ...

  8. Java 散知识

    1.final关键字的用法: 1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的. 2. fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象. 3. ...

  9. ios书籍推荐

    1.Objective-C Programming  内容不多, 却都是精华, 有了一点 C 语言基础可以快速阅读此书, 大概一天时间就可以看完, 看完后对 iOS 开发能够有个基本的印象. 2.iO ...

  10. 10个男孩和n个女孩共买了n2+8n+2本书,已知他们每人买的书本的数量是相同的,且女孩人数多于南海人数,问女孩人数是多少?(整除原理1.1.3)

    10个男孩和n个女孩共买了n2+8n+2本书,已知他们每人买的书本的数量是相同的,且女孩人数多于南海人数,问女孩人数是多少? 解: 因为,每个人买的书本的数量是相同的, 所以,10|n2+8n+2 所 ...