前端项目与技术实践
前端开发规范
HTML规范
head内容
head中必须定义title、keyword、description,保证基本的SEO页面关键字和内容描述。移动端页面head要添加viewport控制页面不缩放,有利于提高页面渲染性能。建议在页面
加上基本的社交RICH化消息,保证网页地址分享后能够显示缩放图、图标和描述等。
<meta name ="viewport" content ="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" >
<meta itemprop ="name" content ="页面标题" >
<meta name ="description" itemprop ="description" content ="页面内容描述" >
<meta itemprop ="image" content ="http://xxx.com/logo.png" >
img的alt属性
为
元素上加alt属性,用利于页面搜索引擎优化,对于盲人用户和图像加载失败的提示很实用(支持无障碍阅读)
<img src ="banner.jpg" alt ="宣传图片" >
label的for属性
label的for属性或者将对应控件放在label标签内部,这样在点击label时,同时会关联到对应的input或textarea上选中,增加了输入的响应区域。
<label for ="blue" > 蓝色label ><input type ="radio" id ="blue" name ="color" value ="#00f" >
<label > <input type ="radio" name ="color" value ="#f00" > 红色label >
css规范
JavaScript规范
条件判断
不要直接使用undefined进行变量判断。
if (name == undefined ) {return false ;}
if (typeof person === 'undefined' ) {return false ;}
数组拷贝
let ary = [1 , {a: 2 }];
let ary2 = [...ary];
let ary3 = {};
Object .assign(ary3, ary);
ary[1 ].a = 3 ;
ary2[1 ].a;
ary3[1 ].a;
注意:都是浅拷贝!!
数组遍历使用for…of,对象遍历使用for…in
let ary = ['a' , 'b' , 'c' ];
let obj = { a: 1 , b: 2 };
for (let item of ary) {
console.log(item);
}
for (let key in obj) {
console.log(`${key}, ${obj[key]}`)
}
前端防御性编程规范
防御性编程是指通过检测任何可能存在的逻辑异常问题的代码实现,提高脚本执行过程健壮性的一种编程手段。
t = data.userInfo.name;
t = data && data.userInfo && data.userInfo.name || 'ligang' ;
通过&& 或者|| 进行检测,这也是函数式编程所提倡的!
前端组件规范
所谓的组件通常是指采用代码管理中的分治思想 ,将复杂的项目代码结构拆分成多个独立、简单、解耦合的结构或文件的形式进行分开管理,达到让项目代码和模块更加清晰的目的,而组件规范则是我们进行拆分、组织、管理项目代码方法的一种约定。不同的是,开发规范关注文件内部代码级别的一致性,组件规范则更关注项目中业务功能模块内容组织的一致性。 任何一个独立的功能模块之间都应该是无耦合并能和其他模块很好对接和组合!
UI组件规范
(1)UI层风格统一化,相同功能的模块在相同场景下结构层和表现层应该一致;(2)增加UI层复用性;(3)更符合用户的体验习惯;(4)增加了开发规范的统一性。
模块化规范
JavaScript文件之间互相依赖引用的一种通用语法约定,即按照一定规范写JavaScript,方便被其他JavaScript文件引用。主要包括AMD(Asynchronous Module Definition,异步模块定义)、CMD(Common Module Definition,通用模块定义)、CommonJS、import/export等。参考:前端模块系统
项目组件化设计规范
为了实现对复杂的项目进行管理,我们通常使用组件,目前实现组件化的方案也越来越多:Web Component组件化、MVVM框架组件化(通常,将页面中的模块按照元素来划分,并将模块相关的描述语法、CSS样式、执行脚本放在同一个文件里进行引用)、基于Virtual DOM框架的组件化、直接基于目录管理的组件化等。
自动化构建
自动化构建时基于项目代码文件级 的分析处理。
注意, 为了保证首屏加载的资源最小化,非首屏内容希望通过JavaScript来异步渲染,这就需要构建工具能将非首屏的组件打包成异步资源,以按需或异步的方式加载。在开发中,我们通常不希望关注异步与同步组件的区别,所以通过将异步组件放在异步的目录里进行单独打包或者加入特殊的标识。
以require的引用方式为例,了解一下JavaScript组件模块文件的依赖分析过程:
从入口模块开始分析require函数调用依赖;
根据依赖生成JavaScript AST(Abstract Syntax Tree,抽象语法树,将JavaScript代码映射成一个树形结构的JSON对象树)
根据AST找到每个模块的模块名;
得到每个模块的依赖关系,生成一个依赖字典;
根据模块化引用机制包装每个模块,传入依赖字典以及import或require函数,生成执行的JavaScript代码。
前端性能优化
用户获取页面数据或执行某个页面动作的一个实时性指标,一般以用户希望获取数据的操作到用户实际获得数据的时间间隔来衡量。用户的等待延迟可分为两部分:可控等待延时(资源大小、HTTP数量等)和不可控等待延时(鼠标点击延时、CPU计算延时、ISP网络传输延时等) 。
用于记录页面加载和解析过程中关键时间点的机制,它可以详细记录每个页面资源从开始加载到解析完成这一过程中具体操作发生的时间点。(图片引自:https://w3c.github.io/navigation-timing/ )
performance.timing.loadEventEnd - performance.timing.navigationStart;
let p = performance.getEntriesByName("https://www.baidu.com/" );
p[0 ].responseEnd - p[0 ].requestStart;
p[0 ].domComplete - p[0 ].domInteractive;
p[0 ].loadEventEnd - p[0 ].loadEventStart;
参考资料:https://www.w3.org/TR/2017/CR-resource-timing-1-20170330/
Profile工具
Profile用来测试页面脚本运行时系统内存和CPU资源占用情况的API,可以获得如下几个信息:
分析页面脚本执行过程中最消耗资源的操作;
记录页面脚本执行过程中JavaScript对象消耗的内存与堆栈的使用情况;
检测页面脚本执行过程中CPU占用情况。
console.profile();
document.querySelector('#content' ).innerHTML = '棒棒' ;
calc();
function calc () {
let result = null ;
for (let i = 0 ; i < 100000 ; i++) {
result += i;
}
return result;
}
console.profileEnd();
资源加载时序图
通过时序图可以确保文件加载顺序的情况,查看是否存在十分耗时的阻塞页面展示的资源加载。
桌面浏览器前端优化策略
避免页面中空的href和src :浏览器在渲染的过程中仍会将href属性或src属性中的空内容进行加载,直至失败,这样会阻塞页面中其他资源的下载进程;
为HTML指定Cache-Control或Expires: 在页面Cache-Control或Expires头部有效时,浏览器将直接从缓存中读取内容,不向服务器发送请求;
减少页面重定向: 一次重定向大约需要600毫秒的时间开销;
将静态资源分域存放来增加并行下载数: 同一时刻向同一域名请求文件的并行下载数是有限的,因此可以使用多个域名的主机来存放不同的静态资源,同时可以隔离Cookie,减少了请求头大小 ;
使用CDN Combo下载传输内容: 复用HTTP连接,将多个文件请求打包成一个文件的形式来返回,以减少HTTP请求数;
<script src ="//cdn.xxx.com/path/a.js,b.js,c.js" > script >
缩小favicon.ico并缓存: 一般Web应用的favicon.ico是很少改变的;
推荐使用异步JavaScript资源: 使用async时,加载和渲染后续文档元素的过程和main.js的加载和执行 是并行的;使用defer时,加载后续文档元素的过程和面.js的加载 是并行的,但是main.js的执行 要在页面所有元素解析完成之后才开始执行;
<script src ="main.js" defer > script >
<script src ="main.js" async > script >
避免使用CSS import引用加载CSS: 因为这样会增加CSS资源加载的关键路径长度,代用@import的CSS样式需要在CSS文件串行解析到@import时才会加载另外的CSS文件,大大延后CSS渲染完成的时间;
CSS放到
中,JavaScript放到
文档底部: 这样可以尽早完成页面渲染,同时防止JavaScript的加载和解析执行对页面渲染造成阻塞;
尽量避免使用、
等慢元素:内容的渲染是将table的DOM渲染树全部生成完并一次性 绘制到页面上;iframe内资源的下载进程会阻塞父页面静态资源的下载与CSS及HTML DOM的解析,尽量使用异步的方式动态添加iframe;
移动端浏览器前端优化策略
确保首屏内容最小化: 首屏所有资源大小不超过1MB;
inline首屏必备的CSS和JavaScript: 将首屏加载的CSS和JavaScript内联到页面中;
meta dns prefetch 设置DNS预解析: 让浏览器提前解析获取静态资源的主机IP;
<meta http-equiv ="x-dns-prefetch-control" content ="on" >
<link rel ="dns-prefetch" href ="//cdn.domain.com" >
**合理利用MTU策略:**TCP网络传输最大传输单位(Maximum Transmission Unit,MTU)为1500B,即一个RTT(Round-Trip Time,网络请求往返时间)内可以传输的数据量最大为1500字节,因此尽量保证页面HTML内容控制在1KB内;
合理使用base64内嵌图片: 较小的图片可以使用base64嵌入到HTML页面或CSS中,大于2KB不推荐使用base64;
.class-name {
background-image : url('data:image/png;base64,iVboR...' ) ;
}
尽量使用事件代理,避免直接事件绑定: 使用事件代理可以避免对每个元素都进行绑定,并且可以避免出现内存泄漏及需要动态添加元素的事件绑定问题;
**使用touchstart代替click:**touchstart事件和click事件触发时间之间存在300毫秒的延时;
避免touchmove、scroll连续事件处理: 应该使用节流函数,可参照debounce与throttle区别;
不要滥用float: 使用float的元素布局计算比较消耗性能;
**尝试使用SPDY和HTTP2:**SPDY基于TCP,对HTTP的增强版(多路复用,请求优先级,HTTP报头压缩);
前端用户数据分析
因为目前从事的公司Ptmind就是在做用户数据分析,自己也是Ptengine采集器的主力,所以后续有时间单独进行描述!
前端日志上报
浏览器提供了try…catch和window.onerror两种机制来帮助我们获取用户页面的脚本错误信息。window.onerrorl可捕获脚本语法错误和运行时错误,但对于报错的JavaScript和HTML不在同一域名下,获得的错误都是script error,可以通过
来获取具体信息。
window.onerror = function (messageOrEvent, source, lineno, colno, error) {
console.log(messageOrEvent, source, lineno, colno, error);
return true ;
};
捕获到错误后,我们需要根据一定的概率进行上报(如果将所有错误进行上报会占用日志收集服务器的很多资源和流量),通常我们可以进行封装log.log,在开发环境中直接使用console.log/error
,在生产环境使用XMLHttpRequest
。总之,我们需要根据实际情况指定,千万不可过度设计 !
前端搜索引擎优化
一定要定义title、keywords、description: 多个title值使用分隔符(“_”、“-”、“ ”、“,”),确保每个页面的title是对一无二的;
每个页面都有一个唯一的H1,同时所有的img都有alt属性:
作为页面最高层的标题通常容易被搜索引擎收录;
如果URL发生改变,一定要使旧地址301指向新的页面,否则搜索引擎会把这个当成死链处理 ;
canonical: 通常会将下面当做3个地址当做3个页面
//:domain.com /index.html
//:domain.com /index.html ?from=123
//:domain.com /index.html ?form=456
可以在
上加上canonical声明,告诉浏览器将按照这个href进行收录
<link rel ="cononical" href ="//:domain.com/index.html" />
将robots.txt放置站点根目录,禁止抓取网站某些内容
sitemap.html或sitemap.xml列出所有URL,便于搜索引擎获取
前端协作
明确、合理、可行、性价比、风险。做团队技术驱动者和突破者!
你可能感兴趣的:(JavaScript)
TypeScript语言的字符串处理
轩辕烨瑾
包罗万象 golang 开发语言 后端
TypeScript语言的字符串处理在现代编程语言中,字符串处理是非常重要的一部分。对于TypeScript这样的语言,更是让开发者在处理字符串时得到了更为安全和强大的工具。本文将深入探讨TypeScript中的字符串处理技术,包括字符串的基本操作、模板字符串、字符串方法、正则表达式以及常用的字符串处理技巧等。一、TypeScript基础与字符串的基本操作TypeScript是JavaScript
arcgis js 怎么加载geoserver发布的wms服务
niuge No.1
1024程序员节
arcgisjsapi加载wms服务,官方的参考样例:WMSLayer|SampleCode|ArcGISMapsSDKforJavaScript4.30|EsriDeveloper按照官方样例加载比较奇怪,我们平常习惯用url或者json的方式加载,稍微改一下就行,如下:constlayer=newWMSLayer({url:"http://127.0.0.1:8080/geoserver/ne
MongoDB详细讲解 + springboot集成
you0719
简单学点java 数据库 java
MongoDB以JSON为数据模型的文档非关系型数据库垂直扩展在一个机器上进行性能扩展水平扩展多个机器的扩展定位特点定位为应用数据库,存储数据特点:量大/非敏感/一定的查询性能MongoDB的语法是JavaScript语法添加db.集合名.insert(js对象)编辑db.集合名.updateMany({key:value}{$set:{key:value}})删除db.集合名.deleteMan
uniapp APP端页面触发调用uniapp开发的webview里的方法
printf_824
uniapp分享 uni-app
原理:使用getCurrentInstance()获取当前组件的Vue实例,通过instance.proxy.$scope.$getAppWebview()获取Uniapp的原生WebView对象。使用WebView提供的evalJS方法,执行嵌入H5页面内的JavaScript代码functiongetData(){url.value="http://192.168.0.22:5174/#/pa
Blazor-ApexCharts 开源项目指南
凌桃莺Talia
Blazor-ApexCharts开源项目指南项目地址:https://gitcode.com/gh_mirrors/bl/Blazor-ApexCharts一、项目介绍Blazor-ApexCharts是一个用于Blazor框架的图表组件库封装,它基于流行的前端图表库ApexCharts.js实现。这个项目旨在简化在Blazor应用中添加交互式图表的过程,无需直接处理复杂的JavaScript互
Vue教程|搭建vue项目|Vue-CLI新版脚手架
cnsxjean
vue.js javascript 前端框架 npm ui
一、安装Node环境安装Node及Npm环境Node下载地址:Node.js—RunJavaScriptEverywhereNode.js®isaJavaScriptruntimebuiltonChrome'sV8JavaScriptengine.https://nodejs.org/en/安装完成后,检查安装是否成功,并检查版本,命令如下:node-vnpm-vmac@MacdeMacBook-
xss的过滤和绕过(2)
rzydal
学习 笔记 网络安全 xss 计算机网络
xss的过滤和绕过分类过滤主要有两层,分别为WAF层和代码层,WAF(web应用防火墙)通常是在外部,在主机或者网络硬件上,对HTTP请求进行过滤拦截,而代码层是在编写web应用的过程中,直接实现或者音乐第三方库,对用户输入进行过滤,但是JavaScript语法非常灵活,所以对于普通的正则匹配,字符串比较,很难拦截xss。1.富文本过滤在发送邮件或者博客的情景下,用户有需求实现富文本的编辑,比如插
js高阶-响应式原理
silver687
javascript
在JavaScript中,响应式原理通常是指一种编程模式,它允许开发者创建能够自动响应数据变化的系统或应用。这种模式在现代前端框架(如Vue.js、React等)中非常常见,尤其是在数据绑定和UI更新方面。以下是响应式原理的核心概念和实现方式的详细解释:----1.响应式原理的核心概念响应式编程的核心是数据驱动和自动更新。当数据发生变化时,相关的UI或逻辑会自动更新,而无需手动触发更新操作。这种模
2025年前端发展趋势
贵州数擎科技有限公司
前端 javascript
开发领域:前端开发|AI应用|Web3D|元宇宙技术栈:JavaScript、React、ThreeJs、WebGL、Go经验经验:6年+前端开发经验,专注于图形渲染和AI技术开源项目:github晓智元宇宙、数字孪生引擎、前端面试题大家好!我是[晓智],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!
js能不能清楚浏览器缓存?
涔溪
js javascript 缓存 开发语言
JavaScript本身并没有直接清除浏览器缓存的API。但是,你可以使用一些间接的方法来促使浏览器刷新缓存或在某些情况下模拟清除缓存的行为。这里有几个方法:强制刷新页面资源:可以通过为资源链接添加查询字符串的方式(如版本号或时间戳)来确保加载最新的资源,而不是缓存的版本。例如:。使用ServiceWorker:如果你正在使用ServiceWorker来管理缓存,你可以编写代码来控制哪些资源应该被
javaScript 的语法糖全解
Young丶
vue3 js javascript 开发语言 ecmascript
最近在阅读一些JavaScript代码时,我们发现很多时候可以用更简洁的语法来完成相同的操作,这便是“语法糖”的魅力。语法糖是一种对底层语法的封装和简化,通过编译器将其转换成等价的标准语法来实现。例如,在Java中,泛型和Lambda表达式都是语法糖。泛型在编译过程中会被转换成非泛型的形式,而Lambda表达式会被转换为对应的匿名内部类形式。语法糖的优缺点优点:简洁性:语法糖使代码更加简洁
【华为OD】| 最多获得的短信条数、云短 信平台优惠活动_完全背包
buff会技术的程序媛
- JS】 技术杂谈 技术learn 算法 java
目录一.题目描述二.输入描述三.输出描述用例四.题目解析五.Java玩法六.JavaScript玩法一.题目描述某云短信厂商,为庆祝国庆,推出充值优惠活动。现在给出客户预算,和优惠售价序列,求最多可获得的短信总条数。二.输入描述第一行客户预算M,其中0<=M<=10^6第二行给出售价表,P1,P2,…Pn,其中1<=n<=100Pi为充值i元获得的短信条数。1<=Pi<=1000,1<=n<=10
2025年前端面试题汇总
涔溪
前端
JavaScript核心异步编程Promise、async/await的工作原理及应用场景。如何处理并发请求,使用Promise.all()或Promise.race()等方法。解释事件循环机制,理解微任务(microtask)与宏任务(macrotask)的区别。原型链深入理解JavaScript中的原型继承模型。举例说明如何通过修改原型对象影响所有实例。闭包定义闭包及其作用,如实现私有变量和函
全网最详细Gradio教程系列5——Gradio Client: javascript
龙焰智能
Gradio全解教程 javascript gradio client playcode.co npm cdn node.js
全网最详细Gradio教程系列5——GradioClient:javascript前言本篇摘要5.GradioClient的三种使用方式5.2使用GradioJavaScriptClient5.2.1安装1.npm方式:node.js2.CDN方式3.在线运行环境:PLAYCODE5.2.2连接到Gradio程序1.通过URL或SpaceID连接2.辅助:duplicate()和hf_token5
Webpack、Vite区别知多少?
brrdg_sefg
webpack 前端 node.js
前端的项目打包,我们常用的构建工具有Webpack和Vite,那么Webpack和Vite是两种不同的前端构建工具,那么你们又是否了解它们的区别呢?我们在做项目时要如何选择呢?一、工具定义1、Webpack:是一个强大的静态模块打包工具,它可以将各种类型的文件,如JavaScript、CSS、图片等,作为模块进行打包,并生成最终的静态资源文件。Webpack使用各种loader和plugin来处理
深入探讨Web应用开发:从前端到后端的全栈实践
禁默
前端
目录引言1.Web应用开发的基本架构2.前端开发技术HTML、CSS和JavaScript前端框架与库响应式设计与移动优先3.后端开发技术Node.js(JavaScript后端)Python(Flask和Django)RubyonRailsJava(SpringBoot)4.数据库选择与管理关系型数据库(SQL)非关系型数据库(NoSQL)5.API设计与开发RESTfulAPIGraphQL6
Node.js 镜像的全方位指南
ivwdcwso
node.js
Node.js是一门广泛应用于构建服务器端和客户端应用的JavaScript运行时。在容器化环境中,构建和使用Node.js镜像是非常常见的任务。以下是有关Node.js镜像的通常选择、制作流程、不同场景下的应用、安全性最佳实践以及镜像优化的全方位指南。1.选择合适的基础镜像1.1官方Node.js镜像DockerHub提供了官方Node.js镜像,由Node.js官方维护,提供了最新的稳定版本和
包管理工具 npm/yarn/pnpm对比,你选对了码
小姚爱吃辣
yarn
在前端开发领域,包管理工具是开发者不可或缺的利器。它们不仅帮助我们管理依赖,还能提升项目的构建效率。目前,最常用的三大前端包管理工具分别是npm、Yarn和pnpm。本文将深入探讨这三种工具的优缺点,帮助你在项目中做出最合适的选择。一、npm图片1.什么是npm?npm(NodePackageManager)是随Node.js一起发布的包管理和分发工具。它是目前使用最广泛的JavaScript包管
前端打包工具之npm、yarn、pnpm对比
前端~初学者
前端工程化 前端 npm node.js
前端打包工具之npm、yarn、pnpm对比1、npm1.1概述1.2安装1.3常用命令1.4优缺点2、yarn2.1概述2.2安装2.3常用命令2.4优缺点3、pnpm3.1概述3.2安装3.3常用命令3.4优缺点2.54、总结1、npm1.1概述NPM(NodePackageManager),作为默认的JavaScript应用包管理器,与Node.js一同安装,它是目前使用最广泛的包管理器,得
在Vue中使用Web Worker详细教程
m0_74825656
前端 vue.js javascript
1.什么是WebWorker**WebWorker?**是2008年h5提供的新功能,每一个新功能都是为了解决原有技术的的痛点,那么这个痛点是什么呢?1.1JavaScript的单线程JavaScript为什么要设计成单线程?这与js的工作内容有关:js只是用来去做一些用户交互,并呈现效果内容。如果js是多线程,线程一将dom元素的背景色改成红色,线程二将dom元素的背景色改为绿色,那么,到底上红
掌控 React 表单:详解受控组件和非受控组件
大家好,我是长林啊!一个爱好JavaScript、Go、Rust的全栈开发者;致力于终生学习和技术分享。本文首发在我的微信公众号【长林啊】,欢迎大家关注、分享、点赞!在开发过程中,经常涉及到用户输入的表单处理;表单可以分为两种类型:受控表单(ControlledComponents)和非受控表单(UncontrolledComponents)。这两种表单在处理用户输入和状态管理时有着不同的方式。例
Node.js 安装及环境配置指南
ADFVBM
node.js
文章目录前言一、Node.js概述二、准备工作三、Node.js安装1.Windows系统2.macOS系统3.Linux系统四、环境配置五、常用命令和技巧六、常见问题及解决方案结语前言随着互联网技术的不断发展,JavaScript已经成为了一门全栈编程语言。Node.js的出现,使得JavaScript不仅可以用于浏览器端,还可以用于服务器端的开发。本文将为您提供一个保姆级的教程,详细介绍如何在
【Node.js]
ADFVBM
面试 学习路线 阿里巴巴 node.js
一、概述Node.js是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。官网地址:https://nodejs.org/zh-cnNode.js学习路线:JavaScript基础语法+Node.js内
实现星海波动粒子特效:基于 Canvas 和 JavaScript 的 3D 波动效果
软件工程师文艺
前端 javascript 3d 开发语言
1,前言近年来,Web动效和图形呈现技术的不断进步,使得许多动态效果可以通过浏览器轻松呈现。在这篇文章中,我将介绍如何实现一个美丽的“星海波动”3D粒子特效,利用Canvas和JavaScript绘制出一个带有波动效果的粒子阵列。此特效呈现的是一个平面波的运动,粒子沿着波动路径做着动态的上下运动,同时加入了3D旋转效果,营造出一种如同星海波动般的奇妙视觉效果。2,效果展示在特效中,粒子沿着一个波动
网安快速入门之JS基础
天启互联网工作室
javascript 开发语言 ecmascript
JS定义JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。它以其作为开发Web页面的脚本语言而闻名,但也被广泛应用于非浏览器环境中。JavaScript是一种基于原型编程、多范式的动态脚本语言,支持面向对象、命令式、声明式和函数式编程范式。简言而知:JS->利用脚本,让网站动起来基本语法var定义一个全局变量,如:vara=123;varx=10;con
知识篇:(五)JavaScript 数组进阶操作:对象属性操作、数组转换与求和
全栈探索者chen
前端 javascript 知识分享 javascript 开发语言 ecmascript
JavaScript数组进阶操作:对象属性操作、数组转换与求和JavaScript数组的操作功能非常强大,尤其在处理数组中对象的属性、二维数组的转换、数组求和等场景下,能极大简化开发工作。本文将介绍几个进阶的数组操作方法及其代码示例。知识篇:(四)JavaScript数组操作方法详解及示例1.计算数组中对象的属性之和1.使用reduce()这是最常见、简洁的方式,用于对数组中的对象属性求和。let
JavaScript系列(38)-- WebRTC技术详解
陳沉辰陈
JavaScript javascript webrtc 开发语言
JavaScriptWebRTC技术详解今天,让我们深入了解WebRTC(WebReal-TimeCommunication)技术,这是一种支持网页浏览器进行实时语音对话或视频对话的技术。WebRTC基础概念小知识:WebRTC是一个开源项目,旨在使得浏览器能够进行实时音视频通信,而无需安装任何插件。它不仅支持音视频传输,还支持任意数据的点对点传输。基本实现//1.WebRTC连接管理器class
理解JavaScript闭包
abs()
javascript 开发语言 ecmascript
理解JavaScript闭包闭包在JavaScript中可以理解为一个函数“记住”并可以访问它被创建时的环境中的变量,即使这个函数在其他地方被调用。更通俗的例子假设你有一个外公,他有一个秘密花园。外公希望你长大后能记住这个秘密花园的位置,但当他去世后,其他人不知道这个秘密花园在哪里。你可以理解为,你就是一个闭包,记住了外公的秘密花园的位置。function外公的秘密花园(){var秘密花园位置="
前端面试题-手写篇-万字长文!
前端Jason
面试 前端 面试 前端面试
1.手写实现EventBus实现一个简单的EventBus(事件总线)可以让我们在不同的组件或模块之间进行事件驱动的通信。下面是一个用JavaScript手写实现EventBus的基本例子:classEventBus{constructor(){this.events={};//存储事件名与对应的监听器}//注册事件监听器on(event,listener){if(!this.events[eve
使用 MySQL 从 JSON 字符串提取数据
m0_74825678
面试 学习路线 阿里巴巴 mysql json oracle
使用MySQL从JSON字符串提取数据在现代数据库管理中,JSON格式因其灵活性而广泛使用。然而,当数据存储在JSON中时,我们经常需要将其转换为更易于处理的格式。本篇文章将通过一个具体的SQL查询示例,展示如何从存储在MySQL中的JSON字符串提取数据并重新格式化。1.背景知识JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器
ios内付费
374016526
ios 内付费
近年来写了很多IOS的程序,内付费也用到不少,使用IOS的内付费实现起来比较麻烦,这里我写了一个简单的内付费包,希望对大家有帮助。
具体使用如下:
这里的sender其实就是调用者,这里主要是为了回调使用。
[KuroStoreApi kuroStoreProductId:@"产品ID" storeSender:self storeFinishCallBa
20 款优秀的 Linux 终端仿真器
brotherlamp
linux linux视频 linux资料 linux自学 linux教程
终端仿真器是一款用其它显示架构重现可视终端的计算机程序。换句话说就是终端仿真器能使哑终端看似像一台连接上了服务器的客户机。终端仿真器允许最终用户用文本用户界面和命令行来访问控制台和应用程序。(LCTT 译注:终端仿真器原意指对大型机-哑终端方式的模拟,不过在当今的 Linux 环境中,常指通过远程或本地方式连接的伪终端,俗称“终端”。)
你能从开源世界中找到大量的终端仿真器,它们
Solr Deep Paging(solr 深分页)
eksliang
solr深分页 solr分页性能问题
转载请出自出处:http://eksliang.iteye.com/blog/2148370
作者:eksliang(ickes) blg:http://eksliang.iteye.com/ 概述
长期以来,我们一直有一个深分页问题。如果直接跳到很靠后的页数,查询速度会比较慢。这是因为Solr的需要为查询从开始遍历所有数据。直到Solr的4.7这个问题一直没有一个很好的解决方案。直到solr
数据库面试题
18289753290
面试题 数据库
1.union ,union all
网络搜索出的最佳答案:
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
2.索引有哪些分类?作用是
Android TV屏幕适配
酷的飞上天空
android
先说下现在市面上TV分辨率的大概情况
两种分辨率为主
1.720标清,分辨率为1280x720.
屏幕尺寸以32寸为主,部分电视为42寸
2.1080p全高清,分辨率为1920x1080
屏幕尺寸以42寸为主,此分辨率电视屏幕从32寸到50寸都有
适配遇到问题,已1080p尺寸为例:
分辨率固定不变,屏幕尺寸变化较大。
如:效果图尺寸为1920x1080,如果使用d
Timer定时器与ActionListener联合应用
永夜-极光
java
功能:在控制台每秒输出一次
代码:
package Main;
import javax.swing.Timer;
import java.awt.event.*;
public class T {
private static int count = 0;
public static void main(String[] args){
Ubuntu14.04系统Tab键不能自动补全问题解决
随便小屋
Ubuntu 14.04
Unbuntu 14.4安装之后就在终端中使用Tab键不能自动补全,解决办法如下:
1、利用vi编辑器打开/etc/bash.bashrc文件(需要root权限)
sudo vi /etc/bash.bashrc
接下来会提示输入密码
2、找到文件中的下列代码
#enable bash completion in interactive shells
#if
学会人际关系三招 轻松走职场
aijuans
职场
要想成功,仅有专业能力是不够的,处理好与老板、同事及下属的人际关系也是门大学问。如何才能在职场如鱼得水、游刃有余呢?在此,教您简单实用的三个窍门。
第一,多汇报
最近,管理学又提出了一个新名词“追随力”。它告诉我们,做下属最关键的就是要多请示汇报,让上司随时了解你的工作进度,有了新想法也要及时建议。不知不觉,你就有了“追随力”,上司会越来越了解和信任你。
第二,勤沟通
团队的力
《O2O:移动互联网时代的商业革命》读书笔记
aoyouzi
读书笔记
移动互联网的未来:碎片化内容+碎片化渠道=各式精准、互动的新型社会化营销。
O2O:Online to OffLine 线上线下活动
O2O就是在移动互联网时代,生活消费领域通过线上和线下互动的一种新型商业模式。
手机二维码本质:O2O商务行为从线下现实世界到线上虚拟世界的入口。
线上虚拟世界创造的本意是打破信息鸿沟,让不同地域、不同需求的人
js实现图片随鼠标滚动的效果
百合不是茶
JavaScript 滚动属性的获取 图片滚动 属性获取 页面加载
1,获取样式属性值
top 与顶部的距离
left 与左边的距离
right 与右边的距离
bottom 与下边的距离
zIndex 层叠层次
例子:获取左边的宽度,当css写在body标签中时
<div id="adver" style="position:absolute;top:50px;left:1000p
ajax同步异步参数async
bijian1013
jquery Ajax async
开发项目开发过程中,需要将ajax的返回值赋到全局变量中,然后在该页面其他地方引用,因为ajax异步的原因一直无法成功,需将async:false,使其变成同步的。
格式:
$.ajax({ type: 'POST', ur
Webx3框架(1)
Bill_chen
eclipse spring maven 框架 ibatis
Webx是淘宝开发的一套Web开发框架,Webx3是其第三个升级版本;采用Eclipse的开发环境,现在支持java开发;
采用turbine原型的MVC框架,扩展了Spring容器,利用Maven进行项目的构建管理,灵活的ibatis持久层支持,总的来说,还是一套很不错的Web框架。
Webx3遵循turbine风格,velocity的模板被分为layout/screen/control三部
【MongoDB学习笔记五】MongoDB概述
bit1129
mongodb
MongoDB是面向文档的NoSQL数据库,尽量业界还对MongoDB存在一些质疑的声音,比如性能尤其是查询性能、数据一致性的支持没有想象的那么好,但是MongoDB用户群确实已经够多。MongoDB的亮点不在于它的性能,而是它处理非结构化数据的能力以及内置对分布式的支持(复制、分片达到的高可用、高可伸缩),同时它提供的近似于SQL的查询能力,也是在做NoSQL技术选型时,考虑的一个重要因素。Mo
spring/hibernate/struts2常见异常总结
白糖_
Hibernate
Spring
①ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException
缺少aspectjweaver.jar,该jar包常用于spring aop中
②java.lang.ClassNotFoundException: org.sprin
jquery easyui表单重置(reset)扩展思路
bozch
form jquery easyui reset
在jquery easyui表单中 尚未提供表单重置的功能,这就需要自己对其进行扩展。
扩展的时候要考虑的控件有:
combo,combobox,combogrid,combotree,datebox,datetimebox
需要对其添加reset方法,reset方法就是把初始化的值赋值给当前的组件,这就需要在组件的初始化时将值保存下来。
在所有的reset方法添加完毕之后,就需要对fo
编程之美-烙饼排序
bylijinnan
编程之美
package beautyOfCoding;
import java.util.Arrays;
/*
*《编程之美》的思路是:搜索+剪枝。有点像是写下棋程序:当前情况下,把所有可能的下一步都做一遍;在这每一遍操作里面,计算出如果按这一步走的话,能不能赢(得出最优结果)。
*《编程之美》上代码有很多错误,且每个变量的含义令人费解。因此我按我的理解写了以下代码:
*/
Struts1.X 源码分析之ActionForm赋值原理
chenbowen00
struts
struts1在处理请求参数之前,首先会根据配置文件action节点的name属性创建对应的ActionForm。如果配置了name属性,却找不到对应的ActionForm类也不会报错,只是不会处理本次请求的请求参数。
如果找到了对应的ActionForm类,则先判断是否已经存在ActionForm的实例,如果不存在则创建实例,并将其存放在对应的作用域中。作用域由配置文件action节点的s
[空天防御与经济]在获得充足的外部资源之前,太空投资需有限度
comsci
资源
这里有一个常识性的问题:
地球的资源,人类的资金是有限的,而太空是无限的.....
就算全人类联合起来,要在太空中修建大型空间站,也不一定能够成功,因为资源和资金,技术有客观的限制....
&
ORACLE临时表—ON COMMIT PRESERVE ROWS
daizj
oracle 临时表
ORACLE临时表 转
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前
会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到。临时表不存在并发行为,因为他们对于当前会话都是独立的。
创建临时表时,ORACLE只创建了表的结构(在数据字典中定义),并没有初始化内存空间,当某一会话使用临时表时,ORALCE会
基于Nginx XSendfile+SpringMVC进行文件下载
denger
应用服务器 Web nginx 网络应用 lighttpd
在平常我们实现文件下载通常是通过普通 read-write方式,如下代码所示。
@RequestMapping("/courseware/{id}")
public void download(@PathVariable("id") String courseID, HttpServletResp
scanf接受char类型的字符
dcj3sjt126com
c
/*
2013年3月11日22:35:54
目的:学习char只接受一个字符
*/
# include <stdio.h>
int main(void)
{
int i;
char ch;
scanf("%d", &i);
printf("i = %d\n", i);
scanf("%
学编程的价值
dcj3sjt126com
编程
发一个人会编程, 想想以后可以教儿女, 是多么美好的事啊, 不管儿女将来从事什么样的职业, 教一教, 对他思维的开拓大有帮助
像这位朋友学习:
http://blog.sina.com.cn/s/articlelist_2584320772_0_1.html
VirtualGS教程 (By @林泰前): 几十年的老程序员,资深的
二维数组(矩阵)对角线输出
飞天奔月
二维数组
今天在BBS里面看到这样的面试题目,
1,二维数组(N*N),沿对角线方向,从右上角打印到左下角如N=4: 4*4二维数组
{ 1 2 3 4 }
{ 5 6 7 8 }
{ 9 10 11 12 }
{13 14 15 16 }
打印顺序
4
3 8
2 7 12
1 6 11 16
5 10 15
9 14
13
要
Ehcache(08)——可阻塞的Cache——BlockingCache
234390216
并发 ehcache BlockingCache 阻塞
可阻塞的Cache—BlockingCache
在上一节我们提到了显示使用Ehcache锁的问题,其实我们还可以隐式的来使用Ehcache的锁,那就是通过BlockingCache。BlockingCache是Ehcache的一个封装类,可以让我们对Ehcache进行并发操作。其内部的锁机制是使用的net.
mysqldiff对数据库间进行差异比较
jackyrong
mysqld
mysqldiff该工具是官方mysql-utilities工具集的一个脚本,可以用来对比不同数据库之间的表结构,或者同个数据库间的表结构
如果在windows下,直接下载mysql-utilities安装就可以了,然后运行后,会跑到命令行下:
1) 基本用法
mysqldiff --server1=admin:12345
spring data jpa 方法中可用的关键字
lawrence.li
java spring
spring data jpa 支持以方法名进行查询/删除/统计。
查询的关键字为find
删除的关键字为delete/remove (>=1.7.x)
统计的关键字为count (>=1.7.x)
修改需要使用@Modifying注解
@Modifying
@Query("update User u set u.firstna
Spring的ModelAndView类
nicegege
spring
项目中controller的方法跳转的到ModelAndView类,一直很好奇spring怎么实现的?
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* yo
搭建 CentOS 6 服务器(13) - rsync、Amanda
rensanning
centos
(一)rsync
Server端
# yum install rsync
# vi /etc/xinetd.d/rsync
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait
Learn Nodejs 02
toknowme
nodejs
(1)npm是什么
npm is the package manager for node
官方网站:https://www.npmjs.com/
npm上有很多优秀的nodejs包,来解决常见的一些问题,比如用node-mysql,就可以方便通过nodejs链接到mysql,进行数据库的操作
在开发过程往往会需要用到其他的包,使用npm就可以下载这些包来供程序调用
&nb
Spring MVC 拦截器
xp9802
spring mvc
Controller层的拦截器继承于HandlerInterceptorAdapter
HandlerInterceptorAdapter.java 1 public abstract class HandlerInterceptorAdapter implements HandlerIntercep