我已经完成了一些基于Web的项目,但我对普通网页的加载和执行顺序没有太多考虑.但现在我需要了解细节.很难从Google或SO中找到答案,所以我创建了这个问题.
示例页面如下所示:
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script src="abc.js" type="text/javascript">
</script>
<link rel="stylesheets" type="text/css" href="abc.css"></link>
<style>h2{font-wight:bold;}</style>
<script>
$(document).ready(function(){
$("#img").attr("src", "kkk.png");
});
</script>
</head>
<body>
<img id="img" src="abc.jpg" style="width:400px;height:300px;"/>
<script src="kkk.js" type="text/javascript"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:
我有以下理解:
<script>满足a,则将阻止加载并等待加载并执行JS文件,然后继续.或者是这样的:
浏览器解析html(DOM)并获取数组或类似堆栈结构的外部资源.加载html后,浏览器开始并行加载结构中的外部资源并执行,直到加载所有资源.然后,根据JS,DOM将根据用户的行为进行更改.
任何人都可以详细解释当你得到html页面的响应时会发生什么?这在不同的浏览器中有所不同?关于这个问题的任何参考?
谢谢.
编辑:
我用Firebug在Firefox上做了一个实验.它显示如下图:

我有以下代码片段.
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function () {
alert(i);
};
document.body.appendChild(link);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码用于生成5个链接,并使用alert事件绑定每个链接以显示当前链接ID.但它不起作用.当您单击生成的链接时,他们都会说"链接5".
但是以下代码片段可以满足我们的期望.
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function (num) {
return function () {
alert(num);
};
}(i);
document.body.appendChild(link);
}
}
Run Code Online (Sandbox Code Playgroud)
以上两个片段均引自此处.正如作者的解释,似乎关闭使魔术.
但它是如何工作的以及闭包如何使其工作都超出了我的理解范围.为什么第一个不工作而第二个工作?任何人都可以详细解释这个魔法吗?
谢谢.
我已经完成了一些基于网络的项目,我遇到的大多数困难(问题,混淆)都可以在帮助下找到.但是我仍然有一个重要的问题,即使在询问了一些有经验的开发人员之后:当使用服务器端代码和客户端脚本(JavaScript)实现功能时,应该首选哪一个?
一个简单的例子:
要渲染一个动态HTML页面,我能格式化服务器端代码(PHP,Python)的页面,并(在客户端更多的逻辑在服务器端,以下)使用Ajax来获取格式化的页面直接呈现它.
我还可以使用Ajax来获取数据(未格式化,JSON),并使用客户端脚本来格式化页面,并与更多的处理使得它(服务器从一个数据库或其他来源的数据,并将其返回给客户端使用JSON或XML.客户端更多逻辑,服务器更少逻辑.
那么我怎样才能决定哪一个更好?哪一个提供更好的性能?为什么?哪一个更方便用户?
随着浏览器的JS引擎的发展,JS可以在更短的时间内解释,所以我更喜欢客户端脚本吗?
另一方面,随着硬件的发展,服务器性能不断提高,服务器端逻辑的成本也会降低,所以我更喜欢服务器端脚本?
编辑:
有了答案,我想简要总结一下.
客户端逻辑的优点:
服务器端逻辑的优点:
在面对特定情况时,我们似乎需要平衡这两种方法.但是怎么样?什么是最佳做法?
除以下条件外,我将使用客户端逻辑:
到目前为止,我已经使用PHP,Python和Java开发了一些基于Web的应用程序.但是一些基本但非常重要的问题仍然是我所不知道的,所以我发这篇文章是为了得到你们的帮助和澄清.
假设我使用一些编程语言作为我的后端语言(PHP/Python/.Net/Java等),并使用Web服务器(apache/lighttpd/nginx/IIS等)部署我的应用程序.并且假设在时间T,我的一个页面得到来自不同用户的100个同时请求.所以我的问题是:
编辑:最近我读了一些关于CGI和fastcgi的文章,这让我知道fastcgi的方法应该是hanlde请求的典型方法.
该协议在多个独立的FastCGI请求之间复用单个传输连接.这支持能够使用事件驱动或多线程编程技术处理并发请求的应用程序.
引自fastcgi规范,其中提到了可以处理多个请求的连接,并且可以在多线程技术中实现.我想知道这个连接可以被视为进程,它可以为每个请求生成多个线程.如果这是真的,我对如何处理每个线程中的共享资源变得更加困惑?
PS感谢托马斯关于将帖子分成几个帖子的建议,但我认为问题是相关的,最好将它们组合在一起.
感谢S.Lott给出了很好的答案,但每个问题的一些答案都过于简短或根本没有涉及.
感谢大家的回答,这让我更接近事实.
我们有一台服务器,我们正在运行一个Django支持的站点.由于我们想测试网站,我们正在使用Django的内置开发服务器(即runserver).但是我对以下命令的ip感到好奇:
python manage.py runserver 0.0.0.0:80
Run Code Online (Sandbox Code Playgroud)
它导致我们可以使用服务器的远程IP访问的运行站点.
但是当使用时127.0.0.1:
python manage.py runserver 127.0.0.1:80
Run Code Online (Sandbox Code Playgroud)
没有人可以从另一台PC上使用服务器的ip访问该站点.
所以为什么?0.0.0.0究竟意味着什么(Google称这是默认路线)?为什么无法127.0.0.1:80远程访问?
我很长时间都在考虑这个问题.这是一个很大的问题,因为它几乎涵盖了与网络开发相关的所有角落.
根据我的理解,这个过程应该是这样的:
以上是我的理解,但我不知道它是否正确?多少精确?我错过了什么?
如果它是正确的(或几乎正确),我希望:
我希望这个主题可以帮助所有Web开发人员更好地了解我们每天的工作.
我会根据答案更新这个问题.
谢谢.
我曾经开发过几个基于python框架Django的项目.它大大提高了我的产量.但是当项目发布并且访问者越来越多时,数据库成为性能的瓶颈.
我试着解决这个问题,并发现它是ORM(django)使它变得如此缓慢.为什么?因为Django必须为程序员提供统一的接口,无论你使用什么db后端.所以它肯定会牺牲一些db的性能(将一个原始sql设置为几个sql并且永远不会使用特定于db的操作).
我想知道ORM绝对有用,它可以:
但如果我没有迁移的要求,ORM的含义对我来说是什么意思?
PS.最近我的朋友告诉我,他现在正在做的只是将ORM代码重写为原始sql以获得更好的性能.太遗憾了!
那么除了我上面提到的,ORM的真正含义是什么?(如果我犯了错误,请纠正我.谢谢.)
我们总是有一些静态数据可以作为数组存储在文件中,也可以存储在基于Web的项目的数据库表中.那么哪一个应该是首选?
在我看来,数组有一些优点:
但我的同事认为他更喜欢DB方法,因为它可以保持统一的数据持久性接口,并且更加灵活.
那应该是首选的?或者我们如何选择?或者我们应该在某些场景中选择一个而在其他场景中更喜欢?什么是场景?
编辑:
让我澄清一下.正如本杰明对标题所做的更改一样,我们想要存储在数组(文件)中的数据不会经常更改,这意味着代码不会更改运行时数组的值.如果数据变化非常频繁我无疑会使用DB.这就是我发这样一个帖子的原因.
有时很难存储一些非常复杂的关系,例如:
Task = {
"1" : {
"name" : "xx",
"requirement" : {
"level" : 5,
"money" : 100,
}
...
}
Run Code Online (Sandbox Code Playgroud)
就像上面的代码示例(一个python dict或者你可以把它想象成一个数组)一样,需求字段很难存储在DB中(直接在DB中存储像pickle对象这样的结构?我觉得不太好).所以在这种情况下,我会更喜欢数组.
那么你的想法是什么?在这种情况下,我们应该更喜欢数组到DB,对吗?
问候.
我正计划部署一个django供电网站.但我对Web服务器的选择感到困惑,其中包括apache,lighttpd,nginx等.
我已经阅读了一些关于每种选择的性能的文章.但似乎没有人同意.所以我想知道为什么不自己测试性能?
我找不到有关性能测试Web服务器的最佳方法的信息.所以我的问题是:
测试结束后,我想弄明白:
我一直认为文档对于项目和团队来说非常重要,应该定期和详细地编写.它可以使事情并行,而不必总是向熟练的程序员询问.但我确实发现许多开发人员(甚至是领导者)都没有过多地关注文档,只是把它们视为理所当然,这让我心疼.
那么我对文件的态度是对的吗?文件真的很重要吗?我应该如何说服团队领导更多地关注文件?
如果文件很重要,第二个问题就出现了.谁应该写文件?IMO,它们应该由熟练的程序员编写,比如框架创建者(如果我们使用自己的框架),项目的重要部分(如数据库模式,整个体系结构等)等等.
好处是显而易见的,比如帮助新人,帮助维持等等.
因此,从我的观点来看,熟练的程序员(这里的定义可能不同)应该更多地关注文档编写而不是基础结构完成后的代码编写.
我对这一点是对的吗?
感谢您分享这些问题.
假设我有两个不同的模块,它们具有统一(相同)的接口.文件列表如下:
root/
logic.py
sns_api/
__init__.py
facebook/
pyfacebook.py
__init__.py
myspace/
pymyspace.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
并且pyfacebook.py和pymyspace.py具有相同的接口,这意味着:
# in pyfacebook.py
class Facebook:
def __init__(self, a, b):
# do the init
def method1(self, a, b, ...):
# do the logic
# in pymyspace.py
class Myspace:
def __init__(self, a, b):
# do the init
def method1(self, a, b, ...):
# do the logic
Run Code Online (Sandbox Code Playgroud)
现在我有一个问题.我想在logic.py中执行逻辑而不复制代码,所以我想知道如何设置一个标志来显示我使用的模块,python将自动加载正确的代码,这意味着:
# in logic.py
PLATFORM = "facebook"
# import the right modules in, complete the logic with the current platform
# create the right …Run Code Online (Sandbox Code Playgroud) 如果我们有一些应该存储在DB中的代码(数据结构),有人总是建议我们存储序列化数据而不是原始代码字符串.
所以我不太清楚为什么我们应该更喜欢序列化数据.
给一个简单的实例(在python中):
我们有一个字段可以存储python的字典,就像
{ "name" : "BMW", "category":"car", "cost" : "200000"}
Run Code Online (Sandbox Code Playgroud)
所以我们可以使用pickle(python模块)对其进行序列化,然后将pickle数据存储到db字段.
或者我们可以直接将dict字符串存储到DB而无需序列化.
由于我们需要将字符串转换为python数据,因此通过分别使用pickle.loads和exec,两种方法都很容易实现.
那应该是首选的?为什么?是因为exec比pickle慢得多吗?还是其他一些原因?
谢谢.