Forwarded from Sukka's Notebook
https://t.me/yscschan/6402
既照顾性能,又照顾 DNT 的一个 dirtyhack 是:
既照顾性能,又照顾 DNT 的一个 dirtyhack 是:
<script src="https://www.google-analytics.com/analytics.js" type="text/n-javascript" id="ga-js-tag"></script>
<script>
let dnt_ga = () => {
if (navigator.doNotTrack === '1') {} else {
document.getElementByID('ga-js-tag').setAttribute('type', 'text/javascript')
}
}
window.onload = () => {
dnt_ga()
}
</script>Telegram
YSC 的频道
https://liyin.date/2018/04/19/googleanalytic-dnt/
关于 Google Analytics (下称 GA) 的 Do Not Track (下称 DNT) 设置。GA 有提供两种加载模式 (见此),一种是通过脚本创建一个 script 元素;令一种是直接在 HTML 代码中写一个 script 元素。
对于前面那种模式,不需要像开头文章那样多引入一个 dnt_min.js,可以直接在代码外面加一层 if 判断 navigator.doNotTrack ===…
关于 Google Analytics (下称 GA) 的 Do Not Track (下称 DNT) 设置。GA 有提供两种加载模式 (见此),一种是通过脚本创建一个 script 元素;令一种是直接在 HTML 代码中写一个 script 元素。
对于前面那种模式,不需要像开头文章那样多引入一个 dnt_min.js,可以直接在代码外面加一层 if 判断 navigator.doNotTrack ===…
duangsuse::Echo
https://github.com/Sodium-Aluminate/repeat-tutorial/network/members #javascript #frontend #fp let map = (iter, opt) => { let result = new Array(); for (let i of iter) result.push(opt(i)); return result; } HTMLCollection.prototype.map = function…
写了这么久 DOM 交互代码后我终于发现我错了... 我自以为嵌套最深的是
因为它的子 DOM 节点数最多,换句话说就是它的「自动生成节点缩进」最大,自然是嵌套最深的叶子...
一页(Firefox 的自动换行)障目,不识泰山(最深的 fork 树子叶) 🌝
Xeonacid/repeat-tutorial 可其实是 rikakomoe/repeat-tutorial... 🙈因为它的子 DOM 节点数最多,换句话说就是它的「自动生成节点缩进」最大,自然是嵌套最深的叶子...
一页(Firefox 的自动换行)障目,不识泰山(最深的 fork 树子叶) 🌝
duangsuse::Echo
#web #dev #javascript #google #performance 🌚🌝 emmmm.... 如果是那种动态设置 DOM 属性的那种的话不就是说文档树上的内存依然分配但是等到用的时候再提交 JavaScript 引擎了吗... async 加载的话不好之处在于虽然不会影响网页渲染,如果脚本比较大,可能会耗费一些资源和时钟导致速度稍稍变慢 对于性能问题,最好还是先看完《CLR via C#》这样分析起来方便一些(我当然还是没有看完...)
因为性能问题最好还是看跑分的,它涉及到的影响因素太多了,比如底层一点 JavaScript 解释器、POSIX 线程、Gecko、硬件解释器都可能在进行某些操作时有各种各样的不定时的开销
所以自己手动推测只能得到很不确定的「大致」结果(除非真的是算法上很大的变化),『<del>说难听点叫那只是你一厢情愿的推断(删除)</del>』
建议多使用各种跑分工具,sysprof、评测代码测试你那个速度,而且,现在的 Fx、Chrome 开发者工具很先进跑分、评比资源占用都方便多了,在讨论性能优化的时候不要忘了 prof 结果是纲
所以自己手动推测只能得到很不确定的「大致」结果(除非真的是算法上很大的变化),『<del>说难听点叫那只是你一厢情愿的推断(删除)</del>』
建议多使用各种跑分工具,sysprof、评测代码测试你那个速度,而且,现在的 Fx、Chrome 开发者工具很先进跑分、评比资源占用都方便多了,在讨论性能优化的时候不要忘了 prof 结果是纲
duangsuse::Echo
https://github.com/Sodium-Aluminate/repeat-tutorial/network/members #javascript #frontend #fp let map = (iter, opt) => { let result = new Array(); for (let i of iter) result.push(opt(i)); return result; } HTMLCollection.prototype.map = function…
简化一下主代码,一行(相对于函式库代码来说)
然后我才发现其实可以不用创建 N 个
```
也可以(大嘘)
我真是<del>聪明</del>反被聪明误(划掉)...
Object.prototype.run = function (opt) { opt(this) };
const GITHUB_REPO_REGEX = /^https:\/\/github.com\/([A-Za-z0-9_-]+)\/([A-Za-z0-9_-]+).*/;
$('#network').children
.map(x => x.children.length)
.zipWith($('#network').children)
.sort((a, b) => a.first() < b.first())
.first()
.second().children
.filter(x => x.tagName == 'A').second().href
.match(GITHUB_REPO_REGEX)
.run(n => alert(`${n[1]}/${n[2]}`));
真好看(迫真)然后我才发现其实可以不用创建 N 个
zipWith 列表的...```
$('#network').children
.sort((a, b) => a.children.length > b.children.length)```
.first()
也可以(大嘘)
我真是<del>聪明</del>反被聪明误(划掉)...
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
😅 Sticker
突然很好奇 why 本频道进来了这么多人,打算做个小调查,因为 Telegram 也不会告诉你 subscriptor 们是咋想到要进来的...
虽说之前 80 个人我也没想什么...
虽说之前 80 个人我也没想什么...
duangsuse::Echo
简化一下主代码,一行(相对于函式库代码来说) Object.prototype.run = function (opt) { opt(this) }; const GITHUB_REPO_REGEX = /^https:\/\/github.com\/([A-Za-z0-9_-]+)\/([A-Za-z0-9_-]+).*/; $('#network').children .map(x => x.children.length) .zipWith($('#network').children)…
#recommended #javascript 一个惨痛的排序性能教训(XD
说到排序自然而然又想到 @drakeet 那事了... 其实他不是不会排序... 不至少还写过 Sorter 类么
只不过有序列表处理时可以不用一起
...头晕(口头禅了...)
好吧... 天才也要学习啊,没有人是生而知之也没有人可以学十几年以后就不再提升自己了...
反正我不关心这些... 他主动屏蔽我我也不会再尝试了解他 可惜啊,不过纯纯写作现在发展得还不错还在维护
说到排序自然而然又想到 @drakeet 那事了... 其实他不是不会排序... 不至少还写过 Sorter 类么
只不过有序列表处理时可以不用一起
sort 而也可以将几个列表 merge (不过对列表来说应该叫 concat)到一起的......头晕(口头禅了...)
好吧... 天才也要学习啊,没有人是生而知之也没有人可以学十几年以后就不再提升自己了...
反正我不关心这些... 他主动屏蔽我我也不会再尝试了解他 可惜啊,不过纯纯写作现在发展得还不错还在维护
duangsuse::Echo
#recommended #javascript 一个惨痛的排序性能教训(XD 说到排序自然而然又想到 @drakeet 那事了... 其实他不是不会排序... 不至少还写过 Sorter 类么 只不过有序列表处理时可以不用一起 sort 而也可以将几个列表 merge (不过对列表来说应该叫 concat)到一起的... ...头晕(口头禅了...) 好吧... 天才也要学习啊,没有人是生而知之也没有人可以学十几年以后就不再提升自己了... 反正我不关心这些... 他主动屏蔽我我也不会再尝试了解他…
*注: Sorter 是 Go 语言的一个 pattern(貌似)
它要实现
单纯的面向对象里想传递逻辑(代码块)只能附着在对象上传递,
而函数式里根本不存在这种必须写这种代码的问题(Groovy,我这里没 JShell):
好像不能解析... 算了 :V
它要实现
Cmp、Len、Less,不过最用的就是 Cmp(a, b): Bool 了。单纯的面向对象里想传递逻辑(代码块)只能附着在对象上传递,
Comparer(比较器)就是一个例子而函数式里根本不存在这种必须写这种代码的问题(Groovy,我这里没 JShell):
List<Integer> ls = [2, 1, 5, 8, 4, 9]
List<Integer> ls_asc = Arrays.sort(ls, new Comparator<Integer>() {
public int compare(Integer a, Integer b) { return b - a; }
});
好像不能解析... 算了 :V
duangsuse::Echo
#recommended #javascript 一个惨痛的排序性能教训(XD 说到排序自然而然又想到 @drakeet 那事了... 其实他不是不会排序... 不至少还写过 Sorter 类么 只不过有序列表处理时可以不用一起 sort 而也可以将几个列表 merge (不过对列表来说应该叫 concat)到一起的... ...头晕(口头禅了...) 好吧... 天才也要学习啊,没有人是生而知之也没有人可以学十几年以后就不再提升自己了... 反正我不关心这些... 他主动屏蔽我我也不会再尝试了解他…
https://duckduckgo.com/?q=contcat+function&t=ffab&ia=web
刚才写错了,LWL 裙中有纠正,感谢反馈。concat 是 CONCATENATE 的缩写
刚才写错了,LWL 裙中有纠正,感谢反馈。concat 是 CONCATENATE 的缩写
This media is not supported in your browser
VIEW IN TELEGRAM
btw. 鲁迅的数据可以在 https://luxun.pro/luxun.json 下载,据说它是有版本控制的,可实际上
_r URL 查询参数啥用都没有...btw. 鲁迅追番现在有 Windows 和 Android 客户端,Android 客户端可在酷安下载
duangsuse::Echo
#bug #app #web #javaScript #dev 鲁迅追番/// 官方网页版的季度转换只考虑了 1、4、7、10 月这几种情况,不是就 undefined...\
btw. 鲁迅追番开发者的应用基本都是 MD2 / 3D 高光 iOS 风格
which 现在有些界面设计师是这种设计的铁杆粉丝
MD2 hhhhhh 😶 那个不堪入眼的 FloatingActonButton...
which 现在有些界面设计师是这种设计的铁杆粉丝
MD2 hhhhhh 😶 那个不堪入眼的 FloatingActonButton...
如果有人买了(当然是不可能的,因为没有编译原理的 dalao 关注我?233333)《深入分析 GCC》这本书,会发现作者写了很多 AWK/sed/GNU bc/Bash 代码辅助分析(其实还用了 Graphviz)...
看到 188 面有一些代码可以生成这种树结构,抄下来看看: #c #linux #share #book #pl
(我修改了一些标识符语义上的错误,格式化了代码,增强了代码语义的易读性)
看到 188 面有一些代码可以生成这种树结构,抄下来看看: #c #linux #share #book #pl
(我修改了一些标识符语义上的错误,格式化了代码,增强了代码语义的易读性)
#include "gt-passes.h"
char *pass_type_names[] = {"GIMPLE_PASS", "RTL_PASS", "SIMPLE_IPA_PASS", "IPA_PASS"};
void dump_opt_pass(FILE *fp, struct opt_pass *pass, int indent) {
int i; struct opt_pass *p = pass;
while (p != NULL) {
for (i = 0; i < indent; i++) {
if (i % 4 == 0) fprintf(fp, "|");
else if (i == indent - 1) fprintf(fp, ">");
else if (i == indent - 2) fprintf(fp, "-");
else if (i == indent - 3) fprintf(fp, "-");
else fprintf(fp, " ");
}
fprintf(fp, " %-16s [%s]\n", p->name, pass_type_names[p->type]);
if (p->sub != NULL) dump_opt_pass(fp, p->sub, indent + 4);
p = p->next;
}
}