-
?
如何学习简单的Web开发效率技巧
卫天蓉
展开
发展不一定是你已经知道的,而是你学习接下来你需要知道的事情的基本能力。
什么是开发人员?它是关于记忆语法吗?是否能够重构低效的代码?是为自己制作方便的小捷径吗?从强大的开发商在这里氩星球的智慧中学习,更好的装备,我提供了一些工具,能够回答这些问题,我是来学习它是所有这些东西......和他们没有。
当您使用最初未构建的现有Web应用程序时,每个项目都有自己的怪癖和细微差别。有许多工具,语言,框架,库等等,你无法掌握它们,更不用说它们总是在变化。发展不一定是你已经知道的,而是你学习接下来你需要知道的事情的基本能力。
也许最重要的学习方法之一就是提高效率。当我开始在Planet Argon实习时,我仍在滚动应用程序,寻找每个文件夹中所需的东西。我发现自己正在搜索,好像我还在使用小型教程大小的应用程序。但是,具有大后端的真实应用程序是另一回事。
为了节省一点时间而担心微小的命令似乎是一件微不足道的事情,但它确实加起来了。
以下是一些简单的命令和提示,可以提高您的效率:
命令'P' 将直接搜索包含您正在查找的单词的任何文件,例如模型或控制器。例如,搜索“user”以查找User.rb.命令移位'F' 将全局搜索应用程序以查找您要查找的任何特定单词。如果您要查找的内容不在文件名中,但您不确定它的位置,那么这是您的最佳选择。编辑器通常还有一个区域来指定特定路径,因此您只能在某个目录中进行搜索。命令“F” 将在您当前正在查看的任何文件中进行本地搜索。当文件很大但你需要找到类似于唯一id的位置时,这很好。
所以现在你可以在编辑器中节省一些时间在应用程序中弹跳,但终端怎么样?
不要像我曾经那样是一个菜鸟,并输入完整的文件名。开始键入文件名,然后按Tab键进行自动完成。例如:如果您知道当前目录中只有一个以“p”开头的文件,则键入“p”并按Tab键,它将完成文件名。如果有多个并按Tab键,它将显示存在以“p”开头的文件。
如何从某种查询中查找终端中的某些特定返回数据?假设您正在寻找与“home_page”相关的特定路线,因此您可以运行“rake路线”但是您只需要滚动一系列路线,直到看到“home_page”。
而不是让自己度过这种痛苦而不是尝试贪图!运行 rake routes | grep home_page 此命令将确保您的终端仅返回包含“home_page”的路由。
但如果这对你来说效率不高呢?为什么不节约能源,挽救疲惫的小手指?您目前必须键入 rake routes | grep home_page 每次要搜索该路线的时间。好吧,幸运的是,你可以创建一个别名!别名是一个短名称,可直接引用特定语法。
创建一个相对简单。你需要在别处保存你的别名,通常是.bashrc,.bash_profile,或者,如果你使用的是Oh My Zsh(强烈推荐),它存储在你的.zshrc中。首先输入 vim .bashrc 以在基于终端的编辑器中打开文件。按'i'可以在文件中写入。您可以根据需要为别名命名,在这种情况下,我将其命名为“grepr”,因此我将记住这意味着“grep路由。”输入 alias grepr=“rake routes | grep”。按esc退出插入模式,然后键入“:wq”以保存到文件并退出编辑器。当你关闭时,重新打开你的终端并导航回你的应用程序目录,你将能够输入 grepr home_page ,它的行为将完全相同 rake routes | grep home_page。
如果您能够更快地找到所需内容,那么您将有更多时间来调查您要解决的任何奇怪问题。如果您对开发不熟悉,希望其中一些技巧可以帮助您完成自己的旅程。继续学习,保持冷静!
-
?
web前端开发之HTML 基础教程
紫南
展开
教程简介:
HTML (英文全称:HyperText Markup Language):即超文本标记语言,标准通用标记语言下的一个应用。那么,HTML 和 Web 前端开发有什么关系呢?HTML 是通向 WEB 技术世界大门的钥匙。在本 HTML 教程中,您将学习如何使用 HTML 来创建站点, HTML 非常容易学习,只要多看本教程,相信你会喜欢它的!
什么是“超文本标记语言”呢?“超文本”就是指页面内包括文本及超过文本以外的其它元素,可以包含图片、链接,甚至音乐、程序等非文字元素。在WWW上的一个超媒体文档称之为一个页面,Web页面也就是通常所说的网页,在这里不作区分。
HTML结构:
HTML 的结构一般包括
标签和 标签, 和 这2个标记符分别表示网页的头部和正文。头部中可包含页面的标题、关键词、描述说明等内容,它本身不作为内容来显示,但影响网页显示的效果。 当中是网页实际显示的内容,正文标记符又被称为实体标记。页面当中通常包含有很多指向其他相关页面或其他节点的指针,通过点击,可以很方便地获取新的网页,这是 HTML 获得广泛推广运用最重要的原因之一,而由这些相互之间存在关联的页面组成的有机集合便是网站。究竟 HTML 为什么会被普及?这就要归功于互联网的高速发展,对于编程语言的需求直线上升。而 HTML5 具有超集方式的简易性、运用广泛的可拓展性、灵活应变的平台适应性以及简单的通用性。凭借着这些特性,HTML 越来越受到人们的喜爱。以下是最简单的html文档结构:
本文为 HTML 基础教程第一章,下一章:HTML 教程导读【小提示】tips:本文由数据微学院作者原创,转载请注明来源或联系作者。更多优秀参考好文请关注【数据微学院】个人图书馆。
相关搜索
- 前端招聘
- html教程
- web开发招聘
- web开发教程
- web开发入门
- 开发招聘
-
?
很久没有发DeepWeb的教程了
左三德
展开
如何5个简单的步骤安装Tor for Chrome
如果您想使用Chrome浏览器,但仍保持匿名状态,只需几个步骤即可安装Tor for Chrome。就是这样。
尽管Google Chrome本身不支持Tor,但您可以通过Chrome浏览器安装该程序来增强您的在线匿名性。
什么是TOR
有几个虚拟专用网络(VP恩)应用程序可帮助您在网上匿名浏览。然而,Tor是一款流行且可靠的软件,最初称为洋葱路由器。
这是一个理想的工具,因为它是免费的,匿名性的
也就是说,与Tor结合使用VP恩是实现完整安全性的最佳途径。
匿名
Tor技术上非常强大,几乎无法追踪。
您可以使用Tor浏览器在黑网上查看网站,并且还可以使用它匿名发送消息。
值得注意的是,有些人使用Tor进行非法活动,但还有其他几个原因可能会导致您想要选择匿名浏览策略。
如果您的隐私很重要,您可以轻松地在您的Chrome浏览器上安装Tor。
使用Tor,您可以通过选择来自世界各地的远程代理匿名浏览互联网。
当你访问特定的网站时,你的连接将会从世界各地的Tor中继站跳出,你的IP地址将被公开访问。
总之,它不能追溯到你的实际位置。
TOR FOR CHROME
Tor有一个适用于Firefox的附加组件。不过,您也可以为Chrome添加扩展程序。这是一个简单的方法,可以很容易地执行。
因此,请查看这些添加按钮的步骤,以便您可以在Chrome浏览器上访问Tor。
第1步 - 下载TOR浏览器
百度搜索 TOR 即可使用与您的设备相关的链接。有Windows版本,Linux版本和Mac版本的单独下载链接。从这些链接下载浏览器。下载完文件后,执行它以解除Tor浏览器并将其放置在计算机上的文件夹中。打开此文件夹,然后点击“启动浏览器”。
第2步 - 代理切换
接下来,您必须安装Proxy Switchy程序(https://chrome.google/webstore/detail/proxy-switchy/caehdcpeofiiigpdhbabniblemipncjj)。这必须安装在Chrome浏览器中。这是一款Chrome扩展程序,可让您切换代理服务器
打开谷歌浏览器并点击“Chrome菜单”(你可以在右上角找到它)。前往设置。”移到“网络”旁边,然后点击“更改代理设置”图标/按钮。点击LAN设置区域。检查允许您使用LAN的代理服务器的选项。在“地址”部分中,输入VP恩 服务器地址。您可以从列表中选择。对于“端口”,输入80,然后按“确定”。为了获得完整的隐私,请不要检查绕过代理服务器的本地地址。每当您尝试访问网站时,都会有一个提示询问您的用户名和密码。输入VP恩 详细信息并登录。
这完成了Chrome配置。
第3步 - 更改名称
当您打开您下载的Tor浏览器时,您可以找到控制面板。在那里,您可以更改Proxy Switchy配置文件的名称,并将其称为Tor。
转到手动配置选项。为HTTP代理和端口输入代码127.0.0.1,输入数字8118。选中“在所有协议中使用相同的代理服务器”框。
第4步 - 保存并继续
完成所有这些自定义和更改后,单击窗口底部的“保存”按钮。
转到Proxy Switchy的不同选项。移至“常规”选项卡。检查“快速切换”。同时检查“二进制开关”框。
第5步 - 选择名称
如果您使用配置文件1,请选择“直接连接”选项。这是从下拉框中选择的。如果您使用Profile 2选择,请选择在步骤3中输入的名称。使用下拉框执行此操作。点击“保存”以保留这些选择。
TOR - KRONYMOUS的替代方法
第1步:安装Chrome的Kronymous扩展。(https://chrome.google/webstore/detail/kronymous-access-internet/dfdhngcahhplaibahkkjhdklhihbaikl)
第2步:当您的Chrome浏览器中安装了Kronymous扩展程序时,您可以看到列表中的所有应用程序。点击Kronymous应用程序,并在出现弹出窗口时点击“确定”按钮。
步骤3:点击“Start Tor Proxy”选项。服务在几分钟内开始。
步骤4:检查显示Tor已经启动的完整消息。
第5步:您现在可以在Chrome浏览器上运行Tor网络,并且可以开始匿名浏览。
其他步骤
除了上述步骤之外,您还需要进行一些更改,以便Tor有效地为您创建匿名。这里有一些提示:
强烈建议使用Tor浏览器。不要使用Torrent应用程序共享文件。不要使用任何浏览器插件,如Flash或QuickTime。浏览网站时使用HTTPS版本。在线时,请勿打开任何使用Tor浏览器下载的文档。
完成此操作后,您将创建一个开关,使您可以使用Chrome浏览器访问Tor。这是从Chrome浏览器访问Tor最简单的方法之一。
尽管Chrome操作系统支持许多VPN连接,但使用基本接口不能使用本地方法连接到Tor网络。
在线匿名越来越流行,越来越多的人开始对Tor感兴趣,既有技术精湛的用户也有普通用户。
Google Chrome浏览器和相应的设备也越来越受欢迎,因此Chrome用户在他们的操作系统上使用Tor时感兴趣。
-
?
Web开发入门教程:Pycharm轻松创建Flask项目
郁迎松
展开
打开Pycharm的file,选择创建新的项目,然后弹出对话框,我们可以看到里面有很多的案例,Flask、Django等等,我们选择生成Flask的demo程序
选择创建之后一个简易的Flask项目就出现在我们眼前,第一个是入口程序,还有一个static的静态目录,templates是模板存放的位置
我们可以手动来启动这个Flask项目,但是这不是很理智的,在Pycharm上面有个run,我们可以选择run来启动Flask的服务,默认打开的是5000端口
打开浏览器输入http://localhost:5000,查看网站运行状况,页面输出了我们返回的hello world
更新我们的路由,添加一个test的路由,然后再加一个test/name的路由,这里的name是可变的,我们可以随便输入,然后通过render_template传入到test.html模板文件中
templates/test.html是模板文件,变量用两个大括号括起来,render_template函数会将变量渲染模板然后输出
重启项目,打开浏览器输入http://localhost:5000/test/,查看网站运行状况,页面输出了your name is: None,说明我们的name是一个None,接下来我们变换一下name,输入http://localhost:5000/test/lisi,页面内容变化了,输出your name is: lisi
-
?
Web Worker 使用教程(转载自阮一峰博客)
聂雨真
展开
一、概述
JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。
Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。
Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。
Web Worker 有以下几个使用注意点。
(1)同源限制
分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。
(2)DOM 限制
Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用
document
、
window
、
parent
这些对象。但是,Worker 线程可以
navigator
对象和
location
对象。
(3)通信联系
Worker 线程和主线程不在同一个上下文环境,它们不能直接通信,必须通过消息完成。
(4)脚本限制
Worker 线程不能执行
alert()
方法和
confirm()
方法,但可以使用 XMLHttpRequest 对象发出 AJAX 请求。
(5)文件限制
Worker 线程无法读取本地文件,即不能打开本机的文件系统(
file://
),它所加载的脚本,必须来自网络。
二、基本用法
2.1 主线程
主线程采用
new
命令,调用
Worker()
构造函数,新建一个 Worker 线程。
var worker =newWorker('work.js');
Worker()
构造函数的参数是一个脚本文件,该文件就是 Worker 线程所要执行的任务。由于 Worker 不能读取本地文件,所以这个脚本必须来自网络。如果下载没有成功(比如404错误),Worker 就会默默地失败。
然后,主线程调用
worker.postMessage()
方法,向 Worker 发消息。
worker.postMessage('Hello World');worker.postMessage({method:'echo', args:['Work']});
worker.postMessage()
方法的参数,就是主线程传给 Worker 的数据。它可以是各种数据类型,包括二进制数据。
接着,主线程通过
worker.onmessage
指定监听函数,接收子线程发回来的消息。
worker.onmessage =function(event){ console.log('Received message '+ event.data);doSomething();}functiondoSomething(){ // 执行任务 worker.postMessage('Work done!');}
上面代码中,事件对象的
data
属性可以获取 Worker 发来的数据。
Worker 完成任务以后,主线程就可以把它关掉。
worker.terminate();
2.2 Worker 线程
Worker 线程内部需要有一个监听函数,监听
message
事件。
self.addEventListener('message',function(e){ self.postMessage('You said: '+ e.data);},false);
上面代码中,
self
代表子线程自身,即子线程的全局对象。因此,等同于下面两种写法。
// 写法一this.addEventListener('message',function(e){ this.postMessage('You said: '+ e.data);},false);// 写法二addEventListener('message',function(e){postMessage('You said: '+ e.data);},false);
除了使用
self.addEventListener()
指定监听函数,也可以使用
self.onmessage
指定。监听函数的参数是一个事件对象,它的
data
属性包含主线程发来的数据。
self.postMessage()
方法用来向主线程发送消息。
根据主线程发来的数据,Worker 线程可以调用不同的方法,下面是一个例子。
self.addEventListener('message',function(e){var data = e.data; switch (data.cmd){ case 'start': self.postMessage('WORKER STARTED: '+ data.msg);break; case 'stop': self.postMessage('WORKER STOPPED: '+ data.msg); self.close(); // Terminates the worker.break; default: self.postMessage('Unknown command: '+ data.msg);};},false);
上面代码中,
self.close()
用于在 Worker 内部关闭自身。
2.3 Worker 加载脚本
Worker 内部如果要加载其他脚本,有一个专门的方法
importScripts()
。
importScripts('script1.js');
该方法可以同时加载多个脚本。
importScripts('script1.js','script2.js');
2.4 错误处理
主线程可以监听 Worker 是否发生错误。如果发生错误,Worker 会触发主线程的
error
事件。
worker.onerror(function(event){ console.log(['ERROR: Line ', e.lineno,' in ', e.filename,': ', e.message ].join(''));});// 或者worker.addEventListener('error',function(event){ // ...});
Worker 内部也可以监听
error
事件。
2.5 关闭 Worker
使用完毕,为了节省系统资源,必须关闭 Worker。
// 主线程worker.terminate();// Worker 线程self.close();
三、数据通信
前面说过,主线程与 Worker 之间的通信内容,可以是文本,也可以是对象。需要注意的是,这种通信是拷贝关系,即是传值而不是传址,Worker 对通信内容的修改,不会影响到主线程。事实上,浏览器内部的运行机制是,先将通信内容串行化,然后把串行化后的字符串发给 Worker,后者再将它还原。
主线程与 Worker 之间也可以交换二进制数据,比如 File、Blob、ArrayBuffer 等类型,也可以在线程之间发送。下面是一个例子。
// 主线程var uInt8Array =newUint8Array(newArrayBuffer(10));for(var i =0; i < uInt8Array.length;++i){ uInt8Array[i]= i *2; // [0, 2, 4, 6, 8,...]}worker.postMessage(uInt8Array);// Worker 线程self.onmessage =function(e){var uInt8Array = e.data;postMessage('Inside worker.js: uInt8Array.toString() = '+ uInt8Array.toString());postMessage('Inside worker.js: uInt8Array.byteLength = '+ uInt8Array.byteLength);};
但是,拷贝方式发送二进制数据,会造成性能问题。比如,主线程向 Worker 发送一个 500MB 文件,默认情况下浏览器会生成一个原文件的拷贝。为了解决这个问题,JavaScript 允许主线程把二进制数据直接转移给子线程,但是一旦转移,主线程就无法再使用这些二进制数据了,这是为了防止出现多个线程同时修改数据的麻烦局面。这种转移数据的方法,叫做Transferable Objects。这使得主线程可以快速把数据交给 Worker,对于影像处理、声音处理、3D 运算等就非常方便了,不会产生性能负担。
如果要直接转移数据的控制权,就要使用下面的写法。
// Transferable Objects 格式worker.postMessage(arrayBuffer,[arrayBuffer]);// 例子var ab =newArrayBuffer(1);worker.postMessage(ab,[ab]);
四、同页面的 Web Worker
通常情况下,Worker 载入的是一个单独的 JavaScript 脚本文件,但是也可以载入与主线程在同一个网页的代码。
addEventListener('message',function(){postMessage('some message');},false); 上面是一段嵌入网页的脚本,注意必须指定
标签的
type
属性是一个浏览器不认识的值,上例是
app/worker
。
然后,读取这一段嵌入页面的脚本,用 Worker 来处理。
var blob =newBlob([document.querySelector('#worker').textContent]);var url = window.URL.createObjectURL(blob);var worker =newWorker(url);worker.onmessage =function(e){ // e.data === 'some message'};
上面代码中,先将嵌入网页的脚本代码,转成一个二进制对象,然后为这个二进制对象生成 URL,再让 Worker 加载这个 URL。这样就做到了,主线程和 Worker 的代码都在同一个网页上面。
五、实例:Worker 线程完成轮询
有时,浏览器需要轮询服务器状态,以便第一时间得知状态改变。这个工作可以放在 Worker 里面。
functioncreateWorker(f){var blob =newBlob([f.toString()]);var url = window.URL.createObjectURL(blob);var worker =newWorker(url);return worker;}var pollingWorker =createWorker(function(e){var cache;functioncompare(new, old){...};setInterval(function(){fetch('/my-api-endpoint').then(function(res){var data = res.json();if(!compare(data, cache)){ cache = data; self.postMessage(data);}})},1000)});pollingWorker.onmessage =function(){ // render data}pollingWorker.postMessage('init');
上面代码中,Worker 每秒钟轮询一次数据,然后跟缓存做比较。如果不一致,就说明服务端有了新的变化,因此就要通知主线程。
六、实例: Worker 新建 Worker
Worker 线程内部还能再新建 Worker 线程(目前只有 Firefox 浏览器支持)。下面的例子是将一个计算密集的任务,分配到10个 Worker。
主线程代码如下。
var worker =newWorker('worker.js');worker.onmessage =function(event){ document.getElementById('result').textContent = event.data;};
Worker 线程代码如下。
// worker.js// settingsvar num_workers =10;var items_per_worker =1000000;// start the workersvar result =0;var pending_workers = num_workers;for(var i =0; i < num_workers; i +=1){var worker =newWorker('core.js'); worker.postMessage(i * items_per_worker); worker.postMessage((i +1)* items_per_worker); worker.onmessage = storeResult;}// handle the resultsfunctionstoreResult(event){ result += event.data; pending_workers -=1;if(pending_workers <=0)postMessage(result); // finished!}
上面代码中,Worker 线程内部新建了10个 Worker 线程,并且依次向这10个 Worker 发送消息,告知了计算的起点和终点。计算任务脚本的代码如下。
// core.jsvar start;onmessage = getStart;functiongetStart(event){ start = event.data; onmessage = getEnd;}var end;functiongetEnd(event){ end = event.data; onmessage =null;work();}functionwork(){var result =0;for(var i = start; i < end; i +=1){ // perform some complex calculation here result +=1;}postMessage(result);close();}
七、API
7.1 主线程
浏览器原生提供
Worker()
构造函数,用来供主线程生成 Worker 线程。
var myWorker =newWorker(jsUrl, options);
Worker()
构造函数,可以接受两个参数。第一个参数是脚本的网址(必须遵守同源政策),该参数是必需的,且只能加载 JS 脚本,否则会报错。第二个参数是配置对象,该对象可选。它的一个作用就是指定 Worker 的名称,用来区分多个 Worker 线程。
// 主线程var myWorker =newWorker('worker.js',{ name :'myWorker'});// Worker 线程self.name // myWorker
Worker()
构造函数返回一个 Worker 线程对象,用来供主线程操作 Worker。Worker 线程对象的属性和方法如下。
Worker.onerror:指定 error 事件的监听函数。Worker.onmessage:指定 message 事件的监听函数,发送过来的数据在Event.data属性中。Worker.onmessageerror:指定 messageerror 事件的监听函数。发送的数据无法序列化成字符串时,会触发这个事件。Worker.postMessage():向 Worker 线程发送消息。Worker.terminate():立即终止 Worker 线程。
7.2 Worker 线程
Web Worker 有自己的全局对象,不是主线程的
window
,而是一个专门为 Worker 定制的全局对象。因此定义在
window
上面的对象和方法不是全部都可以使用。
Worker 线程有一些自己的全局属性和方法。
self.name: Worker 的名字。该属性只读,由构造函数指定。self.onmessage:指定message事件的监听函数。self.onmessageerror:指定 messageerror 事件的监听函数。发送的数据无法序列化成字符串时,会触发这个事件。self.close():关闭 Worker 线程。self.postMessage():向产生这个 Worker 线程发送消息。self.importScripts():加载 JS 脚本。
(完)
-
?
WEB前端开发入门攻略
钱擎
展开
首先要从基本的HTML语言开始学起。网页的所有内容都是建立在HTML的基础之上,要想学好HTML,不要去使用任何集成工具,而是使用文本编辑器,直接从最简单的HTML可以写起。首先上网下载notepad++文本编辑器,一个好的文本编辑工具能达到事半功倍的效果。
w3shcool 网站提供各种前端开发教程,其教程很适合初学者学习。所以打开 w3school 根据教程的每一步,一边学习一边编写html,来学习基本的html语言语法
学习了基本的html之后,没有JavaScript,网页永远都只是一张静态的纸。下一步要结合JavaScript来深入前端开发。原生的JavaScript是非常难用的,对初学者门坎比较高,但是如果从Jquery学习开始的话,你会发现js是那样的灵活和美妙,这会让你彻底喜欢上前端开发。再次利用w3shcool的jquery教程来学习jquery
下面是小编整理的一整套web前端学习教程进扣qun:730227513免费领取
学习jquery的时候,你会发现jquery可以做动画,可以修改页面的显示效果,这样你就自然需要了解css,w3school在此又要有用了,这时可以根据 w3school 教程学习基本的css语法,你会发现它的选择器与jquery十分相似,其实这也是jquery强大的原因。学习了css,你就会发现自己终于可以做出漂亮的页面,而不是那些古板的条条框框了。
学习了以下这些前端开发的基础之后,可以再来下载nginx服务器,安装使用都非常简单,这样就可以了解一个网站在服务器上是如何运转,如何通过一个http的地址来访问你的网页,如何将自己的网页共享给别人。这样你的入门就毕业了,就可以向高级迈入!这时候可以选择学习原生JavaScript,来知道jquery的原理,再学习html5,使用一些开源css框架!
-
?
web前端开发教程
祝绮晴
展开
学习完本阶段的课程,你将获得:1. 行业背景、职业前景的认知2. 对Web大前端工程师的认知3. 认识自己学习Web大前端的优势4. 掌握Web大前端学习方法5. 了解Web大前端职业规划
Web大前端工程师的职业背景、行业前景、Web大前端工程师在团队项目中的定位及所与具备的技能,并从各个职业的角度,设身处地得帮大家分析从事Web大前端开发的优势和劣势,同时为了帮助大家快速地掌握Web大前端的学习技能,本阶段的课程给大家介绍了Web大前端的学习方法和路径,以及将来的职业规划。
详情联系我们https://huaianmh/product/web给予支持
-
?
使用C#的后端Web API:循序渐进教程
滕匕
展开
如何在VS中创建基于.NET的后端应用程序,该应用程序使用C#语言从Web API中提取。让我们开始吧!
为服务器后端逻辑选择语言的问题是几乎每个开发人员最重要的问题之一,特别是对于初学者。目前已经有很多不同的语言:Java,.NET(C#,VD),Ruby,Python,Perl,JavaScript(Node.js),Go,C ++。
除了这些语言的语法特征外,还有许多其他问题/问题,例如扩展的可能性,不同类型数据库的使用,高学习曲线,容错要求,大量数据等等。上。
哪种语言最受欢迎?你应该使用哪一个?也许有人会推荐PHP,它具有丰富的功能和较低的学习曲线。然而,事实仍然是现在最常用的语言是Java和.NET。
本教程介绍如何使用C#(ASP.NET)构建自己的Web服务器(Web API)。重要的是要注意,要托管您的服务器,您将需要基于Windows的托管。
先决条件
我想我们可以开始了。首先,当我们使用C#时,您需要使用Microsoft Visual Studio(您可以在Microsoft官方网站上获取它)。
此外,您还需要启用IIS(Internet信息服务)。在Windows中启用它很容易:
在Windows 10中打开“控制面板”,单击“程序”,然后找到“程序和功能”部分,并单击“打开或关闭Windows功能”。在这里,找到Internet信息服务。单击其前面的+图标以展开其下的所有可用选项。您可以找到FTP服务器,Web管理工具和万维网服务。现在启用Web管理工具。单击“确定”,将添加所选功能(或多个功能)并将其应用于Windows。
第1步:创建一个新项目
打开Microsoft Visual Studio并创建一个新项目(文件 - >新建 - >项目)。选择“已安装”模板,选择“Visual C#”,然后选择“Web”。在可用模板列表中,选择“ASP.NET Web应用程序(.NET Framework)”。给你的项目命名(对于我的演示,我把“webapi”),然后单击OK。
在下一个模态对话框中,您可以选择任何合适的模板。让我们选择Web API,这样它就会为项目准备所有基本的初始文件。单击确定。
完成。现在,您可以在解决方案资源管理器中浏览生成的文件夹和文件 有应用程序配置,帮助页面数据,一些控制器,字体,CSS和JS文件。
路由表
默认情况下,服务器使用位于App_Start / WebApiConfig.cs中的路由表。
注意routeTemplate: "api/{controller}/{id}",它解释了API路由。
现在,让我们做一个基本的例子。在本教程中,我们将为用户准备一个API,这是每个系统的一个非常通用的实体/对象。
添加用户模型
该模型代表用户,因此我们将包括各种字段,如ID,姓名,电子邮件,电话和角色。
在Solution Explorer中,右键单击Models文件夹,选择Add,然后选择Class。然后提供一个类名:User。模型类已准备就绪。
现在我们只添加我们决定添加的所有字段:
public class User{public int id { get; set; }public string name { get; set; }public string email { get; set; }public string phone { get; set; }public int role { get; set; }}
添加用户控制器
在Web API中,控制器是处理所有HTTP请求的对象。在解决方案资源管理器中,右键单击“控制器”。选择Add,然后选择Controller。
在给定的对话框中,选择具有读/写操作的Web API 2 Controller。将控制器命名为UsersController。它将为控制器准备所有适当的CRUD操作。
在本文中,我使用虚拟用户列表准备了一个基本示例:
public class UsersController : ApiController{private User[] users = new User[]{new User { id = 1, name = "Haleemah Redfern", email = "email1@mail", phone = "01111111", role = 1},new User { id = 2, name = "Aya Bostock", email = "email2@mail", phone = "01111111", role = 1},new User { id = 3, name = "Sohail Perez", email = "email3@mail", phone = "01111111", role = 1},new User { id = 4, name = "Merryn Peck", email = "email4@mail", phone = "01111111", role = 2},new User { id = 5, name = "Cairon Reynolds", email = "email5@mail", phone = "01111111", role = 3}};// GET: api/Users[ResponseType(typeof(IEnumerable
))]public IEnumerable Get(){return users;}// GET: api/Users/5public IHttpActionResult Get(int id){var product = users.FirstOrDefault((p) => p.id == id);if (product == null){return NotFound();}return Ok(product);}... 第2步:部署
现在,您可以构建解决方案(在Visual Studio中按Ctrl + Shift + B)。一旦构建成功,您就可以运行它。单击F5,它将在您的浏览器中自动在您的本地主机的可用端口(例如http:// localhost:61024 /)中打开。最有可能的是,您不希望它始终在Visual Studio中运行,因此最好将其保留为服务。
在这种情况下,我们可以使用IIS(Internet信息服务)将其部署到本地专用服务器。这很简单。
首先,打开IIS,在“站点”下面的左侧 - 添加新网站(从右侧面板或右键单击“站点”)。请输入以下详细信息:站点名称,“webapi.localhost”; 物理路径,“C:\ projects \ webapi”(解决方案所在的位置); 绑定 - http或https; 主机名是相同的,即“webapi.localhost”。单击确定。
IIS应该在webapi.localhost上运行Web API服务。
现在,如果您尝试在浏览器中打开webapi.localhost,它将无法打开我们创建的结果。这是因为浏览器尝试将此地址(webapi.localhost)解析为全局域。为了将此域名映射到本地服务器,我们需要修改本地主机文件。在Windows(v10)上,hosts文件存在于C:\ Windows \ system32 \ drivers \ etc文件夹中。该文件没有自己的扩展名,它是“主机”文件。
将其复制到另一个位置并在编辑器中打开它
您需要将以下内容添加到此文件的末尾:
#Web API主机127 .0.0.1 webapi.localhost
现在,您需要将修改后的文件放回C:\ Windows \ system32 \ drivers \ etc文件夹中。由于此文件夹默认受Windows保护,因此您将收到拒绝访问警告消息。因此,您需要复制“以管理员身份”文件。
文件更新后,webapi.localhost应从您的localhost(C:\ projects \ webapi)加载。
测试API
是时候测试我们为Web服务器创建的API方法了: api/users and api/users/{id}。 在浏览器中打开http://webapi.localhost/api/users。你应该得到以下输出:
在我们创建可从IDE外部访问的外部API时,我们需要从另一个页面测试我们的API。最简单的方法是通过开发工具栏(存在于任何现代浏览器中)。通常在按F12时会激活它。转到“控制台”标签。下面我准备了两个小例子,你可以用来测试API
如果jQuery可用,您可以使用:
$.ajax({type: "GET",url: 'http://webapi.localhost/api/users',success: (data) => {console.log(data);}});
否则,使用本机JavaScript,您可以使用以下代码:
var xhr = new XMLHttpRequest();xhr.open('GET', 'https://webapi.localhost/api/users');xhr.onload = function() {console.log(xhr.response);};xhr.send();
您很可能会收到以下错误:
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
原因是常规网页可以使用该 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到相同原始策略的限制。扩展不是那么有限。扩展可以与其来源之外的远程服务器通信,只要它首先请求跨源权限即可。
跨源资源共享(CORS)是一种机制,它使用其他HTTP标头告诉浏览器让在一个源(域)上运行的Web应用程序有权从不同来源的服务器访问所选资源。
调整跨源资源共享(CORS)
为了解决这个问题,我们需要在我们的解决方案中启用CORS。在Visual Studio中,打开包管理控制台(可在屏幕底部,错误列表和输出之间)。
运行以下命令:
Install-Package Microsoft.AspNet.WebApi.Cors
这将安装WebApi.Cors参考。然后打开“App_Start \ WebApiConfig.cs”文件。加config.EnableCors();之前config.MapHttpAttributeRoutes();
然后返回我们的UsersController.cs并[EnableCors(origins: "*", headers: "*", methods: "*")]在类定义之前添加。
最后 - 再次重建项目。然后尝试再次测试API; 现在它应该工作。
我希望你喜欢我们的文章,你发现它很有用。
-
?
Javascript-Webpack入门教程
慕南珍
展开
转自Kindem的博客
什么是Webpack
Webpack是一个模块打包器,它的主要目标是将JavaScript文件打包在一起,打包后的文件用于在浏览器中使用。 ----Webpack中文文档
说白了,它最大的用处就是分析一个网页的各种依赖,并且自动化地将这些依赖打包在一起并且压缩,供网页使用。当然它的功能不止如此,比如依赖loader,它还可以将JavaScript ES6(很多老浏览器不一定支持)转换成支持更加多浏览器的老版本JavaScript。
Webpack示意图
总之,它在前端的模块化开发中占有重要的作用,如果想让自己的项目变得更加整洁,开发更加有效率,Webpack有必要一学。
在开始之前
在介绍Webpack之前,很有必要先介绍一下Node.js和npm,如果你已经对着两者有着深刻的了解,可以直接跳过,看下一节,如果你之前从未听说过Node.js,可以仔细看看这一节对这两者的介绍,Webpack的使用一定程度上依赖着这两者。
Node.js是一个基于Chrome V8引擎驱动的JavaScript运行时。Node.js使用高效、轻量级的事件驱动、非阻塞I/O模型。它的包生态系统,npm,是目前世界上最大的开源库生态系统。 ----Node.js官网
看了是不是感觉Node.js官网的介绍,感觉这玩意十分高深莫测,说实话我第一次看到的时候也没有太看懂。接下来用人话给大家翻译一下,众所周知,JavaScript是Web开发中不可或缺的语言,它可以为网页添加许多动态效果,也能为网页添加更多可能性,如果连JavaScript都不知道,请先学习一下Web开发御三家(html, css, js),但是JavaScript的硬伤是只能在浏览器上运行,脱离浏览器,就无法运行。而Node.js就解决了这么一个问题,它将Chrome V8的JavaScript引擎提取出来,使得JavaScript能够脱离浏览器而运行,这样就为JavaScript提供了无限的可能性。至于它的更多,现在先不用了解那么深,对于Node.js,你现在只需要了解到这里就行了。
而npm,则是Node.js自带的包管理系统,npm的作用跟python的pip很像,你只需要敲一行命令,就能获取到世界上任何一个角落的人发布在其上的源码并且使用。显然,JavaScript开发模块化,npm也在其中做出了很大贡献。
接下来,先安装Node.js吧,打开Node.js的官网Node.js
Node.js官网
简单粗暴的页面,你可以选择稳定版LTS和最新版Current下载,自行安装即可。当安装完成后,你可以在命令行输入
node -v如果正确显示了Node.js的版本号,就说明你的Node.js成功安装了,当然,npm是Node.js的一部分,Node.js安装成功的同时,npm也就可以使用了。
开始学习Webpack
如果你还没有安装Node.js,请移步上一节并认真安装好Node.js,如果你已经安装了Node.js,就可以开始学习Webpack了。
首先,先建立一个文件夹,用来作为学习Webpack的项目文件夹,文件夹名随意,接着在项目使用命令行中初始化npm
npm init运行该命令会询问你你这一个项目的基本信息,比如项目名、作者、描述、Git仓库等等,这是因为init指令实际上是将项目文件夹变成一个npm包,你甚至在日后可以将这个npm包发布给他人使用,当然,我们现在只是学习,一路回车就行,如果你实在比较较真,也没关系,这些东西日后可以在配置文件中修改。如果你不想敲回车,也可以直接使用
npm init -y当npm初始化完成之后,项目下会自动生成一个package.json文件,上面详细说明了你这一个npm包中的信息,我们暂时可以不用关注这些内容。接下来在项目中安装Webpack。
npm install --save-dev webpacknpm install --save-dev webpack-cli这两行命令会为你的项目安装webpack和webpack-cli包,前者是webpack的核心库,后者是分离出来的webpack命令行功能,我们需要使用webpack-cli来进行项目的打包等操作。
不使用Webpack时,项目的问题
我们先看一下不使用webpack进行构建时,项目的缺陷。
先在项目文件夹中创建几个目录和文件,项目结构如下图所示,前面带加号的是需要你自己创建的文件和目录:
webpack-learning |- package.json+ |- index.html+ |- /src+ |- index.jssrc/index.js
function component() { var element = document.createElement('p'); // Lodash(目前通过一个 script 脚本引入)对于执行这一行是必需的 element.innerHTML = _.join(['Hello', 'webpack'], ' '); return element;}document.body.appendChild(component());index.html
Getting Started 这里的Lodash是一个JavaScript库,这里引用的意味就是给大家展示一下我们平时使用第三方JavaScript库的做法,这样的做法会产生很多问题,因为通过index.html的联系,很明显,index.js对第三方库lodash产生了隐形依赖,之所以说是隐形依赖,是因为在lodash被引用之前,index.js中的双下划线变量(lodash提供的一个变量)还是未知的,只有在lodash被引用之后,这个变量才能发挥作用,显而易见,这样做的很危险的,这样会产生很多问题:无法立即体现,脚本的执行依赖于外部扩展库(external library)。如果依赖不存在,或者引入顺序错误,应用程序将无法正常运行。如果依赖被引入但是并没有使用,浏览器将被迫下载无用代码。Webpack的价值就这样体现出来了,当你的项目中引用的JavaScript文件,html页面越来越多,就会出现一些不可避免的依赖问题,而我们通过Webpack可以解决这一问题,对于一个html页面,我们可以该页面依赖的所有JavaScript文件打包在一起,构成一个JavaScript文件,这样,html页面只需要引用这一个JavaScript文件即可,上面说的问题,就可以完全被避免。当然自己打包也是可以的,不过通过Webpack这一神器,就没那么麻烦了,你只要告诉它,你需要把哪些文件打包,输出到哪里,它就可以自动分析所有JavaScript的依赖关系,然后帮你打包成一个文件。
接下来,我们就来打包一次试试。
使用Webpack打包
在打包之前,我们还需要做一点小小的调整----将开发环境和生产环境分开:
webpack-learning |- package.json+ |- /dist+ |- index.html- |- index.html |- /src |- index.js这样一来,src文件夹里面,放的就是我们开发的环境,所有的代码编写都在这里进行,而相对稳定的html文件就直接放入dist文件夹中,作为生产环境的文件,这样有一个好处,每一次更新src之后,只需要把src中的东西重新打包,然后供生产环境中的html文件使用,就行了,而html文件本身,几乎不用被更改。
因为我们用到了lodash包,所以需要在npm中安装lodash依赖:
npm install --save lodash细心的朋友可能注意到,这里使用的是--save而不是--save-dev,两者的区别是,--save是生产环境的依赖,也就是供给用户使用的依赖,而--save-dev是开发环境的依赖,比如Webpack,在代码完成并且打包之后,就不需要再使用到它了,显然用户是无需接触到Webpack的,所以这里Webpack属于开发环境的依赖。
添加lodash依赖之后,我们就可以在js文件中导入并且使用了:
src/index.js
+ import _ from 'lodash';+ function component() { var element = document.createElement('p');- // Lodash, currently included via a script, is required for this line to work+ // Lodash, now imported by this script element.innerHTML = _.join(['Hello', 'webpack'], ' '); return element; } document.body.appendChild(component());因为接下来我们要使用Webpack打包所有的js,这样的话,我们就不需要再自己在html引入JavaScript库了,而只需要引入打包之后的文件就行了,我们先约定以后打包的文件名叫做bundle.js,那么接下来,修改html文件:
dist/index.html
Getting Started - - + 这样的话,我们就可以开始打包了。在命令行输入
webpack-cli src/index.js --output dist/bundle.js如果不行的话,尝试
// linuxnode_modules/.bin/webpack-cli src/index.js --output dist/bundle.js// windowsnode_modules.binwebpack-cli src/index.js --output dist/bundle.js这一行的意思是执行Webpack命令行程序,将src/index.js作为入口文件,自动分析index.js的依赖,并且将所有依赖和index.js本身一起打包成一个文件,输出到dist/bundle.js,执行这一行,可以看到Webpack打包成功的输出信息:
Hash: 61bf2519e9ef5fa0eb5eVersion: webpack 4.1.0Time: 4080msBuilt at: 2018-3-7 16:58:36 Asset Size Chunks Chunk Namesbundle.js 69.6 KiB 0 [emitted] mainEntrypoint main = bundle.js [1] (webpack)/buildin/module.js 519 bytes {0} [built] [2] (webpack)/buildin/global.js 509 bytes {0} [built] [3] ./src/index.js 231 bytes {0} [built] + 1 hidden module打包成功并且输出之后,你就可以打开html文件看看结果了:
html运行结果
可见打包之后的JavaScript能够成功运行,并且解决了之前说的几个问题,这就是Webpack的主要功能。
但是你可能会问,每次都要自己输入巴拉巴拉一大串命令,那也太麻烦了吧,Webpack显然想到了这一点,它是支持配置文件的,你只需要在项目根目录下新建一个配置文件webpack.config.js,并且按照Webpack中文文档给出的语法进行编写就行了。下面给出一个配置文件的例子:
webpack.config.js
const path = require('path');module.exports = { entry: './src/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') }};完成配置文件之后,你需要打包时,就不需要再自己输入入口和输出了,直接这样就行了
webpack-cli// 如果不行尝试// linuxnode_modules/.bin/webpack-cli// windowsnode_modules.binwebpack-cliNPM脚本
有了配置文件你可以还不满足,我既然有npm,为什么不能直接让npm帮我运行呢,答案是可以的,npm支持用户自定义脚本,用户可以在npm的配置文件中添加自己的脚本内容,然后使用下面给出的指令来运行用户的脚本
npm run 脚本名这样的话,我们不是可以自己定义一个build脚本,让它完成Webpack打包的任务呢。
package.json
{ ... "scripts": { "build": "webpack-cli" }, ...}这样一来,只要
npm run build世界我有,打包全自动!
关于Webpack的更多
Webpack的功能当然还不止这些,这里只介绍Webpack的基本功能打包,当你阅读完这篇文章,对Webpack是什么,怎么用也知道个ABCD了,如果想了解更多,可以关注我,我会给大家继续更新一下Web前端的知识,当然也可以直接上Webpack中文文档上查更多的东西,把自己的项目变得更加自动化,让开发更加有效率。
web教程教程
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
初入新手村 — 演示者视图的操作步骤 0102
-
初入新手村 — 鼠标的交互的方法 0103
-
初入新手村 — 如何快速访问工具栏 0104
-
初入新手村 — 文件选项卡、保存等基础 0105
-
第二关 :内容整理与处理 — 导航区操作技巧 0201
-
第三关 :文字工具与段落 — 如何给你的文字加特效 0301
-
文字工具与段落— 段落工具使用 0302
-
第四关:绘图与形状效果 — 基本形状的绘制方法 0401
-
绘图与形状效果 — 给你的图形加特效 0402
-
绘图与形状效果 — 快速排列多种图形 0403
-
第五关:合并形状与图标 — 用好合并形状轻松获得更多创意图形 0501
-
第六关:图片的神奇 — 教你PPT如何实现抠图 0601
-
图片的神奇 — 使用图片裁剪让图片为你所用 0602
-
第七关:表格与逻辑图表 — 教你画一个简洁大方的表格 0701
-
表格与逻辑图表 — SmartArt快速生成逻辑图表 0702
-
表格与逻辑图表 — 一招SmartArt走遍天下 0703
-
第八关:形象化市场数据 — PPT中数据图表怎么做?0801
-
形象化市场数据 — 教你做好看的条形图和柱状图 0802
-
形象化市场数据 — 饼图的美化技巧 0803
-
第十关:终成商务演示高手
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101
-
第一关 :初入新手村 — 工具选项卡操作演示 0101