√
√
云函数插件通用教程
使用云函数插件的前提是:使用HBuilderX2.9+
uniCloud自带的数据库是改进的MongoDB。
Cloud Function 是节点环境,也可以连接其他 mysql 服务器,但由于与 Cloud Function 不在同一个外网环境,所以连接速度会比内置改进的 MongoDB 慢。
另外uniCloud自带的改进后的MongoDB功能也远强于mysql,包括clientDB和JQL的易用性和效率的提升,也是mysql无法比拟的。
因此html5连接mysql数据库html5连接mysql数据库,不建议在以后的应用中使用云函数连接mysql。 该插件主要适用于导出数据。
在HBuilderX中,使用本地运行的云功能连接mysql(将HBuilderX部署在mysql服务器的外网速度会更快),然后读取数据并写入到uniCloud自带的数据库中,完成数据导出。
下面是一个连接云函数中mysql数据库的简单示例,供有需要的开发者参考。
代码很简单,有几点需要注意:
注意更改代码示例中的mysqlserver地址和信令密码
var connection = mysql.createConnection({
host: 'mysql-server-adress',
user: 'root',
password: 'password',
database: 'dbname',
port: 3306
});
需要提前安装mysql依赖。 本例中的node_modules是外部安装的。 注意:云函数不支持异步bounce方法,需要封装为Promise调用
/**
* 封装mysql执行操作为Promise
*
* @param {Object} sql
* @param {Object} values
*/
const query = function(sql, values) {
return new Promise((resolve, reject) => {
connection.query(sql, values, (error, results, fields) => {
if (error) {
reject(error)
}else{
resolve(results)
}
})
})
}
mysql的增删改查示例如下。 更多mysql的使用请参考:
try {
//连接数据库
connection.connect()
// 新增记录
let addRes = await query('insert into users set ?', {
name: '丁元英',
age: 40
})
console.log("新增记录:", addRes)
// 删除记录
let delRes = await query('delete from users where name=? ', ['韩楚风'])
console.log("删除记录:", delRes)
//修改记录
let updateRes = await query('update users set age=? where name=? ', [50, '丁元英'])
console.log("修改记录:", updateRes)
//查询记录
let queryRes = await query('select * from users where name=? ', ['丁元英'])
console.log("查询记录:", queryRes)
//关闭连接
connection.end();
} catch (e) {
console.log('操作失败,失败信息 ', e);
}
HTTP 缓存
是一种基于 HTTP 协定的浏览器文件级缓存机制。也就是说,在重复请求文件的情况下,浏览器可以根据合约头判断是向服务器请求文件还是在本地读取文件,Chrome 控制台下的网络会显示浏览器的 http 文件级缓存。以下是浏览器缓存的整个机制流程。主要针对重复的HTTP请确定缓存情况下的过程主要分为3个步骤:
如果过期尚未过期html5离线缓存,请直接读取 HTTP 缓存文件而不发送 HTTP 请求,否则继续执行下一步。确定它是否富含 etag,发送一个请求,如果-none-match,不变返回 304,更改返回 200,否则步入下一步。判断是否富含上次修改,然后带 if-modified-自发送无效请求,返回 200,有效返回 304,否则直接向服务器请求。
如果由 etag 和 last-modified 确定,虽然返回 304,但至少有一个 HTTP 请求,但返回的是 304 的返回内容而不是文件内容。因此,合理的设计来实现 expires 参数可以减少更多的浏览器请求。
网络数据库
WebSQL 这些方法仅受较新的 Chrome 浏览器支持,并作为独立规范显示,主要具有以下功能:
WebSql 数据库 API 实际上不是 html5 规范的一部分;它早在HTML5之前就存在了,并且是一个单独的规范;它是将数据以数据库的形式存储在客户端,以便根据需求进行读取;与存储的区别在于,存储和 cookie 都作为通配符对存在;WebSql 最好检索允许的 SQL 句子查询;让浏览器实现大数据库存储的功能;这个数据库集成到浏览器中,目前主流浏览器基本都支持;
websqlAPI 由三种核心技术组成:
openDatabase:此方法使用现有数据库或创建新数据库创建数据库对象。 事务:此方法允许我们根据需要控制事务提交或回滚。 executeSql:此方法用于执行实际的SQL查询。
openDatabase 模式可以打开预先存在的数据库,如果不存在,则创建它
vardb=openDatabase('mydatabase','2.0',mydb',2*1024); openDatabasek 中的五个参数是:数据库名称、版本号、描述、数据库大小和创建跳出。创建没有的退回邮件也可以创建数据库。
database.transaction() 函数用于查询 executeSql() 以执行 SQL 句子。
三、索引数据库
IndexedDB 是一个 API,旨在在客户端存储大量结构化数据,但对该数据使用索引列宽性能检索。事实上,DOM 存储对于存储少量数据非常有用,对于存储大量结构化数据变得无效。IndexedDB提供了这样的解决方案。
IndexedDB 分别为同步和异步访问提供了单独的 API。同步 API 最初仅供 WebWorkers 内部使用,尚未由任何浏览器实现。异步 API 在 WebWorker 内部和外部都可用,浏览器在 indexDB 上可能有 50M 的大小限制,通常用户会保存大量用户数据,需要在它们之间进行搜索。
四、饼干Cookie(
或 Cookie)是指网站存储在用户本地终端上的数据(通常为加密),用于识别用户并跟踪会话。Cookie 通常以 HTTP 请求的形式一起发送到服务器端。Cookie 记录主要由键、值、域、过期时间和大小组成,通常用户会保存用户的认证信息。最大 Cookie 宽度和域名数量由不同的浏览器确定,如下所示:
浏览器支持域名数量,最大宽度IE7以上,50 4095BFirefox50,4097BOpera,30 4096BSafari/WebKit,无限4097B,不同域名之间的cookie信息是独立的,如果需要设置共享,可以在服务器端设置cookie的路径和域,实现共享。浏览器还可以通过document.cookies获取cookie,并且cookie的值可以通过js浏览器轻松读取/设置。
5. 本地存储
localStorage 是 HTML5 的一种新的本地缓存解决方案,目前更常用于存储 ajax 返回的数据,以提高最后打开页面的渲染速率。
最大浏览器宽度 IE9 以上 5MFirefox8 以上 5.24MOpera2MSafari/WebKit2.6M//localStorage 核心 API: localStorage.setItem(key,value)//Set record localStorage.getItem(key)// 获取记录 localStorage.removeItem(key)//删除域名下单条记录localStorage.clear()//删除域名下的所有记录,值得注意的是 localStorage 有大小限制,不适合存储太多数据,如果数据存储超过最大限制html5离线缓存,将报告错误并删除第一个保存的数据。
会话存储
sessionStorage 类似于 localstorage,当浏览器关闭时,它会被完全删除,并且 API 与 localStorage 相同,在实际项目中较少使用。
应用程序缓存
ApplicationCahce 将大部分图像资源、JS、CSS 和其他静态资源放入清单文件配置中。打开页面后,通过清单文件读取本地文件或请求服务器文件。
离线访问对于基于 Web 的应用程序变得越来越重要。所有浏览器都有缓存机制,但它们并不可靠,并且可能并不总是按预期工作。HTML5使用ApplicationCache套接字来解决离线带来的一些困难。前提是您要访问的网页至少已在线访问过一次。
使用缓存套接字为应用程序提供了三个好处:
离线浏览 – 用户可以在离线时浏览您的完整网站。速率 – 缓存的资源是本地的,因此加载速度更快。更少的服务器负载 – 浏览器将仅从发生修改的服务器下载资源。缓存存储
CacheStorage 在 ServiceWorker 规范中定义。CacheStorage 可以保存每个 serverWorker 声明的缓存对象,cacheStorage 有五大核心技能:打开、匹配、有、删除、键,并且可以对不同的缓存对象匹配做出不同的响应。
cacheStorage.has():如果承诺对象包含缓存对象,则返回该对象。
cacheStorage.open():打开一个缓存对象并返回一个 promise 对象。
cacheStorage.delete():如果删除了缓存对象,则返回一个承诺对象,否则返回 false。
cacheStorage.keys():任何富含键的字符串都会返回一个 promise 对象。
cacheStorage.delete():匹配键中字符串中丰富的缓存对象以返回 promise 对象。
9. 闪存缓存
这些方法基本不使用这种方法,主要基于Flash,具有浏览器端读写本地目录的功能,还可以提供API给JS调用,然后页面可以通过JS调用Flash读写特定的C盘目录,达到本地数据缓存的目的。