对于HTML实体何时使用十进制与十六进制表示法有一个很好的经验法则吗?
例如,非破坏连字符以十进制形式写入,‑
并以十六进制形式写入‑
.
这个答案说十六进制用于Unicode; 这是否意味着如果您<meta charset="utf-8">
在文档中使用标记,则应使用hex <head>
?
偶尔,我会注意到实体字符被错误地呈现而不是它们代表的实体 - 例如,&
在电子邮件主题行或RSS标题中出现(而不是&符号).十六进制或十进制是否更好以避免这种情况?
最后一个考虑因素:使用十六进制或十进制可以影响角色的渲染清晰度(清晰度)吗?
是否有推荐的模式在React中将道具传递给后代组件?
下面,我将道具callback
传递给子组件:
Master = React.createClass({
render: function() {
return (
<div>
<ListComp items={this.props.items} callback={this.handleClick} />
</div>
);
}
});
ListComp = React.createClass({
render: function() {
this.props.items.forEach(function(item) {
items.push(<ItemView item={item} callback={this.props.callback} />);
}, this);
return (
<ul>{items}</ul>
);
}
});
Run Code Online (Sandbox Code Playgroud)
然后callback
道具传递给后代组件:
ItemComp = React.createClass({
render: function() {
return (
<li><a onClick={this.handleClick} href="#">Link</a></li>
);
},
handleClick: function(e) {
e.preventDefault();
this.props.callback();
}
});
Run Code Online (Sandbox Code Playgroud)
将支柱两次传递给这样是正确的还是我应该以某种方式引用它的继承?
我transferPropsTo
在docs中看到了一个方法,并且通过记录它看起来我可以callback
从后代通过this.props.__owner__.props
但是那些双重下划线让我认为我不应该.
我正在研究PHP安全最佳实践,特别是HTML Purifier库.
我喜欢使用第三方库来帮助加强我网站的安全性,但我对一些事情感到困惑......
首先,一个普遍的问题...... HTML Purifier的做法是什么,实践安全的PHP编程不能?
如果我正在使用HTML Purifier,这是否意味着我可以跳过常见的安全措施,例如使用PHP函数来过滤输入和转义输出?
这个问题的回复评论之一似乎表明只有允许HTML标签的元素(例如WYSIWYG编辑器)才需要HTML Purifier.它是否正确?
有没有人注意到使用HTML Purifier的性能滞后?本文使性能影响值得考虑.
只是为了确认我已经完成了我的作业才问这个......
WebKit浏览器具有内置的样式渲染优化技术,"甚至不必匹配页面上大约60%元素的样式."
但是,如果"在样式表中的任何地方遇到任何兄弟选择器......那么优化将完全关闭整个页面...这包括+
选择器和选择器,如:first-child
和:last-child
."
有谁知道禁用此优化的选择器类型的完整列表?
-
更多信息
Tali Garsiel关于浏览器内部的研究讨论了优化:浏览器如何工作.
以下是来自Dave Hyatt的兄弟选择器的完整报价,他显然是在编写浏览器代码:"必须没有使用兄弟选择器.当遇到任何兄弟选择器时,WebCore会抛出一个全局开关,并禁用整个文档的样式共享当它们存在时.这包括+选择器和选择器,如:first-child和:last-child."
这句话似乎来自于2005年凯悦写的一篇文章.下面他将更详细地讨论它(与之前相同的来源):
"WebCore(在即将推出的Safari版本中)有一个非常酷的优化,我提出来避免甚至不得不计算应用于元素的声明集.这种优化在实践中甚至不必匹配页面上大约60%元素的样式.优化背后的想法是识别页面中的两个元素何时出现通过DOM(和其他状态)检查获得相同的样式,并尽可能简单地在这两个元素之间共享前端样式信息."
Nate Koechley的这篇文章更详细地讨论了算法.他总结道:
"在网络开发中,通常有6种不同的相似方式来做同样的事情.一个优秀的网络开发人员不断选择最好的几乎无法区分的路径.这些来自凯悦的内部提示让我们更完整了解浏览器的内容,并帮助我们选择最佳方法."
Hyatt还讨论了此W3C邮件列表存档中的优化问题
在Ryan Kinal 的Stack聊天中也简要介绍了一下:"哇.哇哇.我永远不会再使用另一个兄弟选择器了."
我特别感兴趣的是:
子选择器是否也关闭优化
Trident/IE是否使用任何类似的优化
是否存在任何测试表明它对渲染性能有多大差异
如何访问Grunt配置属性site
以project.json
在config属性值指定的路径上读取文件?
grunt.registerTask('build', function(target) {
grunt.config('site', target);
grunt.task.run('foo:dist', 'bar:dist');
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
site: grunt.file.readJSON('./sites/' + grunt.config('site') + '/project.json')
});
Run Code Online (Sandbox Code Playgroud)
咕噜-CLI:
grunt build:sitename
>> Error: Unable to read "./sites/undefined/project.json"
Run Code Online (Sandbox Code Playgroud)
使用文档中的示例,我也试过这个:
grunt.registerTask('global', 'site', function(prop, value) {
global[prop] = val;
});
grunt.registerTask('build', ['foo:dist', 'bar:dist']);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
site: grunt.file.readJSON('./sites/' + global.site + '/project.json')
});
Run Code Online (Sandbox Code Playgroud)
咕噜-CLI:
grunt global:site:sitename
>> Error: Unable to read "./sites/undefined/project.json"
Run Code Online (Sandbox Code Playgroud)
更新:
使用@FelixKling答案作为指导,我取得了一些进展:
grunt.registerTask('build', function(target) {
grunt.config.set('target', target);
grunt.config.set('site', grunt.file.readJSON('./sites/' + grunt.config.get('target') + '/project.json')); …
Run Code Online (Sandbox Code Playgroud) 如何导出此覆盖功能,以便导入模块可以检查是否已调用该函数?
// util.js
export function isPageload() {
return (!!(isPageload = function() { return false; }));
}
Run Code Online (Sandbox Code Playgroud)
当我用Babel编译它时,我收到此错误:
Uncaught TypeError: (0 , _util2.default) is not a function
Run Code Online (Sandbox Code Playgroud)
这是ES5的等价物:
var isPageload = function() {
return (!!(isPageload = function() { return false; }));
}
console.log(isPageload()); // true
console.log(isPageload()); // false
Run Code Online (Sandbox Code Playgroud) 我是第一次尝试Yeoman Server,看到它提供了一个原生的手表工具作为LiveReload的后备.以下是文档解释回退的方法:
"[Yeoman Server]会自动启动该yeoman watch
过程,因此对任何应用程序文件的更改都会导致浏览器通过LiveReload进行刷新.如果您没有在本地安装LiveReload,则会使用后备重新加载过程."
到目前为止,回退过程工作正常,我喜欢它不需要在浏览器/菜单栏中安装任何东西.
有没有人和Yeoman一起试过两种手表工具?如果您"升级"到LiveReload,工作流程有何不同以及您会获得哪些附加功能?
更新:对API的快速检查显示,Yeoman的实时重新加载功能实际上是LiveReload.他们是同一个人.它没有浏览器扩展的原因是因为他们使用的是LiveReload的snipvr
代码片段.有可能通过LiveReload GUI可以访问一些其他功能,也许可以用于移动设备测试,但功能更可能是相同的.
在下面的CommonJS的/ Browserify模块,我怎样才能避免导入既foo
与bar
每一次-而不是导入仅仅是基于条件所需要的一个init()
?
var Foo = require('foo'),
Bar = require('bar'),
Component = function(config) {
this.type = config.type;
this.init();
};
Component.prototype = {
init: function() {
var instance = null;
switch (this.type) {
case ('foo'):
instance = new Foo(...);
break;
case ('bar'):
instance = new Bar(...);
break;
}
}
};
Run Code Online (Sandbox Code Playgroud) 如何完全禁用或隐藏"持久"控制台消息:Download the React DevTools for a better development experience
在开发中?
javascript ×5
gruntjs ×2
reactjs ×2
browserify ×1
commonjs ×1
css ×1
ecmascript-6 ×1
html ×1
html5 ×1
htmlpurifier ×1
internals ×1
livereload ×1
node.js ×1
performance ×1
php ×1
security ×1
wai-aria ×1
webkit ×1
yeoman ×1