-
Notifications
You must be signed in to change notification settings - Fork 0
/
zhihu.sql
777 lines (765 loc) · 368 KB
/
zhihu.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50717
Source Host : localhost:3306
Source Database : zhihu
Target Server Type : MYSQL
Target Server Version : 50717
File Encoding : 65001
Date: 2018-12-18 22:27:01
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `answer_table`
-- ----------------------------
DROP TABLE IF EXISTS `answer_table`;
CREATE TABLE `answer_table` (
`ID` int(10) NOT NULL,
`question_ID` int(11) DEFAULT NULL,
`author_ID` varchar(64) DEFAULT NULL,
`content` text,
`create_time` int(11) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of answer_table
-- ----------------------------
INSERT INTO `answer_table` VALUES ('1', '6', '1', '会是趋势,所以作为程序员,也是需要更新自己的知识点、和新技术,我们不是要与人工智能对着干,而是要与人工智能更好地合作、协作,才会提高工作效率。', '1519963415');
INSERT INTO `answer_table` VALUES ('2', '6', '5d7179f2117787c4a257b05a76ed0bd0', '会是趋势,所以作为程序员,也是需要更新自己的知识点、和新技术,我们不是要与人工智能对着干,而是要与人工智能更好地合作、协作,才会提高工作效率。', '1519963415');
INSERT INTO `answer_table` VALUES ('3', '6', '2', '我觉得dba会失业的,具体可以看cmu self driving 那篇paper, 前端本身大部分都是伪程序员,他们不失业天理难容。', '1520002685');
INSERT INTO `answer_table` VALUES ('4', '6', '3', '能做和能工业化的做,这还有一个漫长的过程。这个过程漫长到可能不是你我有生之年能见到也不稀奇。你知道50年前就“能做”单人飞行的喷气背包吗。。但直到今年还没能量产。。。我猜当时要是有知乎,应该也会有这么个帖子:如何看待人们已经能用喷气背包飞行…', '1520011591');
INSERT INTO `answer_table` VALUES ('5', '6', '4', '藐视一切的看待', '1520093790');
INSERT INTO `answer_table` VALUES ('6', '6', '5', '能写和能写好还是很大区别的作为一个程序员,提升自己硬功夫才是关键......', '1520515010');
INSERT INTO `answer_table` VALUES ('7', '12', '7', '我们和题主一样好奇 2018 年需要满足哪些需求才能称为一个合格的前端。我们去翻了翻过完年就进行招聘的公司 JD 以及收到面邀较多的前端工程师候选人的简历。先说整体情况:整体上看,进入 2018 年至今在 100offer 平台(平台主要聚焦于工作 2 年及以上的资深互联网人,他们经过平台筛选后方可成为候选人展示。因此在本平台上进行招聘的企业通常寻找的也会是对应的资深人才)上进行前端岗位招聘的JD在开出的面邀薪资上都十分诱人:大多面邀薪资(月薪)下限在 15-20k,上限在 30-50k。开出高薪的同时,招聘公司也对前端工程师提出了更多的要求。作为一名有理想的前端工程师应该如何顺应这类要求?接下来的回答会从以下两个方面帮你解惑,也是作为现有实操类回答的一种补充:市场喜欢这些前端工程师前端工程师顺应市场发展的3个必备品质市场喜欢这些前端工程师1. 基础扎实,对主流技术栈十分了解对于2018年的前端工程师而言,熟悉 HTML、CSS、JS 只是最基础,在此之上,一些企业明确提到,希望招对 react、vue、weex、webpack、nodejs 等至少精通一门的候选人,且重视项目应用经验。一面是企业对技术更严苛和细化的要求,一面是前端领域尤其迅猛的技术新陈代谢速度。对于此,要有危机意识的,绝不仅仅是初出茅庐的培训班学生或应届生。即便是工作多年的程序员,如果一直积累的是相对老旧的技术栈,而没有争取新的项目机会,或利用业余时间跟上主流,在跳槽时也很容易被市场淘汰。2. 技术发展兼顾前后端在前几年,具备非前端脚本语言(Java,PHP)的开发经验,对于中级工程师只是加分项,「至少熟悉一门后端语言」对于高级工程师,才是必须项。然而,到了今年,企业开始更注重前端工程师的技术广度。一个优秀的前端,要做到的不仅仅是「T 字型」,而应该努力成为精通前后端至少两门语言的「K 字型」人才。无论在前后端分离、移动开发的范畴内,还是国内互联网公司的团队架构上,「大前端」的概念正在被广泛接受,比如网易、阿里、陆金所、新浪移动、美团点评和饿了么,都有大前端部门。身处其中,前端工程师需要承担终端开发、工程化等看似「不那么前端」的工作。3. 职业素养更加综合前端早已不再是配合型、边缘化的工种,而是技术团队中最需要跨岗位沟通的人,要经常和交互设计、产品、后端、测试、甚至运维打交道,因此,企业在面试中,对沟通能力的要求也比以前更高。职业素养是个仁者见仁智者见智的问题,不同团队和 leader 之间没有绝对的统一标准。但是对于求职者责任心、问题解决意识、发展潜力的考察一直是招聘方考察的核心。拥有丰富前端团队组建经验的方晓认为,「前端一定要有『攻城狮』意识,在打仗攻城的时候,前端是冲在最前面的人。因为无论是产品还是后端,任何不好的流程、bug,最终都会暴露在前端,好的工程师要能够快速判断问题出现的原因,和后端一起背锅。」4.资历背景优秀由于供给饱和,公司对候选人的资历背景也更挑剔,中型以上公司尤其如此。非名校、名企出身的求职者,比以前更容易与机会失之交臂。然而,经历过资本寒潮后,能容纳他们的小公司数量也在减少。前端工程师顺应市场发展的3个必备品质从 14、15 年「满世界都缺前端」的狂热,16 年的高端人才稀缺、初级人员泛滥,再到 17 年的中高端供给增加。到 2018 年,前端市场中高端人才的供求关系也将基本达到平衡,对人才素质的要求会更上一层楼。那么,程序员们该如何准备,应对前端的「新常态」呢?1、回归扎实的基本功底层的原理和基本功,决定了一位前端工程师是否有全局观,能否走得长远。因此越来越多的企业会着重考察候选人对原理的理解。在 2017 年底找工作的林立,对此深有体会。虽然面试官都挺认可他以往的开发经验,但当面试官问及原理,考察他解决问题的思路时,他却回答得不尽人意。「我在工作中只关注实际操作和项目,对基础和原理很生疏,忘得都差不多了」,林立总结出了几次面试的失败原因。他开始抓住每次请教面试官的机会,对于不懂的问题,回来查资料、补原理知识。功夫不负有心人,最终,他收获了一份与自己技术方向很匹配的 offer,在新年来临之前顺利入职了一家北京 O2O 企业。陆金所的方晓也提到,现在前端工程师浮躁成风,基础不扎实。「很多程序员,对JS高级一点的技术原理,甚至 HTML、CSS 的高级原理都不大懂。」前端技术虽然发展快,但发展快的其实只是框架;最根本的浏览器底层 TCP/IP 协议、HTTP 协议、IO 协议,以及经典的算法和原理,才是一个工程师,无论是前后端,都需要了解的。2、与时俱进地吸收新技术形态在打下扎实基本功的前提下,才是对新技术的持续关注,重点要和实际工作有效结合,勤奋积累,积极尝试。当初从重点大学肄业的 Jason,本科读的是经济法学,是典型的「非科班出身」,却没有上过一天培训班。他在大学就受好奇心驱使自学 Web,在工作中逐步成长为精通前端、架构,有服务端经验,可独立带技术团队的水平。进入工作的第 7 年,他通过 100offer 入职一家知名互联网金融企业,担任资深前端开发。当被问及「非科班」出身如何自学时,Jason 笑着提到了一个细节:在工作的头几年,他几乎每天都只睡两小时。培养技术嗅觉没有捷径可走,唯有多学,多写。在具体技术栈的选择上,他的做法是先找到一个自己感兴趣的方向,利用业余时间钻研,并把所学的新技术应用到创业团队的实际工作中,快速试错和验证。「我做不到预知未来,但至少要顺势而为。很多前端知识只有自己上手实践才会有积累。」优秀前端的核心竞争力其实就是「折腾」,新东西实在太多,不可能面面俱到地学习,关键在于为你所用。任何框架和技术都是为业务所用,需要什么技术就去钻研。前端工程师应该时时把「你的技术给业务带来了什么?」作为思考的核心问题。3、放大格局,「前端」不是职业路径自我设限的理由「因为我是做前端的,做 CTO 会被说不懂业务,公司不给我机会,所以我做不了 CTO」。陷入这样误区的程序员们不在少数。职业规划,最终的本质在于你想做什么。而不是以「前端」的职能给自己设限。即便在前端团队,不同的团队架构、业务类型,做的事情边界也大相径庭。只要你想,完全可以尝试去做创新的项目。比如试着接触后端的工作,在实际工作中发掘自己的潜力。机器学习,大数据分析,物联网,小程序……风潮一波接着一波,预计 2018 年,还在原地踏步的普通前端,会更加无法满足优秀企业和团队的需要。面向自己心仪的未来出发之前,先理智地规划一下自己的行动之路吧。下周,我们将推出「2018 年四大热门技术岗位跳槽指南」电子书。助你在金三银四的跳槽季中斩获心仪的offer。提前锁定我们的知乎机构号,有机会免费领取:)', '1519466423');
INSERT INTO `answer_table` VALUES ('8', '12', '8', '1。用Parceljs替代webpack并因此在绩效评分中碾压了其他前端配置工程师2。用typescript替代ES6并趁机吹捧一下自己大学里学会.NET有多牛逼3。用webp替代jpg省下公司流量并匿名盗用省下的流量建立<a href=\"https://link.zhihu.com/?target=http%3A//fuli.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">fuli.com</span><span class=\"invisible\"></span></a>邀请码30块钱一个4。用click大数据日志说…', '1513238953');
INSERT INTO `answer_table` VALUES ('9', '12', '9', '要回答这个问题,首先我们需要明确什么是前端?通俗一点说,对于网站而言,前端即网站呈现的部分,涵盖了网站的表现层和结构层。由此也可以看出,前端技术是包含了设计与开发两部分内容的,设计侧重于视觉展现部分,而开发则侧重于网站前台的代码实现,包括…', '1516087489');
INSERT INTO `answer_table` VALUES ('10', '12', '10', '我觉得好像跟2017年没啥特别大的变化吧 难道应该有吗?', '1516108677');
INSERT INTO `answer_table` VALUES ('11', '12', '11', '先把17年的坑填完吧,唉不挖了。。', '1517385815');
INSERT INTO `answer_table` VALUES ('12', '12', '8d72857e1c45a006e5b46f1e166c400d', '我们和题主一样好奇 2018 年需要满足哪些需求才能称为一个合格的前端。我们去翻了翻过完年就进行招聘的公司 JD 以及收到面邀较多的前端工程师候选人的简历。先说整体情况:整体上看,进入 2018 年至今在 100offer 平台(<i>平台主要聚焦于工作 2 年及以上的资…</i>', '1519466423');
INSERT INTO `answer_table` VALUES ('13', '17', '13', '从业人员毫不留情来答一波,如果蛋哥我被乱棍打死,请记得给我申冤啊。拿我的五十米的大刀来,开始挥舞。1.招转。投简历-面试-小黑屋开始打压-说你不合格-给你一个难得的培训的机会-机不可失失不再来,要学习抓紧啦;2.先就业后付款。纯粹就是贷款模式,没啥好隐瞒的,哪有不要钱就让先学习完的,公司又不是开慈善机构的;3.补贴。羊毛出在羊身上,补贴越多,实际你付的利息就越高,因为本金上去了;4.高薪就业。就是捉住了很多学生的贪心,实际上刚培训出来的学生在新一线或者二线四千多的起薪是正常,一线普遍六千,月薪过万不是每个人都可以的,迎娶白富美需要你厚积薄发;5.各种理由交定金。放心,这就跟电商搞活动是一样的,随时都是跳楼大甩卖,就是冲着一些人喜欢蝇头小利去的,建议大家全部了解实情了,想好了再交钱,不然想往回要可不容易了;6.试听。刻意安排一两小时的试听,名义上感受学习氛围,真正的试听是正式上课,而且最少要感受一周,这才能真正了解一家机构的真实实力,不然就是做的面子工程;7.推荐就业。合同上模棱两可,推荐而非保证,会有一堆的条条框框限制你,最后没找到工作是因为你没按照他们的要求学习导致水平不够,哇擦,早点不告诉我。8.入学就贷款。生怕你跑了,无时无刻不想着早点让你把学费提前付了,那样哪怕你后面觉得不满意也没法后悔了,钱在谁手里谁是大爷;9.虚假广告宣传。名师、史上最强、起薪20000+……好吧,我信了。你信不?10.企业定制。“某某企业定制班”、“某某企业准员工培养计划”、“毕业就进某某企业工作”,这些企业感觉门槛很低,随时招不瞒人一样。11.什么火吹嘘什么。几年前的IOS和安卓,后来的前端和UI,再后来的Python,大数据课程实际就是单纯的学习开发,机器学习都教你Python去了……12.牛逼的师资。实际上很多就是刚毕业的学生,然后包装成名企的技术总监、项目经理,哇哦,社会社会;……太多了,懒的写。同行们,看到的手下留情,我只是说那些老鼠屎,我可没说这个行业全部都是这样啊。当然,还是有很多良心的机构在做教育。此处避免触碰guanggao,所以不做具体推荐。 给出判别标准如下:1.合同制保证就业还是推荐就业?2.敢不敢在合同里保证就业薪资?3.敢不敢在入学后不满意随时退?4.敢不敢给你看真实的就业信息?5.敢不敢让免费的试听至少一周?6.敢不敢合同承诺没就业退全款?7.能否把精力放教学而非广告上?能够做到以上这些的绝对差不了,扯其他的都没用。对自己负责,多去几家机构实地比较下。选择大于努力,至于学习方向,请再记住一句话:越简单的东西越没竞争力!', '1515395283');
INSERT INTO `answer_table` VALUES ('14', '17', '8f5fef858fd685f8ce2bca33cef13a2d', '时隔一年多再次看到这个问题可以说感慨万千,我来重新来回答这个问题如今我的培训班已经成为知乎上被各路业内人士推荐最多的个人前端培训品牌我的培训班为学生配备了<b>人体工学椅</b>,<b>我几乎每天晚上到教室答疑</b>,包含住宿,学费便宜,<b>并且敢让学员免费试听三周甚…</b>', '1471360274');
INSERT INTO `answer_table` VALUES ('15', '17', '14', '就h5培训来说,足以说明两点:1、前端太火了。2、是个人就拉几把桌子开始讲课。3、开班不为钱,你TM是圣人啊。4、培训来说所有做IT培训的,起初都一个模式起步,搭伙或者老板自己上课,就夫妻老婆店模式。5、最后全部一个通病,具体什么病呢往下看。6、IT业…', '1471360830');
INSERT INTO `answer_table` VALUES ('16', '17', '15', '本来不是\"一楼\"的,默默爬到了最前面,躺枪啊 2016.08.19更 ——————————————————————————————————————————<b> 培训机构最大的问题是讲师和管理; </b><b>讲师: </b><b>什么人都能随随便便做讲师?</b>甭管您是阿里的高p,还是百度的高…', '1471461252');
INSERT INTO `answer_table` VALUES ('17', '17', '16', '培训是让你进入这个行业的敲门砖,具体的还需要靠自己去积累才行。要说培训的效果,但凡是自己努力学了那么肯定是有效果的。出去上班工作是没问题的。我看到有很多人说不要培训出来的人充满了一个鄙视的态度。我觉得这样是没必要的。每个人都有追求好的权利。', '1493369546');
INSERT INTO `answer_table` VALUES ('18', '17', '58e2f483413205f53068eb1b8dfa8aaa', '从业人员毫不留情来答一波,如果蛋哥我被乱棍打死,请记得给我申冤啊。拿我的五十米的大刀来,开始挥舞。1.招转。投简历-面试-小黑屋开始打压-说你不合格-给你一个难得的培训的机会-机不可失失不再来,要学习抓紧啦;2.先就业后付款。纯粹就是贷款模式,没…', '1515395283');
INSERT INTO `answer_table` VALUES ('19', '21', '18', 'MutationObserver 是一个独立于前端开发者技术栈的接口。因为是以“结果”为导向的,所以可以帮助同一网页上的多项技术协同工作。不管你是 React 还是 jQuery,最终都会修改 DOM。这对一些第三方扩展还是非常有用的。另外,你要的 ResizeObserver 在此:https://github.com/WICG/ResizeObserver可以多关注 https://github.com/WICG 了解 web 新科技。', '1510363885');
INSERT INTO `answer_table` VALUES ('20', '21', '19', '监听属性style变化应该是可以。 ', '1510363443');
INSERT INTO `answer_table` VALUES ('21', '21', '596c0a5fdd9b36cea06bac348d418824', 'MutationObserver 是一个独立于前端开发者技术栈的接口。因为是以“结果”为导向的,所以可以帮助同一网页上的多项技术协同工作。不管你是 React 还是 jQuery,最终都会修改 DOM。这对一些第三方扩展还是非常有用的。 另外,你要的 ResizeObserver 在此:…', '1510363885');
INSERT INTO `answer_table` VALUES ('22', '21', '20', '你大概需要的是这个吧 <a href=\"https://link.zhihu.com/?target=https%3A//github.com/WICG/ResizeObserver\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">WICG/ResizeObserver</a>。(原来轶灵大大已经提到了啊,没有注意到)在 2016 年 10 月(一年前)Google WebFundamentals 就写过一篇文章介绍这个 API:<a href=\"https://link.zhihu.com/?target=https%3A//developers.google.com/web/updates/2016/10/resizeobserver\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">ResizeObserver: It\'s Like document.onresize for Elements</a>。从 Chrome 55 Canary …', '1510550739');
INSERT INTO `answer_table` VALUES ('23', '27', '22', '小程序本来就是腾讯制造出来的伪需求,原本小程序就应该用html5标准来实现,可是腾讯为了自己获得绝对的控制权,模仿html5标准搞出了小程序这么个怪胎出来。对于第三方开发者来说根本就没兴趣用这个束手束脚的怪胎来发布应用,这条路走不下去只好回过头去搞html5了,但又不愿意承认失败,搞个不伦不类的内嵌,但是小程序迟早会彻底退回到纯html5实现的。12/28 补充一下:今天微信推出了小游戏功能,看了一下潜力很大,这才是适合小程序的应用场景。虽然小游戏依然不遵循html5标准,但是游戏应用依赖的API相对简单和稳定,技术上容易驾驭,用户体验应该会不错,那些之前开发html5游戏的CP们要移植微信也很容易。如果能够跟苹果达成协议的话,估计会火。', '1510038089');
INSERT INTO `answer_table` VALUES ('24', '27', '23', '震惊,它让微信小程序一秒支持jquery ………………………………………………………… 谢谢<a href=\"https://www.zhihu.com/people/8f5fef858fd685f8ce2bca33cef13a2d\" data-hash=\"8f5fef858fd685f8ce2bca33cef13a2d\" class=\"member_mention\" data-hovercard=\"p$b$8f5fef858fd685f8ce2bca33cef13a2d\">@谢然</a>大佬的指正,我只是觉得小程序并不是一次让步(退步),而是一次进步。 首先一点就是我更新web部分的布局再也不用提交腾讯审核了啊 1. 这次会带来小程序数量上的…', '1509942037');
INSERT INTO `answer_table` VALUES ('25', '27', '2426077fe941f733aa8923b4f757667f', '小程序本来就是腾讯制造出来的伪需求,原本小程序就应该用html5标准来实现,可是腾讯为了自己获得绝对的控制权,模仿html5标准搞出了小程序这么个怪胎出来。对于第三方开发者来说根本就没兴趣用这个束手束脚的怪胎来发布应用,这条路走不下去只好回过头去搞…', '1510038089');
INSERT INTO `answer_table` VALUES ('26', '27', '24', '说白了开放这个能力是微信的妥协,其实这个能力在微信内部的产品早就已经使用,只是不对外开放而已,因为据说之前这可是张小龙的底线,说好的底线呢?我们尝试用小程序去实现完整的滴滴打车这样的大型复杂应用,深刻感受现有的小程序是多么坑,bug 也多,不…', '1510080207');
INSERT INTO `answer_table` VALUES ('27', '27', '25', '广东广州 广东广州最大社交软件 微信 开放小程序网页内嵌了原来开发一周多 两周多 三周多的项目现在统统可以嵌入了 统统可以嵌入了微信WBD 你不是人打算开放内嵌 你不早说我们辛辛苦苦 加了一个月的班你还我大好青春 还我大好青春!', '1510491492');
INSERT INTO `answer_table` VALUES ('28', '27', '26', '再一次证明了不拥抱标准的都是异教徒', '1510537935');
INSERT INTO `answer_table` VALUES ('29', '33', '28', '谢邀。其实在移动端的youku,爱奇艺,乐视都是用的HTML5,题主说的大多数视频网站都不用HTML5应该是指的桌面版吧。1.flash依然是兼容大多数新老浏览器的方案,2.flash视频播放器贴片广告成本低3.视频广告的防屏蔽技术,HTML5压力很大,毕竟是要赚钱的啊', '1451011226');
INSERT INTO `answer_table` VALUES ('30', '33', '29', '<strong><a href=\"https://link.zhihu.com/?target=http%3A//segmentfault.com/u/y2zz\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Y2zz</a> 44</strong> 2014年09月16日 回答 实际上跟技术无关,跟利益有关系。视频地址泄漏:盗链 懂点技术的都知道可以用开发工具查看页面源代码,这样html5加载的视频地址也就处于裸奔状态了。收入来源:广告 如果用html5来播视频内容,广告就得嵌入视频中,而且更换广…', '1427450868');
INSERT INTO `answer_table` VALUES ('31', '33', 'd1f0f4587281169bdcf03f25c11d4bed', '谢邀。 其实在移动端的youku,爱奇艺,乐视都是用的HTML5,题主说的大多数视频网站都不用HTML5应该是指的桌面版吧。 1.flash依然是兼容大多数新老浏览器的方案, 2.flash视频播放器贴片广告成本低 3.视频广告的防屏蔽技术,HTML5压力很大,毕竟是要赚钱的啊', '1451011226');
INSERT INTO `answer_table` VALUES ('32', '33', '30', '其实我感觉已经有很多网站用的是html5了', '1451016062');
INSERT INTO `answer_table` VALUES ('33', '33', '31', '一两个字可以概括! 利益 这是他们最在乎的高于一切!所以说国内的众视频网站跟谷歌旗下的全世界最大视频网站YouTube比起来简直就是一个在地下一个在天上~ 人家YouTube上的广告也很少至少我每次上去都没看到的,我不知道人家怎么活下来的!? 我们国内的视…', '1485755919');
INSERT INTO `answer_table` VALUES ('34', '33', '32', '2018年1月再回答这个问题,国内主流的视频网站中,爱奇艺(可手动调回flash)、优酷、腾讯视频(可手动调回flash)全部都默认HTML5了。变天了。', '1515770354');
INSERT INTO `answer_table` VALUES ('35', '38', '34', 'http://static.video.qq.com/TPout.swf?vid=a1400po96pp\n其实变的只是后面的 vid 参数。打开 network,在过滤器输入 video_auth 如果你想找通用的适用所有网站的方法,没有。因为每个网站的策略都不一样需要单独破解。可参考:史上最强视频网站真实地址解析', '1442112150');
INSERT INTO `answer_table` VALUES ('36', '38', '2a87fad28e43b886a4ca144b784986e5', 'http://static.video.qq.com/TPout.swf?vid=a1400po96pp 其实变的只是后面的 vid 参数。 打开 network,在过滤器输入 video_auth 如果你想找通用的适用所有网站的方法,没有。因为每个网站的策略都不一样需要单独破解。 可参考:<a href=\"https://link.zhihu.com/?target=http%3A//blog.csdn.net/feige2008/article/details/8895632\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">史上最强视频网站真实地址解析</a>', '1442112150');
INSERT INTO `answer_table` VALUES ('37', '38', '0', '<a href=\"https://link.zhihu.com/?target=http%3A//ke.qq.com/cgi-bin/courseDetail_json%3Fcourse_id%3D52993\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">ke.qq.com/cgi-bin/cours</span><span class=\"invisible\">eDetail_json?course_id=52993</span><span class=\"ellipsis\"></span></a> 然后即可找到每个视频的 vid', '1443529810');
INSERT INTO `answer_table` VALUES ('38', '38', '35', '这个是腾讯视频中播放的某一集:<a href=\"https://link.zhihu.com/?target=http%3A//v.qq.com/cover/g/gd0gl2yspfk170k/n002058txs4.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">那年青春我们正好 第13集</a> 然后我们可以从url上面解析出vid:<b>n002058txs4</b> <b>其实腾讯就是通过这vid加上html扩展后缀,做了一个伪静态页面。</b> 然后通过抓包取得关键参数,并且构建了响应的实际视频地址,如下: …', '1463712012');
INSERT INTO `answer_table` VALUES ('39', '38', '36', '一般有几个办法可以拿到视频的原始url: 1)可以试下傲游浏览器,傲游浏览器在播放一个视频页面时,右上角有个获取本页上视频文件的功能,原理是捕获整个浏览器的所有http请求数据包,如果有.mp4/.flv等文件,则记录下来地址。这种是比较简单和兼容大部分视…', '1484652874');
INSERT INTO `answer_table` VALUES ('40', '38', '37', '<a href=\"https://link.zhihu.com/?target=http%3A//www.dolit.cn/video-parser-introduction-html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">点量视频地址解析 | 点量软件</a>', '1508394232');
INSERT INTO `answer_table` VALUES ('41', '44', '39', '路过不同浏览器不一定是这个结果底层代码肯定不是JS仅趴了机器上几年前最老的blink代码看了下EventListenerMap 里靠的是 EventListenerVector这玩意就是个 Vectortypedef Vector<RegisteredEventListener, 1>这么搞的onclick setting 时候是 vector->find 后没有对应 handle 再 append 进去的再次 setting 时是 find 有就先 remove 老的再 append没见 Vector 有用到(定义过) replace 方法所以(在这么实现的浏览器上)才有这种现象最终还是轮子哥猜对了。', '1461327307');
INSERT INTO `answer_table` VALUES ('42', '44', '40', '合理猜测:给onclick赋值的内部操作时,remove掉原来的,add上新的。', '1461317598');
INSERT INTO `answer_table` VALUES ('43', '44', '41', '订阅者模式,内部应该是通过一个列表来维护事件响应的,所以每次为OnClick赋值的时候会替换原来的事件委托。', '1461326227');
INSERT INTO `answer_table` VALUES ('44', '44', '5b651f38d9d96a995107ec0e855cf5c1', '路过 不同浏览器不一定是这个结果 底层代码肯定不是JS 仅趴了机器上几年前最老的blink代码看了下 EventListenerMap 里靠的是 EventListenerVector 这玩意就是个 Vector typedef Vector<RegisteredEventListener, 1> 这么搞的 onclick setting 时候是 vector…', '1461327307');
INSERT INTO `answer_table` VALUES ('45', '44', '42', '这个ff和chrome/safari行为是不一致的(edge未测试)。按照现在的规范(<a href=\"https://link.zhihu.com/?target=https%3A//html.spec.whatwg.org/multipage/webappapis.html%23event-handler-attributes%3Aevent-handlers-12\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://</span><span class=\"visible\">html.spec.whatwg.org/mu</span><span class=\"invisible\">ltipage/webappapis.html#event-handler-attributes:event-handlers-12</span><span class=\"ellipsis\"></span></a>),blink/webkit的行为是错误的。 嗯,恭喜轮子猜对了一个错误的实现。', '1461345767');
INSERT INTO `answer_table` VALUES ('46', '44', '43', 'js就是猜的人多,而不去看源码或规范,所以有一堆误导大众的文章', '1461394522');
INSERT INTO `answer_table` VALUES ('47', '48', '596c0a5fdd9b36cea06bac348d418824', 'ES 规范我没有通读过,HTML 4.01 和 CSS 2.1 基本读了一遍。就我读过的内容而言,我觉得是非常有帮助的但是要拿来入门可能不是太合适。阅读规范有助于你在整体上对某项技术有更深入的理解,了解整个体系是如何工作的有助于我们避免陷入一些常见的疑惑。我认为对于初学者首先应该对多种会涉及的技术是如何协同工作的有一个粗浅的理解。然后可以动手做一些简单的实现,这个时候一般来说针对某项特定的技术在某些细上都会遇到一些疑问。比如说「我在 CSS 中设置了某个要是但是最后为什么没有生效?」等等。不重视理论的结果就是你需要去记忆许多实践中的案例,面对以前没有遇到过的情况就容易不知所措。此时如果你能把机制的问题尽可能地了解清楚了,许多常见的问题对于你来说可能就不再会是问题了。当然理论不能解决一切问题,比如浏览器的事情和理论总会存在差异,水平足够的话可以去查查开源引擎的源码中相关的实现。这个时候,对规范的了解你会有助于你在大规模的源码中找到相关的部分。对规范的学习你可以选择从别人的博客文章中获取二手资料,英语水平足够的话直接阅读规范原文可能会更好一些。如果要阅读规范,建议重点阅读一些全局性的内容,比如 CSS 的继承机制之类的。', '1476510269');
INSERT INTO `answer_table` VALUES ('48', '48', '45', '有必要,但不是通读。 词典一类的工具,本来就是用的时候翻来看看。 <a href=\"https://link.zhihu.com/?target=http%3A//caniuse.com/%23index\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Can I use... Support tables for HTML5, CSS3, etc</a> 如上,标准都定义了,能不能正常使用又是个蛋疼的事。 至于书籍的滞后性,技术类书籍大多是 增补多,删减少。 掌握了基础的部分,再去…', '1372640110');
INSERT INTO `answer_table` VALUES ('49', '48', '5b651f38d9d96a995107ec0e855cf5c1', '是否合理因人而异,对于刚入门,还啥都不清楚的人来说,上来就看规范无疑是打消学习积极性啊。按照规范语句内尿性,各种特定且字面相近的名词,初看很容易被误导(其实就是自己把人家写的意思理解错了……)。 偶嚼着学习任何技术还是应该从看 API 开始,先…', '1374325184');
INSERT INTO `answer_table` VALUES ('50', '48', '596c0a5fdd9b36cea06bac348d418824', 'ES 规范我没有通读过,HTML 4.01 和 CSS 2.1 基本读了一遍。就我读过的内容而言,我觉得是非常有帮助的但是要拿来入门可能不是太合适。 阅读规范有助于你在整体上对某项技术有更深入的理解,了解整个体系是如何工作的有助于我们避免陷入一些常见的疑惑。 我…', '1476510269');
INSERT INTO `answer_table` VALUES ('51', '48', '46', '规范是给浏览器开发者看的,你看了规范也不会写程序,还不如看看入门教程,书籍是人类进步的阶梯,前人智慧的结晶', '1476545541');
INSERT INTO `answer_table` VALUES ('52', '48', '47', '连我这个后端工程师都读过http rfc,前端工程师深入了解这些吃饭的家伙不是正常的么?', '1476572767');
INSERT INTO `answer_table` VALUES ('53', '51', '596c0a5fdd9b36cea06bac348d418824', '不是,例如被禁用的控件、非最终触发表单提交的按钮等,都不参与提交过程。HTML4 里的说法叫 Successful controls:Forms in HTML documentsHTML5 的描述变了,见 4.10 Forms — HTML5', '1457948639');
INSERT INTO `answer_table` VALUES ('54', '51', '49', '除了disable的都会被提交', '1457947037');
INSERT INTO `answer_table` VALUES ('55', '51', '596c0a5fdd9b36cea06bac348d418824', '不是,例如被禁用的控件、非最终触发表单提交的按钮等,都不参与提交过程。 HTML4 里的说法叫 Successful controls:<a href=\"https://link.zhihu.com/?target=https%3A//www.w3.org/TR/html4/interact/forms.html%23h-17.13.2\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Forms in HTML documents</a> HTML5 的描述变了,见 <a href=\"https://link.zhihu.com/?target=https%3A//www.w3.org/TR/html/forms.html%23constructing-form-data-set\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">4.10 Forms — HTML5</a>', '1457948639');
INSERT INTO `answer_table` VALUES ('56', '51', '50', '只有表单元素才能被提交,前提示没有disable,参考 <a href=\"https://link.zhihu.com/?target=http%3A//www.cnblogs.com/kissdodog/archive/2013/01/10/2854917.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">HTML之表单元素</a>', '1458017468');
INSERT INTO `answer_table` VALUES ('57', '57', '52', '你的力度还不在 web component。只是针对你问题的推测一些简单的解决方案。推测你的项目还是传统项目, 所以不用考虑的太复杂。提取出项目中的 公共部分。 比如 header footer 以及你说的 导航栏。 1:通过服务端配合 include到 页面当中,简单易用,维护成本低。具体的方法可以google对应的服务器端语言 对应的 include snippet 的方法2: 通过构建工具 如 Grunt Gulp FIS... 比如grunt-include-html(插件比较多,我就不细说了)与服务器做拼接的区别就是 通过编译的方式 把 html snippet 替换掉 html文件中的标记。 就你的项目而言,各项成本都比较高,不推荐。当然还有其他没有价值的方案, 比如写成template文件,页面初始化的时候 append到页面当中。 当然硬是要用 web component的方法也不是不行,只是不推荐。', '1441297568');
INSERT INTO `answer_table` VALUES ('58', '57', 'f1c521869182e0ff09f7c0525b244cc1', '你的力度还不在 web component。 只是针对你问题的推测一些简单的解决方案。 推测你的项目还是传统项目, 所以不用考虑的太复杂。 提取出项目中的 公共部分。 比如 header footer 以及你说的 导航栏。 1:通过服务端配合 include到 页面当中,简单易用,维…', '1441297568');
INSERT INTO `answer_table` VALUES ('59', '57', '53', 'web component 怎么说呢 大家概念还不清楚', '1441299461');
INSERT INTO `answer_table` VALUES ('60', '57', '54', '推荐React,<a href=\"https://link.zhihu.com/?target=http%3A//facebook.github.io/react/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">A JavaScript library for building user interfaces</a>。 可以用组件的方式开发Web页面。', '1441351979');
INSERT INTO `answer_table` VALUES ('61', '57', '55', '页面由前端渲染,一个页面一个组件参数配置', '1441358511');
INSERT INTO `answer_table` VALUES ('62', '57', '56', 'fisp ,去看看吧,,,,很不错的一个解决方案', '1441548930');
INSERT INTO `answer_table` VALUES ('63', '63', '58', '一点补充内容:Web 「相关」规范(这里包括 Web API、ECMAScript 语言和常用的 Protocol 等)设计中一般有一些基本的共识:每一个 Web API 只做一件事;同一个功能不会有两个类似的 API 来做(除非是用新的 API 来取代过于落后的 API);保持 ECMAScript 的平台无关性;保持 Web API(IDL 及语义)不强依赖于 ECMAScript;比如我们能够发现:Web Components 不是一个规范,里面的每个规范都是独立的,并且其功能是有意义的。例如我们可以只用 Custom Elements 来扩展 HTML 语义;使用 Shadow DOM 来隔离 CSS;使用 Template Tag 来实现动态 DOM 生成;使用 HTML Imports 来引入外部内容等。 Web 的本质是一个平台,所有 API 都是平台的底层 API,首要目的也不是为了方便使用。除了类似于 XHR 或者 document.getElementByXXX 这样过于繁琐的 API 已经出现了替代品之外,并不会有出一个 Fetch 规范、一个 Request 规范、一个 SuperAgent 规范来满足不同用户的喜好。所有不影响功能实现的需求都应当自己通过封装来解决。ECMAScript 语言本身不会出现依赖于 DOM API 的内容。虽然 ECMAScript 目前是事实上被钦定的 Web 开发语言,但是所有 Web API 规范中都是用的语言无关的 Web IDL 来定义的,几乎不会出现(显式)依赖于 ECMAScript 的情况。所以为了满足题主实现类 React 框架的要求,可能的方式是:ECMAScript 中增加 XML Literal 语法的支持,类似于 Scala 和 VB,增加一坨 Built-in 的类。复用现有的 Custom Elements API 作为组件基础,其本身已经提供了良好的生命周期特性,没有特殊的必要不可能重新引入一个类似的又没什么创新的同类 API。DOM API 中增加一个 Virtual DOM API 子集,内置 Diff 功能,还要提供一套复杂的配置机制。这样做出来的效果也不会比目前好多少。根本的问题在于,框架的职责在于提供一整套的解决方案,而平台 API 的设计要求是绝不能提供一整套的解决方案(即保证零耦合、正交),这是无法调和的基本矛盾所在。---先说观点:Web Components 一定成不了气候,但会继续演进下去;Angular、React、Vue 谁也不会成为 Web 标准;JSX 永远不可能得到原生支持。现在 Web 前端的痛点并不在于「最新的」浏览器原生支持的特性不够,而是「需要兼容」的浏览器原生支持什么的问题。Web 开发中,标准化的意义在于,需求与实现的分离,例如某个类库需要使用 Promise,但不需要纠结具体用哪个 Promise 实现,应用所有者自行 Polyfill 出来即可,避免出现用到了多个库都分别自带了自己私有的 Promise 实现;知识和工具的复用性,例如大家都学的是同一个 JavaScript 语言/Web API,文档和教程可以通用,避免每个人都去用自己的方言编译到 JavaScript;给 Web 开发指明一个<del>正确</del>合理的发展方向;给 Web 平台提供更多的功能。为什么说 4 不是那么重要呢?因为 Web 的使用方式确定了实现的滞后性,(相关)标准必然会领先于现有实现(如果要进步的话)。绝大多数人所做的都是通用 Web 开发,而非面向最新浏览器开发。被「规范」原生实现的东西,并不等于产品中可以视为原生实现,即便使用 Web Components,该构建还得构建(利于 extends HTMLElement 用到了 ES2015 的 class),该带运行时还是得带运行时(除了 <template> tag,Custom Elements、Shadow DOM 和 HTML Imports 显然都需要对应 Polyfill)。所以现实情况是,用「规范」定义的原生方案也需要 Compilation 和 Polyfill,用「第三方」的模拟方案也需要 Compilation 和 Polyfill,那么这时候该如何选择呢?为了 Web 规范的茁壮成长,大家为什么不都主动选择符合「规范」的方案呢?不幸的是,「规范」永远都是<del>落后</del>保守的。不论是功能覆盖、API 设计还是可塑性。作为「规范」,这种取舍也是正确的。对于 Web 组件话方案而言,从 Angular、React 和 Vue 中任选一个,都能获得比「规范」所提供的方案更多的功能、更快的反馈周期和更高的自主性。所以,在同样需要 Compilation 和 Polyfill 的情况下,何乐而不为呢?除了组件化之外,哪怕是 Fetch(Fetch API)这种可以算作及其先进的 Web API,也很容易看出这种弊端:虽然相比于 XHR 极大改善,但是本身功能仍然过于简洁,在复杂应用中仍然需要自行封装,随着封装力度的不断加大,性价比还不如直接使用第三方的 HTTP 类库。所以回到框架的问题上,Angular、React 和 Vue 等 Web 框架(或者根据个人喜好叫类库、平台)等,都不可能成为 Web 规范,或者说,不成为 Web 规范才是它们的意义所在。如果对于一个 Web 框架,新增一个 Feature 需要过两年才能使用,<del>提交一个 Bug 需要过两年才能修复</del>(不不不,对于 Web 规范而言,没有 Bug、只有 Feature,所谓的 BUG 只是特例而已,记住了就好,以后都会成为面试考点),这样的 Web 框架还有何意义?不过,虽然本身成为 Web 标准没有意义,但是与 Web 标准共同发展仍然是一件好事。如果一个技术在 Web 框架中得到广泛应用,那么可能这个技术能够成为 Web 标准的一部分;反之,如果一个 Web 标准得到广泛支持,那么 Web 框架也能在一定程度上受益于这些标准。然后对于 JSX,目前所谓的 JSX 规范(facebook/jsx)只涉及语法,不涉及任何语义部分。也就是说,目前根本没有规定对于一个 JSX 的扩展语法应该实现成什么样子。React 会把它编译成 React.createElement(),Vue 会编译成 _h(),Inferno 会编译成 createVNodes()。于是问题来了,用哪个 JSX 的实现作为标准呢?不光是命名空间,内部的结构组织大家也都不一样。如果真要新增为 ECMAScript 的语言特性,那么肯定是不会使用一个第三方的 namespace 的,于是作为标准化的语言特性,又增加了一种叫做「标准」实现的实现。但是另一方面,一旦要把 JSX 列入到 ECMAScript 中,也就意味着目前所有基于其他 JSX 实现的代码全都会被 Break down。或者换句话说,就是因为大家本来都不打算让 JSX 成为 ECMAScript 的一部分,才会分别大力发展自己的私有实现。结合前面的部分,就算实现了,并不影响你所需的构建步骤(对于通用 Web 应用而言),然后又与所有当前的代码不兼容,完全没有必要这样自找麻烦。Web 开发永远会趋向于「在保证可实现性的基础上尽可能提高生产力」的开发方式,即便现在的 Web Components 真的被普遍实现了,大家也会继续追求新的扩展以及新的高层抽象。总结:Web 开发由于其存在方式,必然需要在「避免构建」和「提高生产力」之前作出选择;Web 标准必将长期保持领先于「浏览器实现」,落后于「可行的最先进方案」的状态;Web 框架/类库/平台的先进性可能需要其不被标准化才能持续保持;JSX 没有一个统一的语义,且平台相关性过于显著,不太可能被吸收进 ECMAScript。', '1492618808');
INSERT INTO `answer_table` VALUES ('64', '63', '8ba66c223c0416c87fa66a2a16f624f1', '一点补充内容:Web 「相关」规范(这里包括 Web API、ECMAScript 语言和常用的 Protocol 等)设计中一般有一些基本的共识:每一个 Web API 只做一件事;同一个功能不会有两个类似的 API 来做(除非是用新的 API 来取代过于落后的 API);保持 ECMAScript 的…', '1492618808');
INSERT INTO `answer_table` VALUES ('65', '63', '59', '未来有两个含义,一个是“未来标准”,一个是“未来最具主宰地位的框架”。要说未来标准,那肯定只有Web Component有希望,React/Angular/Vue因为其背后的开发者背景是绝对不会成为标准的。Web上的标准有一个缺点,就是制定标准的人不是开发Web应用的人,所…', '1492660228');
INSERT INTO `answer_table` VALUES ('66', '63', '60', 'Facebook刚刚发布了ReactVR引用 <b><a href=\"https://link.zhihu.com/?target=https%3A//twitter.com/iammerrick\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Merrick Christensen</a></b> 今天发布的一条推文:React的目标不是成为Web的什么标准,而是为所有平台的界面开发提供一种统一的语言接口。React做到了真正的Learn once, write everywhere!我不知道Web Component 或 React、Angular…', '1492693367');
INSERT INTO `answer_table` VALUES ('67', '63', '61', '无论是过去现在还是未来,组件化开发的思想和实践都会是行业现实,在没有React,Angular,WebComponent之前,不少框架已经有很多尝试了。现在进行的只不过是找到一种比较好的抽象而已。如果要成为标准,我认为Google的技术更容易成为标准,他有自己的浏览器…', '1492695674');
INSERT INTO `answer_table` VALUES ('68', '63', '62', '不知道你说的是初音未来还是栗山未来……好吧,装傻是不对的。不过标准是标准,框架是框架,至于未来……当然是未来要流行的框架代表未来了。至于未来要流行的框架……哎嘿?', '1492707394');
INSERT INTO `answer_table` VALUES ('69', '69', '64', '以下是腾讯云技术社区整理的 WebSocket原理说明 ——众所周知,Web应用的通信过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现。这种机制对于信息变化不是特别频繁的应用可以良好支撑,但对于实时要求高、海量并发的应用来说显得捉襟见肘,尤其在当前业界移动互联网蓬勃发展的趋势下,高并发与用户实时响应是Web应用经常面临的问题,比如金融证券的实时信息、Web导航应用中的地理位置获取、社交网络的实时消息推送等。传统的请求-响应模式的Web开发在处理此类业务场景时,通常采用实时通讯方案。比如常见的轮询方案,其原理简单易懂,就是客户端以一定的时间间隔频繁请求的方式向服务器发送请求,来保持客户端和服务器端的数据同步。其问题也很明显:当客户端以固定频率向服务器端发送请求时,服务器端的数据可能并没有更新,带来很多无谓请求,浪费带宽,效率低下。基于Flash,AdobeFlash通过自己的Socket实现完成数据交换,再利用Flash暴露出相应的接口给JavaScript调用,从而达到实时传输目的。此方式比轮询要高效,且因为Flash安装率高,应用场景广泛。然而,移动互联网终端上Flash的支持并不好:IOS系统中无法支持Flash,Android虽然支持Flash但实际的使用效果差强人意,且对移动设备的硬件配置要求较高。2012年Adobe官方宣布不再支持Android4.1+系统,宣告了Flash在移动终端上的死亡。传统的Web模式在处理高并发及实时性需求的时候,会遇到难以逾越的瓶颈,需要一种高效节能的双向通信机制来保证数据的实时传输。在此背景下,基于HTML5规范的、有Web TCP之称的 WebSocket应运而生。早期HTML5并没有形成业界统一的规范,各个浏览器和应用服务器厂商有着各异的类似实现,如IBM的MQTT、Comet开源框架等。直到2014年,HTML5终于尘埃落地,正式落实为实际标准规范,各个应用服务器及浏览器厂商逐步开始统一,在 JavaEE7中也实现了WebSocket协议。至此无论是客户端还是服务端的WebSocket都已完备。用户可以查阅HTML5规范,熟悉新的HTML协议规范及WebSocket支持。WebSocket 机制以下简要介绍一下WebSocket的原理及运行机制。WebSocket是HTML5下一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的。它与HTTP一样通过已建立的TCP连接来传输数据,但是它和HTTP最大不同是:WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数据,就像Socket一样;WebSocket需要像TCP一样,先建立连接,连接成功后才能相互通信。传统HTTP客户端与服务器请求响应模式如下图所示:\nWebSocket模式客户端与服务器请求响应模式如下图:\n上图对比可以看出,相对于传统HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket是类似Socket的TCP长连接通讯模式。一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。相比HTTP长连接,WebSocket有以下特点:是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)。此外还有 multiplexing、不同的URL可以复用同一个WebSocket连接等功能。这些都是HTTP长连接不能做到的。下面再通过客户端和服务端交互的报文对比WebSocket通讯与传统HTTP的不同点:在客户端,new WebSocket实例化一个新的WebSocket客户端对象,请求类似 ws://yourdomain:port/path 的服务端WebSocket URL,客户端WebSocket对象会自动解析并识别为WebSocket请求,并连接服务端端口,执行双方握手过程,客户端发送数据格式类似:GET /webfin/websocket/ HTTP/1.1\nHost: localhost\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==\nOrigin: http://localhost:8080\nSec-WebSocket-Version: 13\n可以看到,客户端发起的WebSocket连接报文类似传统HTTP报文,Upgrade:websocket参数值表明这是WebSocket类型请求,Sec-WebSocket-Key是WebSocket客户端发送的一个 base64编码的密文,要求服务端必须返回一个对应加密的Sec-WebSocket-Accept应答,否则客户端会抛出Error during WebSocket handshake错误,并关闭连接。服务端收到报文后返回的数据格式类似:HTTP/1.1 101 Switching Protocols\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=\nSec-WebSocket-Accept的值是服务端采用与客户端一致的密钥计算出来后返回客户端的,HTTP/1.1 101 Switching Protocols表示服务端接受WebSocket协议的客户端连接,经过这样的请求-响应处理后,两端的WebSocket连接握手成功, 后续就可以进行TCP通讯了。用户可以查阅WebSocket协议栈了解WebSocket客户端和服务端更详细的交互数据格式。在开发方面,WebSocket API 也十分简单:只需要实例化 WebSocket,创建连接,然后服务端和客户端就可以相互发送和响应消息。在WebSocket 实现及案例分析部分可以看到详细的 WebSocket API 及代码实现。腾讯云公网有日租类型七层负载均衡转发部分支持Websocket,目前包括英魂之刃、银汉游戏等多家企业已接入使用。当出现不兼容问题时,请修改websocket配置,websocket server不校验下图中圈出的字段:一个使用WebSocket应用于视频的业务思路如下:使用心跳维护websocket链路,探测客户端端的网红/主播是否在线设置负载均衡7层的proxy_read_timeout默认为60s设置心跳为50s,即可长期保持Websocket不断开近期Websocket将开放自定义配置,敬请期待。相关阅读推荐WebSocket长连接应用场景 搭建多终端《你画我猜》Socket服务器 ', '1492498519');
INSERT INTO `answer_table` VALUES ('70', '69', '65', 'HTML5 是一个很宽广的概念,是对大量新 API 的总称。不存在 HTTP5 的概念,HTTP 最高的版本号是 1.1。简单来说,你可以完全抛开 HTML5 和 HTML4 的概念,只考虑浏览器要么支持 WebSocket,要么不支持。 WebSocket 跟其他 API 比较不一样的是,它不仅仅依赖…', '1360914063');
INSERT INTO `answer_table` VALUES ('71', '69', '66', '简单说,没错,WebSocket不是HTTP协议,HTTP只负责建立WebSocket连接。', '1424521357');
INSERT INTO `answer_table` VALUES ('72', '69', '67', '你可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁,它和 HTTP 有一些共性,是为了解决 HTTP 本身无法解决的某些问题而做出的一个改良设计。在以前 HTTP 协议中所谓的 keep-alive connection 是指在一次 TCP 连接中完成多个 HTTP 请求,…', '1424537431');
INSERT INTO `answer_table` VALUES ('73', '69', '68', '额。。最高票答案没答到点子上,最后怎么跑到Nodejs上去了。。Websocket只是协议而已。。 我一个个来回答吧 <b>一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)</b> 首先HTTP…', '1424620278');
INSERT INTO `answer_table` VALUES ('74', '69', '006373ce404a7d3011acb11de6de16dd', '<b>以下是腾讯云技术社区整理的 <a href=\"https://link.zhihu.com/?target=https%3A//www.qcloud.com/document/product/214/4150%3FfromSource%3Dgwzcw.93403.93403.93403\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">WebSocket原理说明 </a>——</b> 众所周知,Web应用的通信过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现。这种机制对于信息变化不是特别频繁的应用可以良好支撑,但…', '1492498519');
INSERT INTO `answer_table` VALUES ('75', '74', '70', 'v1.0 基础版v1.1 选择编程系统化学习方法请参考:如何学习编程? - 知乎v1.2 如果你是零基础,不妨先看下这篇:零基础开始学 Web 前端开发,有什么建议吗?v1.3 选择编程语言请参考:程序员学哪种语言最好? - 知乎这个问题不够准确,你当然是为了找到工作,所以应该是如何依据最短路径学习前端开发并找到工作恐怕很少人因兴趣而学习,所以目的还是找到工作,那我们反推下,公司需要什么样的人?需要能干活的人,来之能战、战之能胜,即插即用的人才。什么样的人才是能干活的?有项目经验有些人可能会质疑,不对呀,我同学刚毕业,啥都没做过,怎么能找到工作呢?他很可能是985、211学校学生,这种人,公司会看潜力。因为他们能考上985、211,就意味着他们聪明,学习能力强,至于项目经验,可以培养嘛,大家心知肚明学校的教育就是一坨xiang,只要你有潜力,公司又有这个实力,可以培养嘛。那么,如果是普通高校,或是不是前端专业,那怎么办呢?还是,看你有没项目经验学校又不具备让你做项目的能力,于是很多人进了培训机构,这里不对培训机构做任何评价,但是切记,要多做项目、要动手、要实践,光听课没有任何意义。于是,这篇文章中列举了一些项目,只要能真正的完成这些项目,相信就能够胜任公司里前端的基本工作。所以:学习前端开发=做项目我刚开始学编程也是一个人抱着书在图书馆猛看,结果完全没有鸟用,为什么有人在学校是一条虫,而到公司就nb了?因为公司提供了学习环境,提供了项目,团队,帮带,因此学习第一位的是先找环境,而绝不是一个人看书,一方面看书没用,另一方面一个人太孤独了,打败人的并不是挫折,而是孤单,所以第一位的是先找切入点,加入一个学习环境,先上车,再买票:)所以,我建了个web前端纯自助学习qq群:370423482 互助、刷项目、交友:)看书没用,看视频也没用,除了做项目,没有其它方法每一个环节都必须用项目来检验自己的学习成果一 初级篇:HTML/CSS/JavaScript基础知识1.1 Html(视频+文档+项目)视频教程imooc(全免费、全自学):HTML+CSS基础课程-慕课网网易前端微专业(1000+软妹币、有答疑、便宜、够用):前端开发工程师微专业参考文档菜鸟学院(基础、简单):HTML 教程 | 菜鸟教程Mozila官方文档(全E文、逼格高,详细):MDN HTML Doc项目完成零基础Html基础编码:百度前端技术学院1.2 CSS(视频+文档+项目)时间:1周视频教程imooc(全免费、全自学):HTML+CSS基础课程-慕课网网易前端微专业(1000+软妹币、有答疑、便宜、够用):前端开发工程师微专业参考文档菜鸟学院(基础、简单):CSS 教程 | 菜鸟教程Mozila官方文档(全E文、逼格高,详细):MDN CSS Doc完成项目完成Htm/Css基础编码的所有项目:百度前端技术学院 - HTML/CSS所有项目1.3 JavaScript初级(视频+文档+项目)时间:1周imooc(全免费、全自学):JavaScript入门篇-JavaScript入门视频教程-慕课网网易前端微专业(1000+软妹币、有答疑、便宜、够用):前端开发工程师微专业参考文档菜鸟学院(基础、简单):JavaScript 教程 | 菜鸟教程Mozila官方文档(全E文、逼格高,详细):MDN JavaScript DOC完成项目完成该页面中的前三个项目:百度前端技术学院 - JavaScript1.4 JavaScript高级(视频+文档+项目)时间:2周imooc(全免费、全自学):JavaScript进阶篇_JavaScript视频教程-慕课网网易前端微专业(1000+软妹币、有答疑、便宜、够用):前端开发工程师微专业参考文档菜鸟学院(基础、简单):JavaScript 教程 | 菜鸟教程Mozila官方文档(全E文、逼格高,详细):MDN JavaScript DOC完成项目完成该页面中的所有项目:百度前端技术学院 - JavaScript1.5 Web基本操作(纯项目)时间:2周Html/CSS/Javascript的内容到此学习完毕,剩下的之需要用项目来打磨,所以你需要完成页面中直到任务7的项目:百度前端技术学院 - 所有课程--------------------------------初级篇结束----------------------------------------到此为止你就算入门了,已经称的上是一名入门级的码农了,够简单吧:)但离找到工作还有一定差距,本人qq:693605668 有问题的直接问俺吧,或者留言即可,方便俺更好的补充答案,请注明“web前端”。说明:框架并不重要,你应该成为做框架的人,而非只会用。会框架说明不了什么问题,本文只写前端中最核心的知识点,相信会了这些核心,框架只是顺手捻来。-------------------------------------------------------------------------------------二 中级篇:项目构建、实战开发到此为止,你就已经算入门了,但是还缺乏真正的项目,找工作看什么?就是看项目经验,没项目人家可不会认可你,让我们再补充一些项目相关知识吧。2.1 Git操作视频教程:版本管理工具介绍-Git篇-慕课网完成项目:自己照着视频教程撸几遍吧2.2 Nodejs(不会Nodejs都不敢称自己是前端仔:) )视频Nodejs教程1(node,grunt,restful,npm...):进击Node.js基础(一)-慕课网NodeJs教程2(node,grunt,restful,npm...):进击Node.js基础(二)-慕课网Mongodb视频教程3:mongoDB入门篇_mongoDB入门视频教程-慕课网文档官方文档非常棒(全E文):Guides | Node.js好吧,中文文档 : ) :Node.js 教程 | 菜鸟教程mongodb: MongoDB 教程 | 菜鸟教程完成项目实战德州扑克项目:百度前端技术学院 - 所有课程到此为止你就能就行完整项目开发了,如果能吃透其中的代码,就能找到工作。------------------------------找到工作-------------------------------------------到此为止还是只能找到工作,意思是虽然你的水平已经达到大众水平了,但很不幸的说如果你是非科班出生,专业不对口,学校也一般,那你投100份简历可能找到1份工作,你只是分母,没有达到前10%。“要劫就劫皇粮,要嫖就嫖娘娘” - by Jun.雷。下面这些才能确保你成为前10%的人才-----------------------------------------------------------------------------------三 中级篇(续)3.1 设计模式3.2 CSS模块化视频网易云课堂:电商模块化布局实战视频教程 - 网易云课堂imooc : 前端开发_Sass/Less入门基础到高级教程_慕课网文档参考sass: sass入门 - sass教程less: Less 中文网完成项目没找到好的,待之后更新。先跟着视频撸吧 :)3.3 javascript组件化写的好点个赞哦,更多点赞,更强动力顶! 就一个字致谢,放到最后吧,免得说俺写软文:)@袁少成 @祖明 ', '1491814828');
INSERT INTO `answer_table` VALUES ('76', '74', '665a97a08e0e75728de236f402ab6afe', '<b>大家都是从小白走过来,每个人的轨迹不一样。冒昧说一下个人看法</b> <i><b>自学</b></i> 如果有耐心的话,可以看看w3cschool的教程<a class=\" wrap external\" href=\"https://link.zhihu.com/?target=http%3A//www.w3school.com.cn/\" target=\"_blank\" rel=\"nofollow noreferrer\">w3school 在线教程</a> 下面标红的地方,可以按照顺序看看。 <i><b>but....</b></i> 我知道多数人肯定没有耐心一个一个看下去,而且看完这些确实也比较累。 最主…', '1470842108');
INSERT INTO `answer_table` VALUES ('77', '74', '71', '不答题,我就是顺手撕个搞小白培训的抠脚大汉。 这种字里行间等于是告诉你“我是骗子,我是抠脚大汉,我在为培训班攒傻×”的回答,也是可以有人上当的。 你以为剪裁一下就搜不出来了?你以为搜图是逐个像素对比吗?你以为大家都用百度吗? 还动辄“小女子…', '1475863235');
INSERT INTO `answer_table` VALUES ('78', '74', '72', '不要谢我~~~,不要放弃~~~ 在完整APP的迁移之后,终于可以好好写这些内容了。第一篇就是对之前的《<a href=\"https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5Mjg4NDMwMA%3D%3D%26mid%3D2652973793%26idx%3D1%26sn%3D82419c590579b4013606a39392492c17%26scene%3D21%23wechat_redirect\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">前端技能图谱</a>》进行一些细致的解释。当然这些是个人的经验,所以可存在一些区别,不过总的来说还是差不多的。 入门 在我理解下的基础知识,就是我们可以写一…', '1478837598');
INSERT INTO `answer_table` VALUES ('79', '74', '73', '<b>第一 CSS篇 </b> 1. 2个小时的时间去看html\n 就学会<html><head><body><div><lable><input><p><input>就够了2.4个小时的时间去看CSS \n 就学会 color,position就够了,花点时间看一下盒子模型3.2个小时的时间,开始写一个九宫格的小程序\n 很简单,用Div,画出九…', '1479010469');
INSERT INTO `answer_table` VALUES ('80', '74', 'e1a2fdeacec4aa2181442238f9404301', 'v1.0 基础版v1.1 选择编程系统化学习方法请参考:<a href=\"https://www.zhihu.com/question/19578287/answer/157148072\" class=\"internal\">如何学习编程? - 知乎</a>v1.2 如果你是零基础,不妨先看下这篇:<a href=\"https://www.zhihu.com/question/19637373\" class=\"internal\">零基础开始学 Web 前端开发,有什么建议吗?</a>v1.3 选择编程语言请参考:<a href=\"https://www.zhihu.com/question/23016465/answer/169041683\" class=\"internal\">程序员学哪种语言最好? - 知乎</a>这个问题不够准确,你当然是为了找到工作…', '1491814828');
INSERT INTO `answer_table` VALUES ('81', '80', '75', '用phonegap吧,可以实现,我这个就是用phonegap做的,完全用html5,css3,jsavascript。http://xiaoxin.im很多人问用phonegap开发的利弊,在此统一回复大家,目前来看,使用webkit内核的安卓是很卡顿的,不能用于商业开发,而安卓4.4.4以上,使用chromium内核的,非常流畅,在体验上和原生没有什么差距。以下是对phonegap技术的调研分析:', '1396920256');
INSERT INTO `answer_table` VALUES ('82', '80', '76', '只是为了应付毕业设计的话: 1.Phonegap 2.JqueryMobile 如果你觉得Phonegap仍然很麻烦的话,可以使用JqueryMobile单纯的做一个MobileWeb页面,然后Android端简单的用WebView包装一下,伪装成一个APP的样子。 请参考: <a href=\"https://link.zhihu.com/?target=http%3A//demos.jquerymobile.com/1.4.2/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">jQuery Mobile Demos</a> ---------------…', '1396609062');
INSERT INTO `answer_table` VALUES ('83', '80', 'b954308d19269310d0f486f466930d9e', '用phonegap吧,可以实现,我这个就是用phonegap做的,完全用html5,css3,jsavascript。<a href=\"https://link.zhihu.com/?target=http%3A//xiaoxin.im\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">xiaoxin.im</span><span class=\"invisible\"></span></a> 很多人问用phonegap开发的利弊,在此统一回复大家,目前来看,使用webkit内核的安卓是很卡顿的,不能用于商业开发,而安卓4.4.4以上,使用chromi…', '1396920256');
INSERT INTO `answer_table` VALUES ('84', '80', '77', '目前来说最好的方法还是使用phonegap,appcan的话由于是闭源的商业化运行,不适合毕业设计。phonegap只是支撑你的app的骨骼,真正的肌肉系统还是写js,业界一般选择JQuery,但是实际应用中效率比较坑。考虑效率建议使用appFramework,但是其文档凌乱而且不…', '1400497943');
INSERT INTO `answer_table` VALUES ('85', '80', '78', 'phonegap/Cordova,debug的话考虑用4.4.2+的安卓机', '1403482646');
INSERT INTO `answer_table` VALUES ('86', '80', '79', '用HBuilder,你连环境都不用装,专心写HTML+JS+CSS就可以了。 <a href=\"https://link.zhihu.com/?target=http%3A//www.dcloud.io/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">DCloud HBuilder-做最好的HTML5开发工具</a>', '1408984783');
INSERT INTO `answer_table` VALUES ('87', '86', '81', '题主自答我本来想过两天多看看大家的回答后再做总结,但因为可以修改,也憋不住还是提前自答一下我的问题吧。我先说说我的经历:我从小学美术,后来考进了一所中专开设的电脑美术专业,在那里差不多1998年左右学会使用flash 4.0并跟着Flash走了10多年。并在2000年左右学过网页三剑客,学过dreamwear表格布局,并在那时候就开始接各类企业网站制作的外包进行制作。怎么滴也算网页制作这个领域的老司机了吧。但我毕业后从一家电商公司去到了广告行业后我的职业人生改变了。2005年前后市面上大量的出现了基于整站flash技术的网站开始遍布。对我影响最大的是一个叫做 2advanced 的网站,那时候我才意识到做网站这种富媒体应该要把它当做一个艺术作品来制作。2ad也是一个网页设计制作的studio,在他们的作品集中,我看到过模拟非常真实的宇宙飞船效果,以及酷炫屌炸天的视觉编程粒子特效。2ad v4版本 2004年2ad v5版本 2006年那个年代也有非常牛逼的几位日本网站设计制作的艺术家,比如 中村勇吾(Yugo Nakamura)YUGOP.NET IS UNDER MAINTENANCE,和roxik城戸雅行http://roxik.com/一时间我认为这个才是网页设计(制作)的巅峰。Yugo Nakamura作品roxik作品你可能认为这个跟前端有什么关系?这些个都是用flash做的,甚至你认为这个跟开发都没关系,都是美术设计和动画的活,因此你始终带着你目前所处领域对职能的认知看待我说的“当年”这件事了!时间转回到十多年前,flash这东西在中国刚风靡的时候出现了一群人叫做“闪客”(这个名字由闪客帝国网站的站长“编程浪子”高大勇定义的),这群闪客既会美术又会动画还会编程也会做音乐。他们只是使用这个叫做flash的工具制作一切他们想表现的东西。他们大部分人用flash做MV卡通,也有人做网站。一时间Flash成了多媒体的代名词。之前大家都使用authorwear的幻灯片和dircor来制作多媒体,在flash4.0后,几乎flash可以做所有你想到的东西。所以学画画的,学编程的都来搞这个了,引发了一阵狂热,因为当时互联网带宽也有限,除了那些纯文字的网站以外,你突然能看到个会动的就很厉害,更何况flash中动的还那么酷炫。我也为此买了不少动画设计、as的书去学。但比起动画我更喜欢as,因为我感觉控制起来更好玩。虽然在美术中专以及后来我大学念的多媒体都学过动画设计专业,我甚至能逐帧的绘制如同迪斯尼卡通级别的逐帧动画。哦对了,顺带提一下,我接触网页那会儿,还没有css呢,记得css这个东西被发明出来后大家一阵兴奋。诺干年后(2012),我去到了我如今的公司VML(当年的 im2.0)上班,也是因为对这两个人的崇拜,第一张是闪客帝国站长编程浪子高大勇,闪客一词的发明者;第二张是闪客小小,他启发过无数人走进了视觉编程游戏开发行业,就因为他的棍子武术的小人通过简单的编程语句实现了游戏开发,最主要的是他跟nike的官司后来赢了,成为了中国一个成功的艺术创作维权案。当时勇哥是我们公司CTO,小小是公司顶层技术研发。闪客里面这些做网站的人就是我们这群早期的网页设计(制作者),我们一般都会接了网站的单子自己消化从页面设计、UI美工、动画、重构、后端(当时是用asp语言)的所有工作,看似像不像今天的全栈工程师?甚至比全栈更牛的就是连美术都不需要,美术程序一个人搞定。再后来,由于flash网站的体量越来越大,要求越来越高,行业出现了细分:设计的活、flash动画的活、flash程序开发的活、后端的活都逐渐分开了。而我选择了flash开发的活,因为我之前所说我更喜欢用程序去构建视觉。所以在整个工作流里我们被定为“前端开发工程师”这个工作。会涉及到flash+dom+css这几项工具。再后来,flash被乔布斯宣判了死刑,adobe最后也放弃了这个他们从macromedia重金购买的产品。但是公司不管,商业运作才不管你技术怎么变革呢,趋势就是企业minisite广告在移动互联网时代也要从PC站进入到移动端,利用当下流行的app(诸如微信、新浪微博)等社交工具引流提高交互效果。我们也被迫转型H5(即放弃flash)。最初因为我们也都是从网页三剑客时代过来的。也经历过漫长的网页制作史,最初用Table切图->div+css切图才到了flash RIA时代。但在脱离flash后,动画效果的僵硬(因为程序控制动画非常不直观,以及想要处理复杂动画需要非常多的tween叠加),美术创意那边始终不买账,他们认为flash时代能做的你们现在做不了那就是你们技术上有问题水平不行,因此我们也就一直在找这个衔接——即可视化美术UI、以及布局和动画跟程序交互脱离这件事情。这样我们就可以让昔日的动画师做回自己的工作,而不用让程序凭借不直观的感觉通过代码去调整复杂的动画效果。在最初我们尝试了序列图,雪碧图这些实现动画效果(我想大家都经历过,甚至很多前端现在都在用)但由于文件太大,最后决定使用了adobe flash CC自带的creatjsTool,让美术以及动画师做完后导出,事实上动画师这个工作他属于美术人员他们压根不懂代码,甚至不管你技术怎么实现。但他们的专业是优良的动画感受,动画节奏的把握,以及如同迪斯尼动画品质的(预备动作、开始动作,结束动作,缓冲动作)中变形的拉伸以及通过动画模拟物理等等,这些才是动画师的专业,所以我看到答案中那些管我们叫动画师的人我觉得他们工作中一定也是不属于自己的事就是别人的事的做事风格吧,事实上动画师不会写代码。但我们用了creatjs后发现在动画师使用mask以及变换后在手机端特别的卡,最后我们选择了flash2x+egret方法。Flash2x Tool.在选择egret之前,我们也尝试过lufy\'s legend,以及pixi.js,这些canvas框架都非常完整的继承了flash中的可视化编程模块思想(即显示列表)并保持跟Flash as3中类似的api结构,但由于flash2x团队没有支持pixi所以放弃了传说中效率最高的pixi. lufy由于长期不维护自己的项目因此我们也没有去使用。白鹭团队是之前adobe传教士7yue离开adobe后的加盟公司,并由之前负责as的人维护更新,并在2015年拿到了小米雷军的顺为资本的风投。因此选择了egret.在使用中,我们尝试了egret的整套工具流,发现他自己的egret-inspector,因此觉得感觉跟chorme中开发者工具在dom中修改dom树和css也差不了太多。这也就回答了大家觉得canvas不如dom中css所见即所得方便的问题。同样操作inspector的参数后,页面也会发生相对应的修改。再后来,由于canvas因为是全屏刷新渲染的问题,因此对于H5网站的耗电问题一直是所有canvas引擎的坑。因此白鹭借鉴Flash中的局部自动脏矩形的经验,重做了egret引擎,也就是所谓的egret3.0版本。但由于更新了底层不兼容了flash2x,这也让2x项目的主创人员小可非常不悦,因此他决定自己写个引擎不依赖于其他引擎了,这样就不会由于其他引擎迭代中修改了最初架构设计中底层而导致不兼容的问题,这个引擎就是annieJs http://AnnieJS。再后来在flash2x的群里大家逐渐发现彼此都是广告领域的人彼此意识到这个工作流游戏开发不会用,前端webapp开发也不会去使用,我们管我们的圈子叫“互动圈”-即互动广告H5开发(暂且这么叫吧,但事实上这个名称在招聘类网站根本搜不到工作的)。那看看我们公司在广告这个领域是做些什么样的网页前端吧:比如基于threejs的淘宝双11邀请函。(已下线)比如基于flash+egret的百事新年活动。2017把乐带回家 (用手机ua打开这个链接)比如基于dom+css3d的adidas的某个产品宣传网站但我认为其实在WebApp这个领域,也根本没必要把你的所有数据暴露给SEO的,比如你做个饿了么H5没必要让搜索引擎搜到你app中的XX黄焖鸡的话,因此完全也可以使用canvas引擎制作。因此html其实最大的优势只是在于语义化这件事。因此我咨询了下flash2x的小可这个问题,他的回答如下:虽然不排除我们彼此间的flash情怀,但事实上flash的确还是留下了很多不错的制作富媒体应用的思路,这个不可否认。在公司内部,我们名片都印成“web前端开发工程师”,但我们彼此都发现如果去其他招聘web前端开发工程师的地方找工作,我们根本没法对号入座。我们也都关注所有的前端微信公众号以及这个圈子里有啥新技术,一旦有了我们都会去使用。但事实上最后能用到工作场景中的技术只有一部分。最初我们使用Jqurey+backbone+requirejs,然后用typescript或者es6构建项目模块化,也会使用gulp,webpack自动化脚手架、模块管理器跟打包工具等等,我们也学习angular,react,vue,service work,flex布局,响应式布局甚至微信小程序,但由于公司项目着重点不同因此MV框架中渲染成dom+CSS的结果我们没法结合到实际项目中,但是redux思路被我们很早就用上了,当时学redux的时候我们就惊讶的发现就是flash时代的singalbus,但是singal早了不止10年,但这个思路我们一直沿用着backone里的events。在我想尽办法结合MV框架的时候,我同事的话启发了我,他说MV框架是给那些处理数据的前端使用的,我们是处理效果的前端,用他根本没意义。那么问题来了,看下图:找了张鹅厂的。但事实上大家对前端的JD需求都是这样的。正如前面几贴里有人回答,我也是做跟你一样领域的,我平时自学他们要求的那些不就完事了么。那问题出现了,技术学习一般需要这个流程: 写过hello world ->做过demo->实践过项目->踩过坑->烫平一切。这样一来如果公司应用场景并不好的情况下,一般自学或者关注某个新技术而没在项目中使用的话达到做过demo已经是不容易了。这样一来用人单位如何信任你是个他们认为资深的前端工程师呢?因此我的结论就是隔行如隔山,或许换岗也只能在原先的行业里游走,跳出这个行业根本看不清方向。就比如我一个开发IOS已经8年多的老技术说的,他去高德地图面试,结果人家说了个术语他居然从没听过。我认为领域或许是技术的一个壁垒。除非企业非常信任你能超强的学习能力,在没人教的情况下很快就能得心应手,否则一般转行意味着减薪降职。那么事实上呢?众所周知,其实新岗位一直都在迭代,以前的页面重构师(往往是女生的切图员)也在被迫接受学习js成为前端。新技术层出不穷后导致了新岗位也在不断诞生,比如看似又回到从前但完全不是一回事的全栈工程师。在这样的背景下不得不坚持学习。1年前我们都在说前端领域3个月不学习基本上没法和别人沟通了。但事实上我现在也逐渐意识到即使学了本质上也很难跟别人沟通,因此你跟别的前端就如同在一个平行宇宙你们能看到对方但彼此其实是摸不到的。这层阻碍是由于行业差别导致的岗位差异导致的。因此我其实很不认可,坊间各类《前端学习路线图》,比如下面这个如果照这上面的结构初学者去学,一定可以当一辈子“初学者”了。哈哈。往往专家就会让初学者往左走100米,往前走100米,然后往后走100米,再往右走100米,然后跟他说你已经了解到了这100平方里的知识架构了。但其实如果初学者往东走400米或许可以走更远。但事实上万一往东走400米后发现是条死路的情况依然还是有的。就比如以前学flash后不愿学其他的最后死在flash这一条道上的人。所以走100平方或许不是坏事,我暂时就不多做评论了,各有利弊吧。但从“大前端”的概念来看,说到底JSer所需要接触的领域也越来越多,但对于公司内项目的应用场景肯定是有限的。其实可以根据项目需求的场景进行学习。把一个领域学精才是王道。所以以我现在对前端这个领域的观察来看前端应该分三类:1、侧重数据层前端:行业:webAPP,一人多职的负责公司网站前后端的全栈(全栈我不认为只是因为公司为了省钱,但不排除这种情况);这类前端更需要了解全栈知识(前后端,数据库),懂nodejs,懂php,懂数据库。要懂最新的双向绑定MV以及组件化框架,比如angular,react,vue。还要懂数据库。这类前端的高阶技术需要掌握数据结构,以及各种和数据有关的算法。需要数学知识:概率学、微积分等等。2、侧重表现层的前端:行业:H5游戏、H5展示、数据可视化方案、广告活动配合的手机移动站点这类前端需要了解canvas绘图,flash动画以及各类canvas引擎的表现技术,webGL,GLSL语言。高阶需要掌握计算机图形学知识。需要数学知识:离散数学和线性代数、平面几何、立体几何、射影几何’、绘图函数等等。3、侧重hybird的前端:行业:初创型互联网企业以及app跨平台方案供应商这类前端要了解原生APP的开发方法。以及市面上各种打包方式,比如react-native,微信小程序,以及weex等技术。高阶需要掌握 c语言或者汇编语言等底层的开发技术,并编写灵活的打包方案。事实上第三类的前端也覆盖第一类前端,而第二类的前端被知乎笼统的归纳为“游戏设计师”。相关链接:为什么业内不流行基于移动端的Web APP去使用H5整站 canvas技术?在这贴里我已经详细的剖析我们团队的工作流程和制作方法,有兴趣的请点击探讨小可的文章《如何优雅的用Flash开发Html5交互项目》知乎专栏——————————————————————————————补充一 2017.02.07知乎网友:职位不中要,你管他叫什么呢?老板给你钱了么,给你了抬头不重要吧。答:对,在很多小公司初创型公司,一个人身兼多职很正常,但这就出现了个问题,人的经历是有限的,尤其在行业细分越来越严重的时候,如何选择自己的将来或许是一个需要考量的问题。我曾今在小公司上过班,经历过几乎就给一个网站设计的抬头,结果连修电脑的事情也管这样的工作。虽说这并没什么给钱就行了,但未来呢,你怎样在你的简历里描述你做过的这份工作呢?要知道在海投海选的招聘市场里,你的简历或许在还没有到达技术经理的邮箱就已经被HR的助理给筛掉了。道理很简单他们觉得你之前的工作经历跟他们不符合。这也就是我这篇里题目以及长篇大论的缘由。但是事实极有可能并不是你没做过他们描述的工作,只是他们通过抬头误解了你的工作。这其实就引出了另一个很复杂的问题,技术类工作简历怎么写的问题。有时候真的很难办,因为人的经历有限。懂的多未必是好事,这也给招聘方带来挑战。总之随着时代的进步,岗位也在发生变化或许之后web前端的变化会更大都有可能。只有跟上,别掉队了。——————————————————————————补充二 2017.02.08知乎网友:你这类或许应该叫做“页面重构师”更合适。答:我理解的页面重构这一职业起源于最初的大学计算机系不教photoshop,相反艺术院校的多媒体专业只教网页三剑客而造成了毕业生去了公司后发现程序员不会切图,然后就诞生了一个只负责切图的工种。这种工种本身也不会写代码只会用dreamwear的所见即所得拉表格布局,后来在div+css的浪潮中逼着他们适应了看html的标签,并学了通过css控制页面。这种工种虽不会写代码但可以和.net程序员轻松合作制作整站。但随着web2.0时代的到来,越来越多的内容通过cms、blog等工具生成后端的工作量逐渐变大。再加上SPA时代的到来,并让很多公司看到了单页的好处,所以要求前端就必须会js。但事实上归根到底就还是要回到高等教育中的职业教育问题,我们都知道目前的大学教育体系来自于中世纪教会,教育本质上是一种约束机制。再加上社会的变化,本质上大学的教育内容早就跟社会脱节了。大学中的系和专业的分类,最终导致了培养出来什么样的职业人类。我的同事就常说,人的职业就跟游戏里一样是分属性的,这个基础属性在你毕业时候就已经写好了,毕业后的努力都只是在这个属性上加成,就比如你的天生职业是个“肉盾”,你拼命的练习“远程”,远程的技能是可以提高,然后你找了一个远程的工作但怎么都比不过别人。我们称他为选错行了。但事实上社会的进步导致了跨界需求越来越大,甚至很多界是曾经根本不存在的。这时候公司就会想到去邻进专业的职业类型里招人。这时候摆在求职者面前的是继续学习这条路。回到上一段的比喻,如果肉盾的你,训练了远程技能或许短时间没用。但不等于未来没用。产业的进步一定会产生新的机会,我把这一种属性的提高叫做“升阶”。这时候人的比较就更复杂了,这就是我文中提到的那个向东走400米,还是走100平方的道理一样。走400米那叫升级,你单项的级别比别人高,但不排斥科技进步导致的变化。这个玩过即时战略游戏的玩家应该心里都清楚。学校对人基础属性的决定因素或许越来越大,但社会对跨界人才的需求也会越来越饥渴。这就是目前甚至以后企业招人越来越难的情况。大家都只注意自己在升级,而不考虑升阶(比如提升科技)。因此出现了前阵子的热帖 如何评价真阿当的文章:《2016年前端技术观察》? - 前端开发 - 知乎,阿当老师的保守那贴也都提到了,他其实就是站在过去看现在,但当下是目前这种划分结构也不代表未来,所以如果我们保持觉得如今的技术架构不去学习,不久我们就会变成他,认为过去很好很满足,之后发明的一切都没用的看法。仅仅我个人观点,仅供参考。后面待补充......', '1486296856');
INSERT INTO `answer_table` VALUES ('88', '86', '82', '关于「职位的定义」这件事吧,其实它就是个社会约定。你说它重要吧它也不重要,它既不限制你学习其他东西,也不能涵盖一个人的所有能力。你说它不重要吧它其实也挺重要的,职位是让别人了解到你的专业能力的最快速方式,无论是招聘还是自我介绍啥的。别说 C…', '1486280276');
INSERT INTO `answer_table` VALUES ('89', '86', '90327f23a02d431a840cc9eac612f7f1', '<b>题主自答</b> 我本来想过两天多看看大家的回答后再做总结,但因为可以修改,也憋不住还是提前自答一下我的问题吧。 我先说说我的经历: 我从小学美术,后来考进了一所中专开设的电脑美术专业,在那里差不多1998年左右学会使用flash 4.0并跟着Flash走了10多年。…', '1486296856');
INSERT INTO `answer_table` VALUES ('90', '86', '83', '我认为只要是浏览器侧或者是终端侧的开发都算大前端。 只不过进一步的细分应该怎么做似乎的确一直争议挺大。知乎上也总有很多声音说不需要进一步细分,但我是不认可的,这里不展开先。 从现在的讨论看起来我觉得至少偏应用层方向可以分为几个类型: 前端开发…', '1486346135');
INSERT INTO `answer_table` VALUES ('91', '86', '84', '狭义前端一般指跟CSS、DOM或DOM衍生技术打交道的人。 广义前端定义太不统一,不结合语境没法明确。', '1486347194');
INSERT INTO `answer_table` VALUES ('92', '86', '85', '为毛这么关心title ,要是公司能给我一个月几十万工资,叫我狗都行 ʕ •ᴥ•ʔ ', '1486432124');
INSERT INTO `answer_table` VALUES ('93', '92', '87', '首先感谢排名靠前的几位答主的回答,对我们启发很大。于是部门的几个小兄弟连夜就去把这几个H5编辑器全部试用了一遍,为大家做一点微小的贡献,正所谓“苟利国家..asdjkbwubeqbk”不好意思,言归正题... ( ;´Д`)总之呢,我们一直推崇的就是言必有据。说到底,评测这件事情还得靠干货证明才行。-------------------分割线-------------------->> 首先,什么是H5编辑器在微信朋友圈中,我们常常看到各种制作精美的电子邀请函、电子海报、抽奖或是红包等营销活动。这些移动端营销内容画质精良、体验流畅,还支持播放音乐、视频等多媒体素材。那么,这些高大上的内容是怎样制作出来的呢?答案就是H5。所谓HTML是“超文本标记语言”的英文缩写。我们在网上或是微信中看到的网页和内容,多数都是由HTML写成的。H5是指第5代HTML,也指用H5语言制作的一切数字产品。但是使用HTML5语言直接制作页面需要用户有较深的技术背景,难度很大。因此市面上出现了诸多H5编辑器,它们可以帮助用户快速简单地制作H5页面。用户使用H5编辑器时,编辑器会提供一些素材给用户,用户也可以自行上传素材。用户用这些素材制作出一个简单的页面后,添加音乐、视频、动画效果等功能,就可以像制作PPT一样制作出一个H5页面。制作完成后,用户可以自行将H5页面分享至朋友圈等社交网络,也可以通过H5编辑器的推广功能扩大作品的传播范围。用户发布H5页面后,编辑器官方也会对页面进行审核,如果页面涉及违法内容,编辑器会屏蔽该H5页面(所以切忌搞些什么大新闻)。>>那么,该如何评测它们?就像我们在上面提到的,H5编辑器的主要功能就是制作出精美的H5页面。但是,对于有营销需求的用户(比如企业、店铺,甚至是个人推广)来说,其提供的营销相关内容也值得关注。而如果谈论到性价比的话,必不可少的还有价格分析——虽然目前大多数H5编辑器都有丰富的免费功能,但是想要做出高大上的H5页面的话,有些时候基础的模板或者功能并不够用哦。基于以上的分析框架,我们制定的评测指标体系如下:-------------------评测部分-------------------我们先挑选了目前国内市场上几个排名靠前的H5编辑器作为评测对象。 内容制作内容制作是H5编辑器的核心功能,也是我们进行评测的起点。内容制作包括两大部分:模板和编辑;其中模板适合小白们使用,而编辑功能更多地是给有个性化设计需求以及有一定设计功底的用户使用。(一)模板模板有免费和付费之分,大多数H5编辑器都会为用户提供许多精美的模板。用户使用模板时,只需要修改一些文字或图片就可以制作出精美的H5页面。通过模板制作H5页面上手快、制作过程简单,尤其适合小白用户使用。另外我们还整理了各个编辑器提供的模板主题(适用于不同场景)的数量。因为目前各家提供的模板数量都多达数千种,但他们都没有搜索功能,用户只能通过场景主题的分类来快速定位自己想要找的模板主题(没错,我们统计模版数量的过程是痛苦的ˊ_>ˋ)。因此主题的数量越多,用户找起模板来也越有效率。可以看出,易企秀将模板划分得最细,便于用户检索合适模板。在模版数量上,兔展、MAKA和人人秀都突破了5000个;易企秀较少,公开的模板数量仅有2600余个。[注]兔展、易企秀和人人秀的模板数量均来自各平台官方公布的数据;而MAKA则没有官方公开的模板数量,因此本站采取比例抽样法,估算其网站模板数量在6000左右(随机采样200个模板,计算其中免费模板的比例,再乘以其网站总免费模板数量;采样时间2016年11月29日)。(二)编辑功能编辑功能是H5编辑器的核心功能,直接决定了H5编辑器能否制作出精美的H5页面。用户可以自行整合所有素材,添加音乐、视频、动画和一些互动功能,制作出一个精美的H5页面。自行编辑完成的H5页面形式多样,而且如果用户技术过硬,可以制作出非常优秀的且适合自己的作品,因此自行编辑更加适合有一定设计功底的用户使用。H5页面的编辑功能很多,包括了文字、图片、表单、动画、背景图片、背景音乐等十余项内容的编辑。为了便于分析,我们将其具体拆分成了两大块:图文编辑和动画/特效。1.图文编辑具体包含以下这些项目: 其中表单是指类似于报名表等需要访客填写信息的表格;而图表制作则是指用户可以根据需要设计不同的饼状图、走势图、柱状图等来反映数据信息。另外一个需要注意的功能的就是PSD文件导入,是指用户可以导入PhotoShop的文件,从而将编辑器与PS的强大功能进行整合。2.动画和特效功能:这是H5设计的特色模块,大家生活中见过的各种酷炫H5作品都少不了借用这些动画和特效。由于H5涉及到的动画种类较多而且繁杂,所以我们主要统计了各款编辑器所提供动画种类数目。而在特效方面则挑选了三个最具有代表性的效果:擦除效果、指纹开屏、以及重力感应(摇一摇等),能适用于大多数场景的需求。(当然目前大家的新玩法越来越多,我们看到有新鲜好用的特效的话会及时更新哒,同时也希望大家能提供真知灼见~)可以看出,各款编辑器在内容制作上面的功能各有所长,好坏难以一概而论;所以建议大家可以根据实际的需要进行有针对性地考量。不过总体而言,这几款编辑器提供的模板和编辑功能基本上都比较完善,已经能够满足绝大多数普通用户的需求。另外,设计界面、模板和素材的精美程度其实也是很重要的考核点。但是由于在这些项目上无法作出客观评测,所以大家可以自行试用后将结果纳入考量体系中。(吐槽:关于美丑的评测真的做不了啊做不了......)展示推广很多情况下,用户制作H5页面是为了推广活动,因此仅仅制作出优秀的H5页面是不够的。用户还需要进行推广工作,让更多人看到自己的H5页面。首先是品牌展示——用户可以通过添加自定义域名、添加企业logo两种主要方式实现。目前各H5编辑器在品牌展示功能上做法基本雷同,没有太大区别。做好品牌展示之后,下一步就是进行推广,具体又可分为自主分享和付费助推两大类:自主推广是指企业可以自行分享H5作品的链接或者是二维码,将其散播到各个渠道之中。各个编辑器一般会提供红包、抽奖、投票等免费功能来吸引更多的人点击作品,帮助企业的推广。而付费助推是指这些编辑器会有偿提供一些帮助企业推广的服务,比如网红助推、短信推广、精准投放渠道、公众号推广等等。方式多种多样,收费模式也各不相同:有些是按照推广的人数付费,有些则是购买套餐后附送。可以看出,人人秀提供的自主推广功能最为全面,覆盖了红包、抽奖、投票这三个主要功能;另一方面,易企秀则提供了种类最为丰富的付费助推功能,多达7种,企业可以将其提供的助推服务作为自己推广渠道的补充。数据统计数据收集功能的作用主要体现在两方面:一是收集实时数据信息,用户可以随时掌握营销活动的进展,并相应地调整运营策略;二是通过对访客数据的分析,企业能更加精准地定位自己客户的需求,找到客户的偏好,为以后的营销活动提供参考。数据收集主要包括三方面的数据:传播数量数据:包括了访问量、浏览量、分享量、交互统计等数据,用户分析这些数据可以了解活动的整体状况。传播渠道数据:包括了来源统计、访问设备、地域访问量等数据,用户可以分析这些数据从而改进活动运营策略。访客信息数据:包括了访客年龄、性别、学历、职业等身份信息,另外还有关于人均浏览时长的统计以及新老用户比例统计。通过这些数据,用户可以更好地理解活动的目标人群。综合上表可以看出,各款编辑器在传播数量统计和传播渠道统计上的功能都很完备,主要的区别集中在访客信息统计这一块上:易企秀提供的访客信息数据相当全面(不过很多功能需要付费版里面才有),另外的三款都有一些功能上的缺失。费用(一)免费服务 (二)付费服务为了方便大家查询详细的价格清单,我们帮助大家搜集了各个商家的官方价格链接(真的不是广告啊...你们看到过这么硬的广告吗?(╯°□°)╯︵ ┻━┻ )兔展: 提供一个付费套餐,4999元/年;MAKA: 四个付费套餐,分别为 1999元/年、4999元/年、11999元/年、19999元/年;易企秀:三个付费套餐,分别为 3000元/年、6800元/年、15600元/年;人人秀:四个付费套餐,分别为 499元/30天、3999元/年、5999元/年、14999元/年。 这是小结等等...还没完...作为国(chou)际(bu)知(yao)名(lian)的评测机构,我们当然得做到雨露均沾才行对不对,所以我们后来还陆续评测了剩下的这些H5编辑器:H5编辑器评测:Epub360意派 - 企业服务汇H5编辑器评测:微吾 - 企业服务汇H5编辑器评测:iH5 - 企业服务汇H5编辑器评测:最酷网 - 企业服务汇H5编辑器评测:云来 - 企业服务汇H5编辑器评测:木疙瘩 - 企业服务汇(⬆这才是广告啊有木有!(つД`)ノ)当然如果您觉得这评测还不错的话也可以选择关注一下我们的网页和微信号哦~(⬆这还是广告,没错,你看到并不是一条假广 告)', '1484803513');
INSERT INTO `answer_table` VALUES ('94', '92', '88', '1. <a href=\"https://link.zhihu.com/?target=http%3A//www.rrxiu.net/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">人人秀</a>( <a href=\"https://link.zhihu.com/?target=https%3A//www.rrxiu.net/home%23zh\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://www.</span><span class=\"visible\">rrxiu.net/home#</span><span class=\"invisible\">zh</span><span class=\"ellipsis\"></span></a> )人人秀定位傻瓜级操作体验,除了能够制作简单的翻页H5,还支持各种互动插件,比如照片投票、游戏、微信红包、抽奖、VR全景、答题等功能,功能十分强大。2. <a href=\"https://link.zhihu.com/?target=http%3A//www.ih5.cn/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">iH5</a>(<a href=\"https://link.zhihu.com/?target=http%3A//www.ih5.cn/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">ih5.cn/</span><span class=\"invisible\"></span></a> )iH5定位于一款专业级H5制作工具,…', '1452600639');
INSERT INTO `answer_table` VALUES ('95', '92', '89', '直接敲代码比较靠谱。可以实现自己想要的效果是多么美妙的感觉啊! ', '1459244986');
INSERT INTO `answer_table` VALUES ('96', '92', '90', '现在有很多工具都可以做的,凡科微传单的很简单啊,而且它多了一个模板全部免 费的优点,所以我一般都是用它。<a href=\"https://link.zhihu.com/?target=http%3A//wcd.im/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">凡科微传单_微海报</a> ', '1469515633');
INSERT INTO `answer_table` VALUES ('97', '92', 'ba62a3f949834da4080d7502fc4fd088', '首先感谢排名靠前的几位答主的回答,对我们启发很大。于是部门的几个小兄弟连夜就去把这几个H5编辑器全部试用了一遍,为大家做一点微小的贡献,正所谓“苟利国家..asdjkbwubeqbk”不好意思,言归正题... ( ;´Д`)<b>总之呢,我们一直推崇的就是言必有据。…</b>', '1484803513');
INSERT INTO `answer_table` VALUES ('98', '92', '91', '做H5页面用什么软件?没有绝对的回答,任何答案都要看情景,看条件,看目的!<b>一、首先先把这些软件分成2类,专业软件和大众软件</b>,都是工具,但特点也是明显的。专业软件适合深度使用用户,能完成的效果会更加漂亮和自由,但是学习难度也更大。大众软件使用…', '1506053081');
INSERT INTO `answer_table` VALUES ('99', '97', '93', '我想题主期待的是举例前端算法应用,而不是具体算法的实现,甚至某个数学库函。前端由于面向的是界面及交互实现,所以算法研究和应用确实相对较少。已知的几个需要一定算法应用的领域主要有游戏,编辑器及协同办公,GIS(地图),阅读器排版等。除了这些比较复杂的前端应用之外,前端在算法上的要求确实较少。不过我觉得前端虽然技术问题少,但是工程问题很多,是另外一个值得研究和探索的领域。参考 facebook静态资源管理系统@velocity2010 http://v.youku.com/v_show/id_XMjI5OTUxMjE2.html', '1414080067');
INSERT INTO `answer_table` VALUES ('100', '97', '64ae465bb7c8458591c7d5690f1078fd', '# 对 JavaScript 原生方法的优化(不代表所有方法都会对速度有所提升)与扩展。 * 著名的 <a href=\"https://link.zhihu.com/?target=http%3A//jquery.com/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">jQuery</a> 及 <a href=\"https://link.zhihu.com/?target=http%3A//zeptojs.com/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Zepto.js: the aerogel-weight jQuery-compatible JavaScript library</a> * <a href=\"https://link.zhihu.com/?target=http%3A//underscorejs.org/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Underscore.js</a> # 数学计算 * <a href=\"https://link.zhihu.com/?target=http%3A//www.jstat.org/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">jStat : a JavaScript statistical library</a> 统计算法…', '1369487035');
INSERT INTO `answer_table` VALUES ('101', '97', '94', 'oldj 的文章:<a href=\"https://link.zhihu.com/?target=http%3A//oldj.net/article/web-doraemon-without-html5-or-css3/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">不用HTML5/CSS3如何在网页上画机器猫</a> 讨论了 DOM 画图的优化问题,算是一个 web 前端特有的问题吧: 虽然计算机图形学已经非常成熟,但使用 div 在网页上画图(下面称之为“DOM 画图”)与传统的计算机图形学还是有所不同,传统的计算机图形学…', '1369907315');
INSERT INTO `answer_table` VALUES ('102', '97', '95', '并不是一个很 general 的库,但是我非常喜欢。很精致用心。当年用 Canvas 做页面特效时用到过: <a href=\"https://link.zhihu.com/?target=https%3A//github.com/gorhill/Javascript-Voronoi\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">gorhill/Javascript-Voronoi - GitHub</a>', '1385748252');
INSERT INTO `answer_table` VALUES ('103', '97', '3212f9044005e9306aab1b61e74e7ae6', '我想题主期待的是举例前端算法应用,而不是具体算法的实现,甚至某个数学库函。 前端由于面向的是界面及交互实现,所以算法研究和应用确实相对较少。已知的几个需要一定算法应用的领域主要有游戏,编辑器及协同办公,GIS(地图),阅读器排版等。 除了这些比…', '1414080067');
INSERT INTO `answer_table` VALUES ('104', '97', '96', '数据可视化 <a href=\"https://link.zhihu.com/?target=http%3A//d3js.org/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">d3js.org/</span><span class=\"invisible\"></span></a> 游戏引擎 <a href=\"https://link.zhihu.com/?target=https%3A//html5gameengine.com/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://</span><span class=\"visible\">html5gameengine.com/</span><span class=\"invisible\"></span></a>', '1446952656');
INSERT INTO `answer_table` VALUES ('105', '98', '579c732d98e3797028793bb456af7b2b', '第一 CSS篇 1. 2个小时的时间去看html\n 就学会<html><head><body><div><lable><input><p><input>就够了2.4个小时的时间去看CSS \n 就学会 color,position就够了,花点时间看一下盒子模型3.2个小时的时间,开始写一个九宫格的小程序\n 很简单,用Div,画出九个格子,心情好就随便给点颜色4.2个小时的时间,去配置一下Nginx\n 很简单,配置好了之后就可以在PC上打开,也可以在手机上访问了5.4个小时的时间,去学习一下 px,em,rem和百分比。\n 确保不同手机屏幕下看到的九宫格比例不失调,学习一下自适应。6.2个小时的时候,学习一下Chrome的F12\n 感受一下盒子模型,学习在F12下调试,看大小,更改值,看盒子宽度什么的。7.花8个小时的时候去学习各种居中8.花4个小时的时间去学习制作表单\n 很简单的表单,登录注册就行,学会Placeholder.9. 花4个小时的时间去学习制作导航栏10.NND,忘了说了,在6条的时候就应该学会Svn或者是Git,去买一台服务器,把自己的代码放上去。 学习使用源码管理工具。11.花4个小时的时间去练习清除浮动12.花2个小时的时间去学习PS的切图。13.花4个小时的时间去理解雪碧图。14.花8个小时间的时间去找一个PSD的源文件,然后去做出一个整站的完整页面。15.花8个小时的时间,去把这个页面做成响应式的。16.花16个小时的时间,将这个网页的内容全部左右调换反转。\n 检查自己的命名,样式是否能够胜任PM异想天开的思路。17.花4个小时的时间去学习前端编码规范和命名规则18.花4个小时的时间去学习各种弹框19.花16个小时的时间去学习一下Bootstrap20花8个小时的时间去用Bootstrap把之前的页面全部重写。21 花4个小时的时间同样的把页面元素全部左右反转。22.花8个小时的时间去学习Less,用Less来重写你之前的任务23.花8个小时的时间学习一下Flex布局24.花48个小时的时间去完成一个完整的PC端25.花48个小时的时间去完成一个完整的H5.第二 JS篇好吧,开始更新JS篇。1.在CSS结束之前,准备学JS之后,就去看JS的基础语法,推荐的哪本书我忘记了,修真院官网有。每天看1个小时,10天左右就差不多了。2。JS语法的基础部分,可以分成三大块。第一部分 数据类型,变量 ,函数,控件语句。预计30分钟到60分钟之内。3。第二部分 Dom操作,先从简单的input,div,label开始,不需要学会太多,知道不懂的去百度,学会读和写,预计30分钟到2个小时之间。4。第三部分,Ajax。学会Http的请求和响应,Json数据格式,异步和同步,超时这些基本的概念。预计在4个小时到16个小时之间。5。如果以上学的都不好,没关系,知道不懂哪里查就好。然后花2天左右的时间,实现九宫格随机变换颜色。6。再花5天的时间去实现一个简单的杀人游戏简化版分配角色的规则,给一个框输入总人数,然后依据杀人游戏的规则给每一个人随机分配角色。未完待续', '1479010469');
INSERT INTO `answer_table` VALUES ('106', '98', '665a97a08e0e75728de236f402ab6afe', '<b>大家都是从小白走过来,每个人的轨迹不一样。冒昧说一下个人看法</b> <i><b>自学</b></i> 如果有耐心的话,可以看看w3cschool的教程<a class=\" wrap external\" href=\"https://link.zhihu.com/?target=http%3A//www.w3school.com.cn/\" target=\"_blank\" rel=\"nofollow noreferrer\">w3school 在线教程</a> 下面标红的地方,可以按照顺序看看。 <i><b>but....</b></i> 我知道多数人肯定没有耐心一个一个看下去,而且看完这些确实也比较累。 最主…', '1470842108');
INSERT INTO `answer_table` VALUES ('107', '98', '3b605168b3f37e97e32c6eae0b5b09e7', '不答题,我就是顺手撕个搞小白培训的抠脚大汉。 这种字里行间等于是告诉你“我是骗子,我是抠脚大汉,我在为培训班攒傻×”的回答,也是可以有人上当的。 你以为剪裁一下就搜不出来了?你以为搜图是逐个像素对比吗?你以为大家都用百度吗? 还动辄“小女子…', '1475863235');
INSERT INTO `answer_table` VALUES ('108', '98', 'fea2f801ab1dc87a87f8bdeb6fdb3394', '不要谢我~~~,不要放弃~~~ 在完整APP的迁移之后,终于可以好好写这些内容了。第一篇就是对之前的《<a href=\"https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMjM5Mjg4NDMwMA%3D%3D%26mid%3D2652973793%26idx%3D1%26sn%3D82419c590579b4013606a39392492c17%26scene%3D21%23wechat_redirect\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">前端技能图谱</a>》进行一些细致的解释。当然这些是个人的经验,所以可存在一些区别,不过总的来说还是差不多的。 入门 在我理解下的基础知识,就是我们可以写一…', '1478837598');
INSERT INTO `answer_table` VALUES ('109', '98', '579c732d98e3797028793bb456af7b2b', '<b>第一 CSS篇 </b> 1. 2个小时的时间去看html\n 就学会<html><head><body><div><lable><input><p><input>就够了2.4个小时的时间去看CSS \n 就学会 color,position就够了,花点时间看一下盒子模型3.2个小时的时间,开始写一个九宫格的小程序\n 很简单,用Div,画出九…', '1479010469');
INSERT INTO `answer_table` VALUES ('110', '98', 'e1a2fdeacec4aa2181442238f9404301', 'v1.0 基础版v1.1 选择编程系统化学习方法请参考:<a href=\"https://www.zhihu.com/question/19578287/answer/157148072\" class=\"internal\">如何学习编程? - 知乎</a>v1.2 如果你是零基础,不妨先看下这篇:<a href=\"https://www.zhihu.com/question/19637373\" class=\"internal\">零基础开始学 Web 前端开发,有什么建议吗?</a>v1.3 选择编程语言请参考:<a href=\"https://www.zhihu.com/question/23016465/answer/169041683\" class=\"internal\">程序员学哪种语言最好? - 知乎</a>这个问题不够准确,你当然是为了找到工作…', '1491814828');
INSERT INTO `answer_table` VALUES ('111', '99', '0', '就h5培训来说,足以说明两点:1、前端太火了。2、是个人就拉几把桌子开始讲课。3、开班不为钱,你TM是圣人啊。4、培训来说所有做IT培训的,起初都一个模式起步,搭伙或者老板自己上课,就夫妻老婆店模式。5、最后全部一个通病,具体什么病呢往下看。6、IT业充斥了一大堆低水准的入门者,拉低整个技术的薪资。7、最后IT就是个东莞妹一样的靠青春吃饭的行业。IT培训公司的通病有几点:一、技术人员既是老板也是讲师还是客服 这是绝大多数IT培训公司的起步模式,就是所谓的“夫妻老婆店”模式。学员去参加培训后会产生中国传统的一种师傅徒弟的情节,徒弟会反对师傅吗,就算是个草包师傅。你妹的,都什么年代了,居然还有这种心态。二、技术人员的通病,自以为是,“天下老子水平最靠谱”技术是日益更新的,常年的讲师工作还能跟得上技术的步伐吗。脱离项目开发,最后井底之蛙。老板就是讲师的模式,造成技术知识面相对窄,别跟我说全能,全能的人不在培训公司。三、绝大多数IT培训公司发展初期都是盈利的,势必使其看到了钱的味道低成本运作,就跟一楼的广告是一个德行,培训公司的成本:讲师薪酬,场地物业费用,少量市场运作,别跟我谈口碑,弄得好像口碑是没成本似的,隐形成本会计算吗,刷贴你也得有帐号,不是购买就是自己买一堆手机号注册,要么就是发动朋友帮忙,这些都是成本,只是成本绝对值是多少而已。既然有钱的诱惑力,就开始扩张。四、发展中期开始扩张规模钱的诱惑是任何人挡不住的,开始扩张规模,却忘记了培训是个服务行业,客户支付费用,产品是周期性的交付,是个长期过程,不是一手交钱一手交货的买卖。既然扩张了,而且培训产品需要长时间的交付过程,那么都带来的一个毛病就是师资团队没有跟上,创业初期的兄弟或者夫妻老婆店模式是个松散的管理模式,根本没有企业化。造成后果就是 服务质量无法保障,甚至段时间内突然爆发质量问题。五、发展开始有规模之后就想做行业老大新东方知道吧,人家规模够大吧,你们知道他在行业的占比份额是多少吗,低的吓人,知道为何吗?培训行业是个低门槛的行业,跟一楼一样,拉几个人弄个小房间就开始上课了。培训行业有个无法逾越的问题,地域,时间的限制。想发展做老大的只有一种可能,就是资本运作,在培训公司里,作为企业模式运作最成功的就是某内,别看口碑已经臭不可闻,但是人家有钱啊,市场费用高的吓人,反正中国的培训行业规模足够他去慢慢吃了。既然没有资本运作,却又想做大,那么就没钱组建高水准的师资 服务 团队。就算投入一定的市场费用,那么带来的问题无非两个,被前几名有规模的培训公司搞,怎么搞你,很简单的,刷负面啊,这个是最要命的,因为你规模还没有足够大,所以影响会非常大,而看看某内,负面那么大,却照样过着自己日子,这就是资本运作后以最短时间占有市场份额,10个人里面8个看到负面的,6个离开,那么还有2个会继续成为某内的客户,再加上另外2个消息不灵通的,这个道理简单吧。所以,别想着做大,而是做深,IT技术不存在淘汰,只存在更新和应用场景的变化。一楼的不是做前端的吗,知道前端里的js能做什么吗,难道就是页面交互?知道js能用在嵌入式设备和物联网吗。六、培训公司的管理混乱,技术化管理水平及其低知道场地利用率的概念吗,北京的几个号称如何好的口碑培训机构,居然还在用人工考勤学员的出勤,临时停课居然要打一堆电话通知学员。真够讽刺的,做IT培训居然还在用这个方式。自己都不重视技术,还做技术培训,真TM服了。最搞笑的就是 课后作业,QQ 传文件,都2016年了,居然还用这个方式。七、培训课程是一种非标准化产品,无法让客户做到直观或者客观的评价同样一个菜,几个人吃,有的人喜欢有的人就会觉得不好吃,这个跟培训上课一个道理,既然是非标产品,那么客户群体应该是小众化,而不是大众化,除非培训是跟吃饭一样的重复消费的产品,否则老老实实做小众化吧。要么就跟某内一样,请几个名师录播课程,然后几十个学员坐着看视频。这就是某内成功的地方,别人认为是缺点,却没看到非标化产品被他们做成了标准化产品。这就是做生意。先写到这,继续看王宝强的淫牌 有什么新的爆料。=======================继续================================八、培训公司讲师角色责任的混乱创业初期,讲师是团队的核心,承担各种职责,其他到了一定规模之后,开始划分各种职能部门,讲师的失落感开始出现,早期,讲师可以决定整个产品交付的步骤,而后期职能部门的成立切割了其除授课之外的所有权利:决定谁能复读,学费打折,教学质量的评判,上下课时间,课程大纲,上课进度,出勤考核等等。。,没有了那么多的权利,薪资又没涨,初期那种合作创业模式的激情已经没有了,考虑的更多是个人的得失,如果加薪能解决问题,那还算正常,但是加薪往往已经没有多少作用了。所以很多it培训公司,特别是中等规模的,出现学生对讲师非常大的意见,绝大多数并非是讲师的能力,而是讲师已经开始带着对企业的不满情绪来授课了。讲师无法摆正自己位置,那么最后的结果无非就是分家,it公司这种现象太普遍了。九、不加筛选的招生带来学员素质的参差不平,it培训的对象现在是没有任何限制的,机会所有培训公司都是如此,但是it人员的基本要求却又是有底线的。逻辑能力、数学、英语、计算机操作能力等,0基础就能学,这个没有错,但是这个0基础指的应该是it开发基础是0,而不是初中生的基础(只有极少数有这种潜质做开发),一个班四五十个人,中间出现无法跟上课程的情况非常普遍,这就会出现学员认为讲师上课水平太差的认知,而这些学员中某些自卑心较重的,他们不会认为自己不合格,这是人的一种正常心理反应,那么这些人就会找地方宣泄,而方式无非就是在网络上发布一段:千万别来xxx,这里就是个坑,谁来谁知道。而一个正常的,有基础素养的学员,遇到无法跟上课程的情况,一般都会直接跟客服或者管理教务的人反应,提出是否补课辅导或者给资料自己,或者直接要求退学退费,有时对讲师的意见非常大而培训公司又不去解决,那么这部分学员就会自发形成一个小团体抵制讲师,最终让培训公司替换讲师。很少见到有培训公司通过预科制度筛选学员的情况,而这种做法其实是非常好的。十、培训公司与学员的关系维护太简单从培训公司学成离开的学员,只有极少部分在日后会与学校保持长期联系,培训公司是否想到过,你的学员所在企业,也许将来就是你输送新人的地方呢。培训公司永远认为 课程 是产品,殊不知 学员才是你的产品,培训公司就像一个工厂,讲师是生产工具,新进的学员是生产原料,当学员离开培训公司后,学员就是个合格的产品,这个产品的质量是由用人企业去评判的,质量决定了口碑销量。', '1471360830');
INSERT INTO `answer_table` VALUES ('112', '99', '8f5fef858fd685f8ce2bca33cef13a2d', '时隔一年多再次看到这个问题可以说感慨万千,我来重新来回答这个问题如今我的培训班已经成为知乎上被各路业内人士推荐最多的个人前端培训品牌我的培训班为学生配备了<b>人体工学椅</b>,<b>我几乎每天晚上到教室答疑</b>,包含住宿,学费便宜,<b>并且敢让学员免费试听三周甚…</b>', '1471360274');
INSERT INTO `answer_table` VALUES ('113', '99', '0', '就h5培训来说,足以说明两点:1、前端太火了。2、是个人就拉几把桌子开始讲课。3、开班不为钱,你TM是圣人啊。4、培训来说所有做IT培训的,起初都一个模式起步,搭伙或者老板自己上课,就夫妻老婆店模式。5、最后全部一个通病,具体什么病呢往下看。6、IT业…', '1471360830');
INSERT INTO `answer_table` VALUES ('114', '99', '665a97a08e0e75728de236f402ab6afe', '本来不是\"一楼\"的,默默爬到了最前面,躺枪啊 2016.08.19更 ——————————————————————————————————————————<b> 培训机构最大的问题是讲师和管理; </b><b>讲师: </b><b>什么人都能随随便便做讲师?</b>甭管您是阿里的高p,还是百度的高…', '1471461252');
INSERT INTO `answer_table` VALUES ('115', '99', 'b7d046ace778e0cf3288d735b4900adb', '培训是让你进入这个行业的敲门砖,具体的还需要靠自己去积累才行。要说培训的效果,但凡是自己努力学了那么肯定是有效果的。出去上班工作是没问题的。我看到有很多人说不要培训出来的人充满了一个鄙视的态度。我觉得这样是没必要的。每个人都有追求好的权利。', '1493369546');
INSERT INTO `answer_table` VALUES ('116', '99', '58e2f483413205f53068eb1b8dfa8aaa', '从业人员毫不留情来答一波,如果蛋哥我被乱棍打死,请记得给我申冤啊。拿我的五十米的大刀来,开始挥舞。1.招转。投简历-面试-小黑屋开始打压-说你不合格-给你一个难得的培训的机会-机不可失失不再来,要学习抓紧啦;2.先就业后付款。纯粹就是贷款模式,没…', '1515395283');
INSERT INTO `answer_table` VALUES ('117', '101', '596c0a5fdd9b36cea06bac348d418824', '你想知道的都在这里:w3c/html', '1484125445');
INSERT INTO `answer_table` VALUES ('118', '101', '596c0a5fdd9b36cea06bac348d418824', '你想知道的都在这里:<a href=\"https://link.zhihu.com/?target=https%3A//github.com/w3c/html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">w3c/html</a>', '1484125445');
INSERT INTO `answer_table` VALUES ('119', '101', '100', '原来说的H5时代貌似没有来临。', '1485054645');
INSERT INTO `answer_table` VALUES ('120', '105', '102', '这个问题的基本思路是使用webrtc的getUserMedia接口获取摄像头,然后使用MediaRecorder接口(https://github.com/webrtc/samples/tree/gh-pages/src/content/getusermedia/record,https://developers.google.com/web/updates/2016/01/mediarecorder,https://developer.mozilla.org/zh-CN/docs/Web/API/MediaRecorder)录制,最后将录制的视频分片上传。stackoverflow上有类似的问题:http://stackoverflow.com/questions/16571044/how-to-record-webcam-and-audio-using-webrtc-and-a-server-based-peer-connectionGitHub上有类似的库可以参考:https://github.com/streamproc/MediaStreamRecorderMediaRecorder接口的坑在于各个浏览器的实现不一致:Chrome只能分开录video和audio,Firefox可以video和audio一起录制成webm格式,opera用的chrome内核,所以和chrome的行为一致,剩下的浏览器就不说了。所以你在服务器端是要对录制的视频进行处理的,比如chrome的视频就要合并。服务器端对视频的处理可以用ffmpeg。如果想在生产上使用,推荐实时猫的私有云服务,提供完备的录制功能和统一的接口。', '1474202755');
INSERT INTO `answer_table` VALUES ('121', '105', '4663b1a9e846eed47c02c574c49bb6d8', '这个问题的基本思路是使用webrtc的getUserMedia接口获取摄像头,然后使用MediaRecorder接口(<a href=\"https://link.zhihu.com/?target=https%3A//github.com/webrtc/samples/tree/gh-pages/src/content/getusermedia/record\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">https://github.com/webrtc/samples/tree/gh-</a><a href=\"https://link.zhihu.com/?target=https%3A//github.com/webrtc/samples/tree/gh-pages/src/content/getusermedia/record\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">pages/src/content/getusermedia/record</a>,<a href=\"https://link.zhihu.com/?target=https%3A//developers.google.com/web/updates/2016/01/mediarecorder\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://</span><span class=\"visible\">developers.google.com/w</span><span class=\"invisible\">eb/updates/2016/01/mediarecorder</span><span class=\"ellipsis\"></span></a>,<a href=\"https://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/API/MediaRecorder\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">https…</a>', '1474202755');
INSERT INTO `answer_table` VALUES ('122', '105', '103', '最新chrome禁止了getUserMedia()方法,只接受https认证的网址或者127.0.0.1在你自己电脑上玩所以只能在火狐上玩:<b>开摄像头</b>navigator.getUserMedia({video: true}, function(stream){//←这个就是你想要的视频流\n startRecording(stream);//录制\n }, functi…', '1491471476');
INSERT INTO `answer_table` VALUES ('123', '105', '104', 'upload_vedio() 这个方法该如何实现', '1507600385');
INSERT INTO `answer_table` VALUES ('124', '108', '0', '<转自开源中国>原生手游市场已是红海,腾讯、网易等寡头独霸天下,H5游戏市场或将成为下一个风口。据笔者所知,很多H5游戏开发团队由于选择引擎不慎导致项目甚至团队夭折。如何选择适合团队和项目的引擎,笔者通过学习和项目实践,总结微薄经验,供大家参考,非技术人员也可以将本篇内容作为引擎选择的重要关注点。选择H5游戏引擎的思考维度1、开发语言的支持2、2D、3D、VR的支持3、性能4、引擎的应用广度5、设计理念6、工作流支持力度7、商业化成熟案例8、学习资源与技术支持能力首先,我们要知道,当前主流的游戏引擎有哪些。由于H5引擎有很多,笔者在这里进行了精心的筛选,过滤掉不支持webGL的引擎,以及封装了第三方渲染内核的JS框架,和不能直接在浏览器中运行的JS引擎。为什么要过滤掉这几种呢,首先,没有自己的渲染内核,仅仅是基于第三方的内核作的API封装,笔者很担心可持续的性能优化和维护能力。另外,不能在浏览器中直接运行的JS引擎,将限制H5游戏跨平台的交互能力。还有, 笔者非常看好webGL模式,认为webGL模式才是H5引擎的未来。原因有几点:第一、性能,webGL模式远超Canvas数倍。DOM模式就不适合用于真正的游戏开发,更不用提。第二、3D方向,webGL模式理论上可以制作2D和3D游戏,Canvas和DOM模式下只能制作2D游戏。第三、普及率,webGL的普及率已经非常高了,尤其是支持webGL的腾讯TBS-Blink内核已在4月19日发布,并逐步在微信、QQ空间、QQ浏览器、手机QQ等APP中采用静默安装方式全面升级。这个普及率在国内带来的影响,;你懂的……1、选择H5游戏开发语言拥有广泛开发者的H5游戏开发语言共有三种,分别为Flash AS3、TypeScript、JavaScript。其中Flash AS3、TypeScript均属于面向对象的高级脚本语言,通过编译器将原项目代码编译成JavaScript代码文件运行于浏览器之中,面向对象的高级语言无论是项目开发管理,还是项目开发的工具环境的成熟度都明显优于JavaScript脚本语言,尤其是中大型项目方面,AS3等高级语言的效率会更高。从上图看出,支持JavaScript语言的引擎更多,由于AS3语言的编译器为Layabox引擎推出的,因此采用AS3作为开发语言的仅有Layabox引擎。笔者建议在开发中大型游戏项目的时候,采用TypeScript或者是Flash AS3语言进行开发。如果是小型游戏,任选其一即可。2、引擎的未来延续能力选择一个引擎,并不是简单的认为,满足眼前够用就可以了,引擎的未来延续能力也是很重要的,这个项目是2D,下个项目想开发3D,如果引擎不支持怎么办?去换个引擎?如果VR的机会来了,再想发布VR版本,这个引擎不支持,需要重新开发吗?等等问题,作为开发者尽可能要提前想好。通过上图,可以看出,即便是在支持webGL的H5引擎里,有只面向2D游戏的,也有只面向3D游戏的,同时支持2D、3D、VR的H5引擎,从目前看只有Layabox与Egret引擎。3、性能是核心需求性能是H5游戏面临的核心门槛,也是很多H5游戏不被专业玩家认可的重要原因之一。游戏卡顿,不流畅,这样的产品体验很难在激烈竞争中生存下来。H5产业早期的普及阶段即将过去,游戏品质在迅速提高,品质中包括精细的美术和炫酷的动画等。在复杂的游戏项目面前,上述种种元素,其流畅体验度对游戏引擎是极大的考验。所以选择性能优秀的引擎是保证品质的最重要基础,一定要谨慎。在游戏项目研发开始时,一定要先对复杂的模块做DEMO测试,特别是带背景滚动的游戏。比如横屏卷轴游戏,对帧数稳定性要求极高,如果满足不了性能上的需求,可能会带来眩晕、眼花、疲倦等不良体验。在webGL的2D渲染性能方面,pixi.js的性能处于当前的顶级。在webGL的3D渲染性能方面,Three.js非常优秀。在runtime方面Cocos2d-js也有着原生级的表现,经过对比,笔者认为Layabox性能的综合实力最强,在各个渲染领域都保持在HTML5引擎的顶级水平。当然,上图仅作为参考,对于任何号称某个引擎性能最牛的论调,一定要亲自进行性能DEMO的测试对比,而不要轻易采信。由于性能是游戏最核心的需求,笔者这里再多说一句,大型项目在系统复杂度、UI复杂度、动画显示数量和种类等方面与小型游戏项目完全不在一个量级。会涉及到比小游戏更复杂的性能优化、内存管理、资源管理等需求,如果选择了小马拉大车的低性能引擎,项目夭折可能性非常大,除非最后项目开发者花大量时间自己优化引擎。所以性能差一点,就会导致结果差很多,不可主观想象。4、与引擎的应用广度随着H5游戏品质提升,在其他领域也具备一定的竞争力和价值,一次开发可发行各个领域版本,已成为日渐明确的需求,这里面包括发行原生APP手游和PC的flash页游需求,大统一的引擎时代即将来领。目前最火爆的H5游戏《传奇世界H5》据说有40%的收入来自PC网页。发布PC页游时,由于PC浏览器目前对HTML5兼容性不足70%,用户损耗很大,页游联运平台可能会拒绝或放量很少,只有采用能同时发布Flash版本的引擎,才能解决这个问题。5、设计理念与定位设计理念是个比较大的话题,也是个很重要的引擎选择因素,比如引擎是要专注移动端,还是要面向全平台多端游戏市场。是注重性能,还是注重工具链等等。深入了解不同引擎的理念与定位,才能更好的与游戏产品进行结合。上图内容仅作参考,详情建议去各引擎官网深入了解。6、工作流支持力度作为商业级开源引擎,工具链的提供与支持也是一种选择考量要素,比如UI编辑器、粒子编辑器、骨骼编辑器、场景编辑器等等,如果引擎方直接提供或支持,那么将会较大的提升研发效率。本文中提到的7个引擎,只有Egret、Layabox、Cocos2d-JS这三个引擎,在工具链方面提供足够全面的支撑。7、是否有成熟的商业案例怎么证明引擎是成熟的?一定要有成熟的商业案例,一般引擎的官网上都会有游戏案例介绍,我们在选择引擎之前要进行深入体验,包括:商业案例的数量、商业案例的种类、稳定性、流畅度(要在低端机里体验)、项目复杂度、项目相似度等。如果有一些大型成功案例背书会相对安全可靠些。从目前的行业案例来看,Layabox引擎的MMORPG《醉西游》、重度动作游戏《猎刃2》、大型模拟经营游戏《梦幻家园》等无疑是H5引擎技术的最高水准代表作。但是从卡牌、挂机等类型的付费游戏总体数量来看,Egret引擎明显占优,充分说明该引擎的市场宣传力度更胜一筹。8、学习资源与技术支持能力能提供什么样的学习资源,以及技术支持,对于开发者也是重要因素,如果你是技术大牛,只想使用轻量的第三方渲染内核。那么2D游戏,pixi.js无疑是首选。3D游戏,笔者推荐Three.js。但是这两种引擎的学习资料都比较稀少。笔者认为学习资料的完善,以及在学习过程中的技术支持力度,将会很大的帮助你解决引擎使用中的问题。所以,API完善,DEMO完善,文档完善,社区的响应速度,交流氛围,以及QQ技术支持等,都可以作为你选择引擎的因素考量之一。9、页游移植产品的引擎选择目前像《醉西游》等优秀H5产品是Flash页游或手游移植而成,移植类的产品在选用引擎时要注意,代码是否可以直接移植?如果可以,那将节省大量的开发成本。比如Flash AS3开发的2D或3D页游或手游,可以把逻辑与算法代码直接拷贝移植到Layabox引擎项目中,开发速度提高数倍。写在最后:最后提醒一下,千万不要相信某些引擎的单方宣传,一定要花一点时间去研究实践,亲自制作DEMO去作一作对比,动手体验到的才是真理。针对DEMO测试笔者有几点建议: 1、采用一个复杂的UI,特别是复杂列表,比如说没有分页的背包列表,背包里放上不同的道具图片,测试滑动时的流畅度,这块比较考验性能,元素越复杂,数据越多,尤其能对比出来性能上的差异。 2、包含最复杂战斗部分,不要写战斗逻辑代码,不然会花的时间太长,只需要把战斗相关的动画和复杂的元素放在场景中模拟即可,因为H5游戏性能瓶颈通常在于画面的显示。 3、 测试主要目的是看项目在引擎中性能,这是最至关重要的,所以,硬件上,我们要选择低端安卓手机(比如红米)进行测试。软件环境建议使用微信环境测试,首先,因为微信公众号是H5的主要渠道之一,其次,微信当前的H5性能低于chrome浏览器,在恶劣的环境下更能测试引擎的优劣。', '1465012070');
INSERT INTO `answer_table` VALUES ('125', '108', '0', '选择一个引擎,你要从几个标准来看 1、语言层面 你是Flash程序员还是typeScript更精通,如果你是Flash程序员,那么肯定是优先选Layabox引擎,因为他是支持直接用as3语言开发的,其它引擎再怎么模仿和直接支持还是有差异的。如果你是typescript,可以考虑试一…', '1448531681');
INSERT INTO `answer_table` VALUES ('126', '108', '106', '选择一门技术或一款引擎,需要考虑一下几点: 1.是否可以继承旧有的技术与知识。 2.当前市场的占有率。 3.引擎制作团队的资金与技术积累 3.引擎制作团队的未来规划。 下面我们展开来说,首先我相信你心里其实已经有一种选择了。 如果从技术实现方面去考虑,…', '1449113410');
INSERT INTO `answer_table` VALUES ('127', '108', '0', '对我来说,一般我要考虑以下几点: 1、是否开源 (遇到问题好排查) 2、是否对非flash开发人员友好 (本人没搞过flash,对flash的玩意一窍不通) 3、周边工具是否齐全、好用 (提升开发效率) 4、市场占有率 (人多好交流,引擎成熟更快) 5、性能 (最终产…', '1461895333');
INSERT INTO `answer_table` VALUES ('128', '108', '0', '<转自开源中国>原生手游市场已是红海,腾讯、网易等寡头独霸天下,H5游戏市场或将成为下一个风口。据笔者所知,很多H5游戏开发团队由于选择引擎不慎导致项目甚至团队夭折。如何选择适合团队和项目的引擎,笔者通过学习和项目实践,总结微薄经验,供大家参考…', '1465012070');
INSERT INTO `answer_table` VALUES ('129', '108', '107', 'flash和h5本来就不是一个东西,为什么非要去兼容? 方向就有问题。 好比现在做的东西非要去兼容ie6, 再过几年真的还需要兼容吗?? flash被淘汰是很明显的,再牛逼的hero也无法逆转历史的洪流!!', '1470632821');
INSERT INTO `answer_table` VALUES ('130', '113', '109', '俄罗斯方块的精神续作。同样使用多格骨牌作为基本单元,除了一个单格骨牌外,其他均为四格骨牌,且与俄罗斯方块的骨牌在结构上有半数是相似的,如图所示。俄罗斯方块的骨牌:Hex FRVR的骨牌:玩法上的相似之处无需赘述,区别在于,俄罗斯方块牺牲了二维平面的一部分可能性以实现下落效果,给玩家一种时间上的紧迫感,因此俄罗斯方块的节奏较快。而Hex FRVR则相反,虽然基本元素只有六个,但是六边形组成的色谱图似的二维空间的可能性是四边形网格所无法企及的。由于没有下落机制,Hex FRVR的节奏较慢,因为复杂度更高,所以这样的设计能给玩家更多的思考空间,很合理。如果拿已有的游戏类型来类比的话,俄罗斯方块是RTS,而Hex FRVR则是回合战略。音乐舒缓优雅,与游戏轻松写意的节奏很搭配,躺在懒人沙发上用手指拨动色块,旁边放一杯咖啡,就这样消磨一个下午吧wPS:N连消之后触发的语音有点让我出戏。', '1444670592');
INSERT INTO `answer_table` VALUES ('131', '113', '110', '说个真实的故事: 几十天前的早上有幸碰到了这游戏的作者Chris Benjaminsen,他做H5游戏,混kik。他在kik群里发了个测试链接(这游戏是H5做的),玩了20分钟差点迟到。然后给他提了几个建议。还发给了几个好友玩(当时应该还是个内测地址吧...) 没想到这哥…', '1444652746');
INSERT INTO `answer_table` VALUES ('132', '113', '00fb070b01b5adcb4d1ee94884e353a4', '俄罗斯方块的精神续作。 同样使用多格骨牌作为基本单元,除了一个单格骨牌外,其他均为四格骨牌,且与俄罗斯方块的骨牌在结构上有半数是相似的,如图所示。 俄罗斯方块的骨牌: Hex FRVR的骨牌: 玩法上的相似之处无需赘述,区别在于,俄罗斯方块牺牲了二维…', '1444670592');
INSERT INTO `answer_table` VALUES ('133', '113', '111', 'bgm莫名带感! (๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅) (咦', '1444745733');
INSERT INTO `answer_table` VALUES ('134', '113', '0', '点开游戏忘了题', '1444763622');
INSERT INTO `answer_table` VALUES ('135', '113', '112', '刚写了一篇Hex FRVR的游戏测评文章,大家可以看看。个人觉得比俄罗斯方块好玩多了 <a href=\"https://link.zhihu.com/?target=http%3A//nzzrdt.com/app/1393.html\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">nzzrdt.com/app/1393.htm</span><span class=\"invisible\">l</span><span class=\"ellipsis\"></span></a>', '1503905231');
INSERT INTO `answer_table` VALUES ('136', '119', '114', '从个人最近的研究观察和私人接单的情况看来,H5页面设计已经不仅限于微信广告,其实H5现在替代的是整个移动端用户前端交互的“界面”和载体,除了广告,可能还有各种minisite,活动落地页,内容轻博客,游戏等等,某种程度上替代了原生App的部分功能和应用,所以我一直当H5是一个产品来做进入重点,做H5需要学什么?1、交互设计 用户体验跟交互设计,用户体验有关的概念非常多,比如UID、UED、UCD、HCI、GUI等等,这里主要介绍三个主流的概念UID、UED、IxD。UED(User Experience Design),即用户体验设计,侧重用户在每个环节中对产品的体验。用户与产品的每一次交互,在产品上停留的每一秒中,都是用户“体验“,你需要深入产品和用户的场景中,设计每一个体验节点。因此用户体验设计师其实有点产品经理,通常需要参与到产品的前期规划、设计、开发、测试和迭代的过程中,能力构成上主要掌握各种用户研究方法和设计思维,通常不需要很高超的图形设计技能,但要有较强的审美和设计分辨能力。UID(User Interface Design),即用户界面设计,侧重具体场景下用户的感官感受,包括触觉、听觉、视觉等,一般以视觉为主。理想状况下,UI设计师要同时也要懂一些UE的知识,不过在业内普遍的定位,UI设计师更注重与图形界面设计,他的工作是将具体的”需求“转化为图形界面,关注的是界面每一个像素的感官体验。IxD(Interaction Design),即交互设计,关注用户与产品的互动本身以及整个用户体验的路径。交互设计师通过视觉、听觉、触觉的动态设计来提升用户体验,同时,需要考虑用户的使用场景和判断用户路径,以此设计和引导用户和产品/界面的互动过程。看起来很专业是吧?其实并没有,说白了就是感觉感觉感觉+逻辑逻辑逻辑,很多人学了十几年都不能成为大师,就是因为两者其一都修炼不到极致,或者两者都平平庸庸。当然如果两者都平庸,但理论水平高,跟人专业BB还是很OK的,而且做出来的东西也还过得去,客观来说,我觉得楼主可以先朝这个方向努力,万一要不小心发现自己很有天赋,可以再多加努力怎么达到专业BB的水平。 千万不要去什么培训公司,没有卵用。基本你要训练三种能力: 审美。不懂设计不要紧,但你要知道什么是好的设计。最好的办法就是找一个设计很牛的朋友,跟他看一样的书、逛一样的网站、关注一样的公众号,坚持一个月保证有效果。具体到H5的话可以重点关注UI、UE相关的设计类内容。主要是在脑子里积累一个关于什么是美的数据库。同理心。产品经理最重要的就是同理心,H5其实也是一个小产品,要考虑用户场景,路径,转化等等。当然很多人都有同理心,但表达出来是否专业就决定了你是否有专业BB的水平,最常用的伎俩就是推己及彼,把自己的感受当成用户的感受,无耻一点可以找几个朋友导向性验证一下,嗯嗯,更有说服力。但切记,要用专业的语言表达出来。核心的思想是你要时刻站在“他”用户的角度看待你眼前一切称之为产品的事物。理论表达。以下推荐一些书,有两个重点:一、模仿作者BB的方式;二、还是要实践一下,包括:平时聊天下意识表达,多下载一些App,按书籍的理论分析它的功能设计、用户路径、交互体验等等,有可能的话用一些工具实现一些想法,比如你提到的互动大师这种工具。书籍清单,排名分先后:入门级书籍写给大家看的设计书(第3版)设计心理学破茧成蝶:用户体验设计师的成长之路设计之下一目了然情感化设计交互设计之路瞬间之美:web界面设计如何让用户心动中阶书籍用户体验的要素超越平凡的平面设计认知与设计细节决定交互设计的成败简单法则网站交互设计模式UCD火花集赢在用户移动设备交互设计锦绣蓝图:怎样规划令人流连忘返的网站自然用户界面设计设计人机界面web表单设计:点石成金的艺术Tapworthy: Designing Great iPhone App移动应用的设计与开发Mobile Design For iPhone And iPadMobile Design and DevelopmentDesigning Interactions用户体验草图设计简约至上触动人心文案训练手册设计师要懂心理学微交互Responsive Web Design至关重要的设计Killer UX DesignThe UX BookDesign is A Job移动互联:用户体验设计指南贴心设计:打造高可用性的移动产品高阶书籍HTML与CSS入门经典(第9版)About Face 交互设计精髓交互设计—-超越人机交互软件观念革命A Practical Guide to Information ArchitectureDesigning for Emotion项目百态★当用户体验设计遇上敏捷Web导航设计Web信息架构—-设计大型网站)Web界面设计★精通Web Analytics2.0★交互设计沉思录用户故事与敏捷方法用户体验度量社会心理学Storytelling for User ExperienceThe Elements of Content StrategyLean UX★Handbook of Usability TestingQuantifying the User ExperienceDesigning the ConversationLean AnalyticsSearch Analytics for Your SiteUnderstanding Your Users★Sketching Drawing Techniques for Product DesignersCard Sorting Designing Usable CategoriesService Design★官方设计指南Google TV Design PatternsGoogle Glass GuidelinesAndroid Wear GuidelinesSafari Web Content GuideAndroid User Interface Guidelines★Touch Gesture Reference GuideApple Human Interface GuidelinesWindows 用户体验交互设计规范看完这些。。。基本不可能,你可以只看每一类的前三本,吃透了基本也有一定水平,专业BB应该问题不大。具体到做出来H5,那就是工具学习:目前个人的标配是 PS/Ai+AE+iH5PS/Ai 做平面,用哪个随便AE做GifiH5做H5的实现iH5网站有课程,自学就行。Ps、AE看兴趣和天赋,半路出家且没有天赋的设计,怎么做怎么low,没有自信就还是找找平面设计帮你作图,你搞实现和交互逻辑设计就行。说了这么多,我发现还有营销、文案、策划没讲,好累。。。这些你自己网上找吧,其实这些跟产品中的同理心是一个道理,简单来说就是 给他们愿意二次传播的 内容', '1452752957');
INSERT INTO `answer_table` VALUES ('137', '119', '3c066c8e259c2f6d319629c79d063f0e', '从个人最近的研究观察和私人接单的情况看来,H5页面设计已经不仅限于微信广告,其实H5现在替代的是整个移动端用户前端交互的“界面”和载体,除了广告,可能还有各种minisite,活动落地页,内容轻博客,游戏等等,某种程度上替代了原生App的部分功能和应用…', '1452752957');
INSERT INTO `answer_table` VALUES ('138', '119', '115', 'David Wang在胡扯些什么?许多年前那个设计和html一个人做的时代眼看着就要过完了,前端技术已然跟设计分割得相当明显,你叫学H5的学什么设计?UI需要多年的视觉修养交互需要工设理念用研需要心理学基础和统计学方法,你以为是花个十天半月就能作为h5的学前…', '1454492566');
INSERT INTO `answer_table` VALUES ('139', '119', '116', '首先谢邀。 每次看到H5,其实我都不知道问主所说的H5是指什么?因为在大天朝的眼里,把这些情况都会称为H5: 页面效果特别炫酷的 Native页面 APP页面也 Hybrid页面 那么问题就来了,这些所谓的H5页面,他们的制作方式、技术方案、交互方式之类的都可以说是不…', '1462329337');
INSERT INTO `answer_table` VALUES ('140', '119', '117', '回应上面 <a class=\"member_mention\" href=\"https://www.zhihu.com/people/5fb0012aa84178c10cabdc95d7f30d08\" data-hash=\"5fb0012aa84178c10cabdc95d7f30d08\" data-hovercard=\"p$b$5fb0012aa84178c10cabdc95d7f30d08\">@大漠</a><a class=\"member_mention\" href=\"https://www.zhihu.com/people/acd41dfe43fcc818e301fef16a0c008c\" data-hash=\"acd41dfe43fcc818e301fef16a0c008c\" data-hovercard=\"p$b$acd41dfe43fcc818e301fef16a0c008c\">@David</a> ,请收起你们冗长的书单,不要用写程序的思维回答此问,这样会吓跑一堆兴趣爱好者。--------------------------------割---------------------------------首先你得懂点设计,或身边有个会画画的妹子总OK吧。其实得能写点文字,好图陪…', '1464815536');
INSERT INTO `answer_table` VALUES ('141', '119', '118', '【艾乐卡】<a href=\"https://link.zhihu.com/?target=http%3A//vveshow.com/plugins/jvveshow-catalog/vve-catalog.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">灵肯互动传播</a> 制作一个H5,其实完全不需要那么复杂的逻辑,现实中的应用场景使用目前的一些免费制作工具也基本满足!', '1465372048');
INSERT INTO `answer_table` VALUES ('142', '120', 'a0a5bb5246fb6320f3a51302c1d6adf7', '1. 人人秀( https://www.rrxiu.net/home#zh )人人秀定位傻瓜级操作体验,除了能够制作简单的翻页H5,还支持各种互动插件,比如照片投票、游戏、微信红包、抽奖、VR全景、答题等功能,功能十分强大。2. iH5(http://www.ih5.cn/ )iH5定位于一款专业级H5制作工具,功能较为强大,用户可以编写代码,但是学习成本较高,不适合不懂代码的初学者。3. Epub360(http://www.epub360.com/)epub360的定位和iH5一样,是一款专业级H5制作工具,企业用户较多,很多功能需要开通年度VIP才可以使用。4. 易企秀(http://eqxiu.com/home)易企秀定位简单翻页模板H5,面向普通用户,用户可以发布模板,模板数量较多。5. Maka(http://www.maka.im/)Maka的主要用户群体是设计师,操作体验较优,功能较少。6. 兔展(http://www.rabbitpre.com/)兔展定位普通用户,操作体验佳,最近上线的psd导入功能挺实用的。7. 70C (http://70c.com/)70C定位普通用户,体验佳,活动比较丰富。8. 最酷网(http://www.zuiku.com/)最酷网主要面向企业用户,费用较高,在互动方面做的较好。9. 云来(http://www.liveapp.cn/)云来和最酷网类似,面向企业用户,费用交高,高级组建都需要成为年度会员才可以实用。', '1452600639');
INSERT INTO `answer_table` VALUES ('143', '120', 'a0a5bb5246fb6320f3a51302c1d6adf7', '1. <a href=\"https://link.zhihu.com/?target=http%3A//www.rrxiu.net/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">人人秀</a>( <a href=\"https://link.zhihu.com/?target=https%3A//www.rrxiu.net/home%23zh\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://www.</span><span class=\"visible\">rrxiu.net/home#</span><span class=\"invisible\">zh</span><span class=\"ellipsis\"></span></a> )人人秀定位傻瓜级操作体验,除了能够制作简单的翻页H5,还支持各种互动插件,比如照片投票、游戏、微信红包、抽奖、VR全景、答题等功能,功能十分强大。2. <a href=\"https://link.zhihu.com/?target=http%3A//www.ih5.cn/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">iH5</a>(<a href=\"https://link.zhihu.com/?target=http%3A//www.ih5.cn/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">ih5.cn/</span><span class=\"invisible\"></span></a> )iH5定位于一款专业级H5制作工具,…', '1452600639');
INSERT INTO `answer_table` VALUES ('144', '120', 'f58b51db40472ec4be18321aeac8ae64', '直接敲代码比较靠谱。可以实现自己想要的效果是多么美妙的感觉啊! ', '1459244986');
INSERT INTO `answer_table` VALUES ('145', '120', '96ef9ce45666cb83cf5cdab4c27cfa97', '现在有很多工具都可以做的,凡科微传单的很简单啊,而且它多了一个模板全部免 费的优点,所以我一般都是用它。<a href=\"https://link.zhihu.com/?target=http%3A//wcd.im/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">凡科微传单_微海报</a> ', '1469515633');
INSERT INTO `answer_table` VALUES ('146', '120', 'ba62a3f949834da4080d7502fc4fd088', '首先感谢排名靠前的几位答主的回答,对我们启发很大。于是部门的几个小兄弟连夜就去把这几个H5编辑器全部试用了一遍,为大家做一点微小的贡献,正所谓“苟利国家..asdjkbwubeqbk”不好意思,言归正题... ( ;´Д`)<b>总之呢,我们一直推崇的就是言必有据。…</b>', '1484803513');
INSERT INTO `answer_table` VALUES ('147', '120', '7a2450423f25f23cd23eda4581eaea5d', '做H5页面用什么软件?没有绝对的回答,任何答案都要看情景,看条件,看目的!<b>一、首先先把这些软件分成2类,专业软件和大众软件</b>,都是工具,但特点也是明显的。专业软件适合深度使用用户,能完成的效果会更加漂亮和自由,但是学习难度也更大。大众软件使用…', '1506053081');
INSERT INTO `answer_table` VALUES ('148', '126', '121', '感觉是广告题呢,大概看了下,所谓 html5+ 不就和 Cordova 差不多么... 流畅度什么的无非就是用 CSS transform 呗,也不用装那么神秘... 虽然 CSS transform 用得好确实可以做出媲美原生的 UI,但要说得仿佛一定要用贵产品才能做到就不厚道了。和 ReactNative 的对比槽点太多,唯一赞同的一点就是长线来说 RN 的意义是逐步下降的。---嗯,又仔细看了看,5+ runtime 在性能方面确实有一些特别的考虑,我收回上面 CSS transform 那一段。基本上总结起来一句话,就是多个 webview。在一些特定的地方,比如列表、下拉刷新,利用一些低版本 Android 上 webview 的滚动性能优于单个元素 overflow: scroll 的性能这一点,用多个 webview 来规避滚动性能问题。这个确实解决了国内 hybrid 开发的一些痛点,但是 webview 方案并不是从本质上解决了 hybrid 性能的问题,难道切屏、滚动、下拉刷新就囊括了所有的『动画效果』了?这也太小看交互设计师了吧。在 webview 内部 5+ 其实和普通的 hybrid 没有什么区别,原本会卡的 HTML5 动画并不会神奇地就不卡了。另一方面来说,这些性能问题其实大部分只在低版本 Android 上面存在,所以这些所谓的性能增强的意义其实也是随着手机硬件的提升在下降嘛... 我觉得 5+ runtime / Native.js 和多 webview 方案思路还是不错的,但是在文案上... 可以少一些『吊炸天』的即视感,语气更平和实在一些。至于 MUI 框架,设计思路实在是比较滞后了,开发体验比较捉急,楼下有人提到了。不过 5+ 并不一定要用 MUI 框架吧,其实我觉得主推 runtime,做 Cordova/RN/NativeScript 的竞争者就好,上层 UI 框架这种东西变化很快,保持灵活性更好。', '1452227655');
INSERT INTO `answer_table` VALUES ('149', '126', 'cfdec6226ece879d2571fbc274372e9f', '感觉是广告题呢,大概看了下,所谓 html5+ 不就和 Cordova 差不多么... 流畅度什么的无非就是用 CSS transform 呗,也不用装那么神秘... 虽然 CSS transform 用得好确实可以做出媲美原生的 UI,但要说得仿佛一定要用贵产品才能做到就不厚道了。 和 ReactNat…', '1452227655');
INSERT INTO `answer_table` VALUES ('150', '126', '122', '赤裸裸的广告贴', '1452230459');
INSERT INTO `answer_table` VALUES ('151', '126', '123', '利益相关:两个都用过,都开发过中等大小的应用 ———— <b>先下结论:MUI是国内优秀的跨平台开发框架</b>,或许是最优秀的 曾用它做discuz论坛通用的app,包括读帖,发帖,评论等一系列内容 优点:简单到不能再简单了,遇到不懂的再看文档完全没问题(都是现成组…', '1452273545');
INSERT INTO `answer_table` VALUES ('152', '126', '124', '谈谈dcloud这一套,rn没有接触。 接触较早, 被html5+和mui两个demo吸引, 然后走上了开发之路。 mui不仅仅是ui框架, 包括了ui,js操作,native封装, mui的ui方面, 像是bootstrap+amazeui+framewor7的糅合, js操作, 简直就是对jquery赤裸裸的抄袭, na…', '1457026288');
INSERT INTO `answer_table` VALUES ('153', '126', '125', 'MUI用过很长一段时间,做过几个项目,RN学习了很长一段时间,正在做项目,应该还是有发言权的。 首先,澄清一下,我说的MUI泛指通过HBuilder 开发App应用,用到了MUI框架、HTML5+等Dcloud的相关技术。 MUI好多人没用过,先说说MUI的实现方式: MUI的核心还…', '1466185112');
INSERT INTO `answer_table` VALUES ('154', '132', '127', '计算机行业很多领域都符合82定律,也就是20%的东西的使用频率占到80%,所以很适合囫囵吞枣,因此我们的重点就是把这20%学起来,而首先要做的就是把这20%的东西找出来。在我看来前端这20%的东西大概就是常用的html标签,css的盒子模型,基本的原生js,以及熟练使用jquery,ajax,常见浏览器的兼容。拿下这些东西意义非凡,一方面证明你适合做前端这份工作,另一方面这些技能能让你找到一份工作。让你能够从容地去学习剩下的80%。总之就是专心对付最重要的东西,那些什么less、sass、angular这类的东西,当你把我之前说的基础打好之后,学习起来畅通无阻,随学随用。最后我觉得最难的就是实践,只有实践才能学到真正的技术,新人很难参与一些有价值有意义的项目,没有这些项目又很难成长,所以自己有项目可参与应该珍惜,没项目应该多造一些有价值的轮子。感谢不点赞的都是耍流氓!!!! 耍流氓!!! 耍流氓!!!一夜之间赞已接近最高票,受宠若惊,决定一不做二不休,把最高赞给夺过来。评论里 @吴林朋友说写个提纲或者专栏,专栏就搞不起了,那就简单列个提纲,以期抛砖引玉。1.html的语法、格式,常用的标签极其作用,理解标签的嵌套,学习使用firefox+firebug或者chrom的调试工具,能够使用这些工具调试html、css、js、断点调试、抓包2.如何引入css、js(有多少种方法,各种方法有什么区别),理解id、class属性的区别,学会css的常用选择器,理解盒子模型(padding,margin,border,width,height,),css坐标系,css布局(position的absolute、relative 、fixed、static),css浮动(float:left、right )和清除浮动(clear),display:inline、block、inline-block、flex3.js的执行顺序,基本的编程基础(变量、运算、流程控制、数组、调用函数、自定义函数、对象)、json、js的dom操作、js的事件机制(委托、绑定、监听,冒泡和阻止冒泡,兼容性),了解ajax的xmlhttprequest及其创建方法(多浏览器兼容)、跨域,明白其工作原理,评论里有朋友说http协议,确实是我疏忽,http协议是web的根本,所以其重要性再怎么强调都不为过,熟悉http协议对web开发的方方面面都有不少帮助,比如理解及使用ajax,比如调试程序、抓取数据等等,不过http是一个很杂很细的东西,内容很多,我建议也囫囵吞枣式地学习,先了解、熟悉简单的,以后在项目中遇到深入点的再进一步学习。4、使用jquery解放你的开发工作,学会jq选择器,修改属性、监听事件、修改css,学会写jquery插件。这一步我觉得可以和第3步穿插学习5、搭建服务器,弄个傻瓜服务器比如wamp,phpstudy等软件,可以一键建立一个apache+php+mysql的服务器,前期可以把你的静态页发布到本地服务器,使用本地服务器配合ajax学习。6、学点服务器端,建议php+mysql。服务器端脚本其实很简单,总结起来就是4个东西:SESSION、COOKIE、Request、Response,结合http协议理解如何从Request取得数据,经过处理后Response给客户端。这就是整个过程。至于mysql也就是基本的sql语句。如何使用php进行CURD操作。这块其实很难总结,基本上以实现业务为主。7、来点框架,理解MVC模式、推荐个比较流行的MVC框架:ThinkPHP,简洁好用不解释,国人弄的,文档和例子什么的非常丰富。写了乱七八糟一堆,大家凑合着看,建议从1往7学习。', '1450250967');
INSERT INTO `answer_table` VALUES ('155', '132', '128', '去学一下seajs grunt FIS等等,我也在学————有些事情我们能做的更极致,为什么不去做呢?', '1424049936');
INSERT INTO `answer_table` VALUES ('156', '132', '129', '是的,学前端的基本都会遇到你这样的问题,要学的东西很多很多,一下子会迷茫其中,不知道该学什么技术,或者说优先去学什么技术。 题主看招聘进行结果导向地学习我是非常认同的,当初我也是看着网易前端的 JD 一条一条去 pass 掉的。至于你提到的 Angular…', '1424067130');
INSERT INTO `answer_table` VALUES ('157', '132', '130', '情况差不多. 我也是二本大四狗. 上年12月份幸运的找了一份前端实习生,在一家创业公司工作.在公司目前只是负责把boss弄的设计图还原成网页.然后整合到wordpress.写写jquery 做做效果. 好吧 说说我找到工作之前的学习吧. 一年前 我也只是个什么都不懂得计算机…', '1424102074');
INSERT INTO `answer_table` VALUES ('158', '132', 'ca5b0b6065bf4388eccfcb5b498be4b9', '计算机行业很多领域都符合82定律,也就是20%的东西的使用频率占到80%,所以很适合囫囵吞枣,因此我们的重点就是把这20%学起来,而首先要做的就是把这20%的东西找出来。 在我看来前端这20%的东西大概就是常用的html标签,css的盒子模型,基本的原生js,以及…', '1450250967');
INSERT INTO `answer_table` VALUES ('159', '132', '131', '看了题主的描述,题主是典型的浮躁入门者的心态。罗列了一堆前端技术栈上的词汇,但是估计你一个都没接触过。看到求职要求上有什么,就想学什么。殊不知,找工作应该是看自己有什么技能,然后去找适合哪个岗位。而不是看岗位需要什么,我就临时去补什么踏踏…', '1501338574');
INSERT INTO `answer_table` VALUES ('160', '138', '133', '正巧我也做过打地鼠,算是游戏中比较简单的一类。地鼠定时冒头(定时器),移动的过程用到动画,用户点击时判断是否击中(碰撞检测),击中效果用到帧动画,大概就这么简单。如果你用 DOM,基本上第三方库都不需要,如果用 canvas,找个开源的 render engine 就差不多了。', '1459758396');
INSERT INTO `answer_table` VALUES ('161', '138', '37b16179eb39f5f21ecf6a6416350639', '正巧我也做过打地鼠,算是游戏中比较简单的一类。 地鼠定时冒头(定时器),移动的过程用到动画,用户点击时判断是否击中(碰撞检测),击中效果用到帧动画,大概就这么简单。 如果你用 DOM,基本上第三方库都不需要,如果用 canvas,找个开源的 render eng…', '1459758396');
INSERT INTO `answer_table` VALUES ('162', '138', '134', '两种方案: 1,使用css,好处是制作快捷,方便做页面适应,缺点是不能深入做效果. 首先得想办法实现地鼠出洞效果,可以用一个div方块做容器,overflow:hidden,地鼠图片在里面上下移动即可,然后需要一张洞在地鼠背后的图片,一张洞在地鼠前面的图片,跟地鼠图片用z-in…', '1459822026');
INSERT INTO `answer_table` VALUES ('163', '138', '135', '我的第一个游戏是手机摇一摇,第二个是打地鼠,第三个是黑白格子,在公司半年下来做了近60款h5的游戏,目前不上班,在家接单,', '1472446511');
INSERT INTO `answer_table` VALUES ('164', '138', '136', '作为新手还是下一个模板套一下就好', '1472550626');
INSERT INTO `answer_table` VALUES ('165', '138', '137', '推荐一个完全免费不受人数限制的小游戏制作 (之前用过好多个平台,凡科、赢销+之类的,发现,玩家数超过某个值是要付费的,或者是注册完了之后,那边的营销经理就反复打电话过来谈合作之类的,吓得我直接拉黑。所以当我遇到下面这个平台的时候,简直感动到…', '1487733023');
INSERT INTO `answer_table` VALUES ('166', '142', '72d26f9f0c7c6d0b2bab73418c595c6b', '实际项目写CSS是这样的,有个idea,但不知道或者忘了具体CSS该怎么写,于是Google一下,找到一些东西,比如常见的CSS Tricks网站上有很多整理好现成的代码可用,然后在Devtools里面试一试效果,能解决大部分的CSS编程问题。所以其实并不需要一个月,网上搜一搜理解CSS的核心概念,比如选择器(selector),伪选择器(pseudo selector)和级联继承(cascading)是如何工作的,然后配合搜索引擎和devtools,用不了一个月。Transcending CSS: The Fine Art of Web DesignCSS3: The Missing Manual', '1446260211');
INSERT INTO `answer_table` VALUES ('167', '142', '579c732d98e3797028793bb456af7b2b', '<b>前言</b> <b>===============================</b> <b> CSS入门比较简单,很适合零基础的人去学习。</b> <b>但是该从哪里开始呢?又该学到什么程度,学会了之后,又会能找到一份什么样的工作呢。</b> <b>首页,我必须要告诉你们,IT修真院的弟子们是可以在一个月之内胜任初级CSS工程师的…</b>', '1445669900');
INSERT INTO `answer_table` VALUES ('168', '142', '72d26f9f0c7c6d0b2bab73418c595c6b', '实际项目写CSS是这样的,有个idea,但不知道或者忘了具体CSS该怎么写,于是Google一下,找到一些东西,比如常见的CSS Tricks网站上有很多整理好现成的代码可用,然后在Devtools里面试一试效果,能解决大部分的CSS编程问题。所以其实并不需要一个月,网上搜…', '1446260211');
INSERT INTO `answer_table` VALUES ('169', '142', '139', '童鞋,前端这个概念就放一放吧,这个很深的,我觉得先把目标定成:学会基础的css和html,能编写可以看的网站,了解其它知识体系比如框架和响应式,能简单运用,能配合同事协作。(从你的目标上看,我个人觉得1个月时间努力点,能完成第5点就足够你折腾了) 带…', '1449195752');
INSERT INTO `answer_table` VALUES ('170', '142', '140', '一个月,你最多了解各种属性是干嘛的,没有常年在实际项目中踩坑和填坑,然并卵的。好比你可以在一月认识很多字,但不一定写得出作文。', '1453031655');
INSERT INTO `answer_table` VALUES ('171', '142', '141', '一个月学 JS 有可能学会, 一个月学 CSS 那是绝对学不会的 另外现在的前端不会 CSS 只会 JS 的,多了去了。', '1518860393');
INSERT INTO `answer_table` VALUES ('172', '148', '143', '简单说,只要有一定的动手能力,能完成一定的css,js编码任务就可以去找了,只要公司要你,就是成功的第一步,具体的来说:1. web前端开发分享-css,js入门篇2. web前端开发分享-css,js进阶篇3. web前端开发分享-css,js提高篇4. web前端开发分享-css,js工具篇5. web前端开发分享-css,js深化篇6. web前端开发分享-css,js移动篇或者这张图:这个图可以搜索:web前端技能考核.xls web前端技能考核.xls_免费高速下载也可以这儿下载后欣赏。不知道如何学,可能加群:327388215,禁止闲聊,非喜勿进。', '1443583752');
INSERT INTO `answer_table` VALUES ('173', '148', '144', '实习生: 页面仔。 个人可以完成静态页面。市场老大专用小弟,单线联系。懂html css,js入门。 初级: 个人完成动态页面。spa(单页网站)某一功能。懂基础js。能接入后台api。 中级: 有组队打boss经验。(完成过网站)会设置一定量的seo。 能带实习生。 …', '1443577411');
INSERT INTO `answer_table` VALUES ('174', '148', '145', '门外汉:前端不就是做网页么,是个人都能干。 初级:哇塞,前端还可以这么玩,手机也能兼容啊。 中级:会用各类库, 会写一些闭包以及回调。 高级:MVVM, Gulp/Grunt, 后端就写写API就好了啦。jQuery? 抬走抬走。 大神:今晚没什么睡意呀,造个轮子吧!', '1443580049');
INSERT INTO `answer_table` VALUES ('175', '148', '1c4ca537fbf11dc08fc665b45498e24c', '简单说,只要有一定的动手能力,能完成一定的css,js编码任务就可以去找了,只要公司要你,就是成功的第一步,具体的来说: <a href=\"https://link.zhihu.com/?target=http%3A//www.cnblogs.com/jikey/p/3600308.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">1. web前端开发分享-css,js入门篇</a><a href=\"https://link.zhihu.com/?target=http%3A//www.cnblogs.com/jikey/p/3601666.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">2. web前端开发分享-css,js进阶篇</a><a href=\"https://link.zhihu.com/?target=http%3A//www.cnblogs.com/jikey/p/3604459.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">3. web前端开发分享-css,js提高篇</a><a href=\"https://link.zhihu.com/?target=http%3A//www.cnblogs.com/jikey/p/3607133.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">4. web前端开发分享-css,js工具篇</a><a href=\"https://link.zhihu.com/?target=http%3A//www.cnblogs.com/jikey/p/3611394.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">…</a>', '1443583752');
INSERT INTO `answer_table` VALUES ('176', '148', '146', '嗨,我又来分享自己之前的工作经历了。 我应该算是半路出家吧,从大二留级之后,我就开始自学Web,然后大三就找工作了,所以我这里就着重分享毕业前的经历吧。 大二留级那年,我首先是学Flash,然后Dreamware,6还是7忘记了,到现在我也会收到一些妹子在QQ…', '1444495571');
INSERT INTO `answer_table` VALUES ('177', '148', '147', '技术只分优劣,业务才谈价值', '1461896448');
INSERT INTO `answer_table` VALUES ('178', '153', '149', '商业价值基本没有,但作为应届生的简历作品还是不错的,能证明题主有一定做事情的能力。FPS 作为近十年来最高端游戏的代表类型,不把各方面细节都做好是无法给人留下任何好印象的。即使是用的 WebGL 技术,能在浏览器跑,不做到主机游戏级的体验也没什么用。就好比国内导演拍言情片警匪片,大家还能瞧得过去,但是一拍科幻片必然一片骂声是一样的道理。选择大家最挑剔的类型来起步是很困难的,下次做个人项目可以做的更小更精致,才能展现你的创造力,而不是做出一个普通玩家看了都会提不起兴趣的原型。(不过毕设过了就好,自己做的开心就好)另外大学生做项目和有经验的职业人做项目,最大的区别往往就是体验和细节了,没有面对过最终用户和产品经理的各种苛责,很难了解要做到哪些细节才能让人满意。题主和类似的大学生朋友可以多注意这方面的问题,一开始不要野心太大,十个没人想要玩的半成品也比不过一个麻雀虽小,五脏俱全的精致成品。楼主如果对 JS 游戏和引擎开发感兴趣,简历可以投给我们 jobs(at)http://firebox.im', '1430712387');
INSERT INTO `answer_table` VALUES ('179', '153', '150', '光从视频看不出来什么。 单机的话目前这个程度没啥好说的(跟商业游戏差太远,另外其实我也不算内行),就说下如果是多人要解决的问题 如果是多人在线游戏的话 要解决如下的问题 1.延迟补偿 <a href=\"https://link.zhihu.com/?target=https%3A//developer.valvesoftware.com/wiki/Lag_compensation\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Lag compensation</a> 2.ping值有波动的时候的处理方法 3.流量的优化(游…', '1430659576');
INSERT INTO `answer_table` VALUES ('180', '153', '95cd52346e6d11dac77c5af6b1d53fbf', '商业价值基本没有,但作为应届生的简历作品还是不错的,能证明题主有一定做事情的能力。 FPS 作为近十年来最高端游戏的代表类型,不把各方面细节都做好是无法给人留下任何好印象的。即使是用的 WebGL 技术,能在浏览器跑,不做到主机游戏级的体验也没什么用…', '1430712387');
INSERT INTO `answer_table` VALUES ('181', '153', '0', '在图形层面来讲,应该可以做的更加精致一些,下面是几个改进的方向 1. 更加精美的地形/地图,如果美工存在难度,可以考虑使用随机生成的迷宫和地形 2. 天空球贴图似乎不太对 3. 光照缺失,建议增加光照,或者使用lightmap直接贴图 4. 阴影缺失,建议增加阴…', '1430993437');
INSERT INTO `answer_table` VALUES ('182', '153', '151', '我觉得题主你的思路还是要转变下。你的工作量主要体现在了three.js能做什么上,而不是你对webGL的思考。我在两年之前就见过用纯canvas做的fps了,效果也不差。你把重点放在复制传统fps功能上,谁也看不出你的优点啊,你要说是对新技术的探索吧,那些从openG…', '1431234036');
INSERT INTO `answer_table` VALUES ('183', '153', '152', '不知道 题主现在怎么样了 能不能给后生一点点职业意见', '1511639388');
INSERT INTO `answer_table` VALUES ('184', '159', '154', '本人已投身于全新行业全新领域,既跟Flash没关系,也跟HTML5没关系,所以关于这类的技术问题,请大家不要再邀请我去回答。---------这是一条更新线(2017.2)---------我特别不喜欢挖坟,但是有3个原因看到这个问题不得不答:1. 我曾经从事了15年的Flash和HTML相关工作,我经历过。这是鄙人的亲身经历,1999年开始接触Flash技术,2000年向Macromedia提交了Flash AS1的Math相关算法而成为beta tester,2003年是Macromedia Flash的dev volunteer, 2004年成为Macromedia在中国的第一个技术员工,2005年,Adobe并购Macromedia结束,进入Adobe做工程师,2008成为Flash Video与Flash Media Server的大客户技术经理,2009年成为Flash Platform Evangelist,2014年离开Adobe前,除了Flash,也参与了Adobe HTML5系列技术工具的相关工作。2. 我现在是一家做HTML5技术公司白鹭引擎的技术合伙人,管理这家公司的研发团队,每天的工作都跟HTML5的Web技术相关。3. 这个时间点回答这个问题貌似最好,因为一切答案正在浮出水面。好了,回到答题本身。我本人对于Flash和HTML5两个技术领域的观点判断大致如下:Flash已经走入软件生命周期的末期,但它仍颇具价值。Flash不论当初多么辉煌,在它的生命周期里从未真正赢得移动领域。HTML5已经重回轨道,未来取胜的关键则在移动领域。虽然HTML5已经重回轨道,但要达到高度完善的技术普及状态,它必须进行几方面的突破。Flash已经走入软件生命周期的末期,是的,万物皆有始终,更何况Flash。1994年4月10日到今日,Flash已经有21岁。21岁对于一个人而言,正属风华绝代之年,但是在软件领域里,存活21年实在算的上是一个老家伙了。说到衰落,必然要提崛起。21年的过程中,Flash经历了三次成功高峰,分别是1999年的网络动画时代,2005年的Flash Video时代与2008年的Web Game时代。这三次互联网领域的高峰,全部都被Flash赶上(不得不说命好运也好),并且这三次成功,引领了Flash在生命周期中的一次又一次产品形态上的变化。Flash Animation的流行引领了Flash的第一次成功,1999年,借着第一波互联网.com的热潮,由于当时HTML技术功能上的羸弱,大量被人所称道的Banner,动画,MTV都是借助Flash创作而来,这些充满神奇的交互效果充斥了每个网站,Flash在网页动画创作领域开始快速崛起。我当时的雇主美国Macromedia公司旗下的Flash,Dreamweaver和Fireworks被国人亲切的叫做网页三剑客,当时我主要泡闪客帝国(前身是边城浪子的回声资讯)和蓝色理想这两个Flash开发者聚集的论坛。2004年,借助着前几年Flash所取得的成绩,Macromedia公司被Adobe公司以34亿美金收购。2005年,Flash有史以来最重要的版本之一Flash 8(codename:8 ball)登场,这一版本里集成了2个最重要的功能,其中一个功能引领了后来YouTube和优酷土豆视频网站的成功,就是Flash Player里集成了Sorenson Spark H.263(VP6)的视频解码功能,而另一个功能为以后Flash可以创作更精彩的Web Game埋下伏笔,就是Bitmap和Bitmapdata位图操作的实现。2008年,Flash又“幸运”的赶上了社交游戏的浪潮,随着Zynga和Facebook的大获成功,Flash在社交游戏的技术领域独领风骚,之后的Stage3D技术又让Flash彻底统治PC网页游戏领域。在Flash最为巅峰的这么多年内,任何其他类似的技术都没有在与Flash竞争上胜出,期间也出现过若干“Flash Killer”,包括Silverlight,JavaFX,Lazslo和Unity Player。作为胜出者Flash自然有他的缘由,就是独一无二高度统一的Flash Player,强大的内容设计开发工作流,多年积累而成的强大的社区生态。水满则溢,月盈而亏。Flash开始走下坡路业界都认为是从苹果乔布斯的那篇檄文而起。没错,那篇檄文是Flash开始走下坡路的开始,后续的一系列对Flash的不利消息又接踵而来,都给Flash造成了沉重的打击。我这里给各位总结一下Flash由盛转衰的几个重要事件。它们分别是:苹果iOS不支持Flash Player.MACOSX系统不提供面向Flash Player的视频硬件解码能力调用。Adobe Flash Player所建立的Open Screen Project(OSP)计划的推进不佳被终止。Adobe宣布裁撤Flex团队,终止Flash Builder开发计划,并将Flex项目捐给Apache,这间接促成了Google AngularJS的大获成功,因为AngularJS的作者就是Flex的核心科学家。Adobe不再开发Android系统的Flash Player后续版本。Adobe宣布终止开发了80%的ActionScript4.0和AVM3.0项目。Adobe终止了Stage3D的后续开发工作。Adobe终止AIR SDK的ANE(Adobe Native Extension)和内置Webkit的开发维护。Adobe裁撤整个中国研发中心,其中有很多工程师原属于Flash团队,其中包括Flash Player,Stage3D,CrossBridge(原Alchemy),骨骼动画以及Platform Evangelism。(很有趣,其中一部分工程师后来加入了Egret团队)FireFox曾默认关闭Flash内容显示。(修正:Firefox是因为Flash的一个0-day漏洞默认关闭了Flash内容,在修复后,又重新开启。来源:Firefox now blocks all versions of Flash Player by default)Google Chrome停用NPAPI的支持,并关闭PPAPI Flash Player的硬件加速。Google Chrome将Flash内容默认关闭。(修正:Google Chrome宣布将智能化选择性的关闭Flash内容的显示。来源:http://www.zdnet.com/article/amazon-ditches-flash-ads-amid-ad-industry-push-towards-html5-ads/)可以说是一系列的坏消息,如果合在一起看,那简直是坏的不能再坏的消息了,其中很多的决策来自于Adobe自己,这有充分的理由让我们相信,Flash这个平台型的技术已经进入了最后的生命周期。但Flash给Web进化带来了很多有价值的推动。首先,在Flash最为鼎盛的时期,来自Adobe的官方统计,全球有将近200万的Flash开发者,这个群体不同于其他语言的开发者,可以说他们是一个独特的开发者群体,我们可以理解他们才是真正的“Full Stack”工程师,会开发游戏,会制作动画,会创作富媒体应用,甚至很多人还兼修美术,烹饪和刺绣。从2010年Flash开始走下坡路,这些Flash开发者陆续转型,他们成为了后来众多应用和游戏公司的中坚力量,目前市场上大量的Unity,Cocos的手游开发者,Egret Engine社区里近一半的HTML5开发者,甚至是大量的AngularJS和JQueryMobile的开发者,都来自于原来的Flash社区。其次,Flash开发生态为HTML5标准的进化带来了大量有借鉴价值的范本模型。Adobe通过Flash Professional工具开放了JSFL扩展;支持了JQuery Mobile和WebGL的输出,甚至于矢量绘图的动画都支持CreateJS的导出;Adobe将全球最流行的骨骼动画项目之一DragonBones转给了Egret继续原生和HTML5版本的开发工作;Flex项目的主程成为了Google AngularJS的作者;曾经流行的Flash游戏框架Flixel的作者后来又参与创作了HTML5游戏框架Phaser;被Adobe捐助给Mozilla组织的AVM2虚拟机的源码间接驱动了IonMonkey,SpiderMonkey项目中GC的更新换代和Flash转换HTML5项目Shumway的流行;Adobe的ActionScript3.0的语法方式被Egret Engine团队在HTML5的引擎产品设计上所借鉴;Stage3D项目后续促成了Away3D和Minko等原Flash3D项目完美转型HTML5技术领域。还有很多HTML5相关的视频和音频项目在过去几年的发展中大量的融合了Flash相关的媒体库来提供更多的功能支持,当今大量的HTML5 Video Player都是从原来的Flash领域变换而来。这一切都是Flash技术带给当今HTML5领域的财富。现实是很多人并未看到这些,看到的是当Apple宣布iOS不支持Flash技术开始,有些所谓的“专家”和“专业媒体”将Flash营造成HTML5的头号死敌的话题博取业界的更多眼球,其实他们并不关心Flash和HTML5为Web领域真正带来了什么,也不关心谁赢谁输,他们唯一关心的就是自己的知名度和访问量。接下来说说第二个观点,Flash从未真正赢得过移动领域。在开始这段之前,推荐各位在知乎看看我回答的这篇帖子“iOS不支持Flash的真实原因是什么?”iOS 不支持 Flash 的真实原因是什么? - 知乎用户的回答。下面则是更多事实可以证明Flash一路走来,赢得了PC,丢掉了移动市场:1.在2004年,Flash跟中国移动对接动画标准一事,当时Flash Lite进入中移动动画标准评测流程之前,已经有两家利用Flash Player 6 SDK泄露的源码而做了山寨Flash播放器的公司在跟中移动对接了,一家韩国公司,一家中国公司,而且接触中移动的时间已经不短。Macromedia虽然是Flash官方,但是最后一个进场,而且当时中移动已经初定一家山寨Flash的产品成为标准,称之为MFlash。虽然中移动知道Macromedia是Flash的官方,技术更强,也乐意重新在中移动定制的功能机上使用Flash Lite标准,但是由于Macromedia坚持要求中移动承诺植入FL的设备总数,并按照单台1美金收取授权费。因为中移动是大公司,多少人挤破头想和中移动合作,但是Macromedia这家美国公司偏偏坚持成为标准,每台设备要收1美金。结果可想而知,Flash第一次错过了中国最大的移动运营商,很不幸的是,主导Flash播放器收取设备授权费的这个美国人跟着Macromedia一同进了Adobe,还被提升成为全球业务的高级总监,不幸的事情再次发生就自然而然了。2.Nokia当年太有钱了,这家公司带头支持了内置Flash Lite,也带头支付给Adobe了Flash的设备授权费用。这一行径使得Adobe坚持认为Flash在移动设备上能收取费用且必须收取费用,不论是任何厂商,都不例外。一刀切的收费策略也自然引发了当年很多大大小小手机厂商的不满,当然,这个Adobe CEO可能不知道,只有我们这些处在一线的员工才了解。但是这条线的决策当时由上面说到的那个美国人来负责时,KPI自然也是以能为公司贡献多少利润来衡量团队业绩的唯一标准。所以,只看眼前利益,不花大力气培养移动生态成了Flash错过移动市场的另一个主因。3.当年Adobe对于Flash播放器的源码访问已经到了无比严苛的地步,只有在美国注册且有实体研发的公司才能通过clean room的方式获取Flash Player的源代码进行移动设备的定制,其他硬件公司都必须通过引入Adobe授权的第三方Porting Partner的机制来获取定制后的Binary Build。这个流程简单描述就是,如果我是一家中国的手机公司,有植入Flash播放器的需求,而且愿意付费,那我要跟Adobe授权的一家Porting公司签协议,这家Porting公司注册在美国,研发在印度......印度,你懂的,然后印度人来中国找我,了解我的设备(这里还有一个大问题,就是即使签署保密协议,但这家Porting Flash的公司必然知道我将来要发布到市场的新手机的所有硬件规格,妈蛋啊,我新手机保密还未上市就都让别人全知道了,有可能这家知道我的手机规格的公司还在为我的竞争对手做porting!虽然有了保密协议,好吧,就当是完全保密吧。),然后评估是否可以移植Flash,然后回印度在clean room里访问Flash源代码,进行移植。移植完成后,要把装有定制Flash Player Build的样机送回给美国Adobe进行认证和备案,符合一切QA认证流程后,告知我可以出货了。好吧,这个蛋疼的流程虽然我不知道当初是谁制定的,但是结果就是,我有款新上市的手机有植入Flash的计划,我要先把我的硬件信息全部公开给第三方进行评估,而且手机将来能否出货,要先等几个月的Porting和Certify的流程,还要先付给Adobe一笔预付款,最后可能手机上市日期因为种种原因流产了。。。这么死板不人性化的流程成为Flash错过移动市场的第三个主要原因。4.就是众所周知的苹果在iOS上屏蔽Flash的事件,虽然当年Adobe用了“We Love Flash, We Love Apple”极富煽情的公关方式来应对,但是然并卵,Flash错过了移动市场上的第一个大腿iOS。5.Adobe然后开始决定不再移动设备上花费大量的人力物力来维护和开发Flash播放器,所以接着又官方宣布了不再更新安卓版本的Flash Player的决定。转而鼓励开发者使用Adobe AIR的打包技术来将Flash内容打包为原生的解决方案,这个方案几乎成功的实现了Flash进入移动市场的目标,因为全球当时已经有数十万个iOS的app是通过Adobe AIR打包而成。但是突然,又发现了巨大的问题,那就是AIR SDK打包原生,要依赖Apple官方提供的原生系统扩展API,比如支付,GameCenter,文件访问等等。而Adobe AIR的ANE(Adobe Native Extension)则是一个黑盒,那就变成苹果只要升级系统或调整API,ANE如果不及时更新,所有AIR打包的原生app都被卡住,需要等待Adobe升级更新ANE包才可以继续保证app的正常运转。这一个无法逾越的深坑让大量的用AIR打包原生app的Flash开发者大倒苦水,对ANE的海量吐槽直接飞向Adobe总部。如果Adobe ANE团队及时关注产品反馈并及时更新,这一个跟XCode打包几乎一致的GCC/LLVM打包方案完全可以茁壮成长下去,可惜,Adobe又一次做了一个碉堡了的决策,将ANE美国研发团队裁撤,将工作转到印度班加罗尔做维护,又是印度,你又懂了。终于,Flash又一次错过机会。6.虽然黑莓当时内置了AIR,QNX的车载导航几乎都是Flash和AIR技术,但是市场太小了,一个倔强的浪头完全无法逆转整个形势了。所以我们可以认定Flash即使在PC上有过三次辉煌,但是它并未真正的赢得过移动市场,用一首诗来形容它的移动之路就是“待到秋来九月八,我花开后百花杀。冲天香阵透长安,满城尽带黄金甲”。在移动设备如日中天的今天,Flash本有机会开启并引领富媒体Web在移动设备上的革命,但它并非赢家。再来看第三个观点,HTML5已经重回轨道,未来取胜的关键则在移动领域。为什么这么讲。PC发展落后于移动已经是事实。今天,人手至少一台智能手机,移动流量超越了PC流量。技术为业务服务,业务由市场导向。HTML5狭义上是超文本链接标记语言第5版,单从名字上并无神奇之处,但广义而言,HTML5代表了新一代的HTML,CSS和JavaScript技术的总和,它可以跨平台,这在屏幕尺寸和分辨率林林总总的移动设备上简直就是天生的优势(天生就是东宫太子),响应式设计,跨操作系统,而且随着硬件计算能力的飞速进化,浏览器内核或者VM对于脚本型技术的性能瓶颈也在被逐渐抹平,在不是特别关注性能的应用开发上这个缺点渐渐被忽略不计。网络资源加载的尴尬也随着移动网络的速度飙升和使用成本的大幅降低而不再成为关键性的制约因素。HTML5虽然经历了2012-2013年的重大技术低潮,一大波HTML5的技术先锋在这两年沉沙折戟,但是不妨碍它的跨平台,标准开放的技术本质,2014年后再次卷土重来。任何人都需要通过移动设备连接世界,获取信息。这个基于Touch的市场机遇远大于使用键盘鼠标的PC领域,每天若干的创新都在这里出现,内容层出不穷,且这个领域的内容呈现需要高度的跨平台,跨设备的适配性,HTML5这种开放性的Web技术成为这些创新的主要技术方案顺理成章,因为HTML的发展史就是一部互联网的发展史。PC浏览网络信息,仍然靠浏览器。但是移动设备浏览网络信息,app就是介质。微信,微博,手机助手,新闻客户端,所有Webview支持的app就可以很完美的采用HTML5技术。HTML5技术在移动设备上的用户场景原则上可以无限大,任何我们现在接触的app,都有使用HTML5进行制作开发的可能。突破浏览器对于HTML5的束缚是HTML5在移动设备上走向顶峰的必经之路。我经常跟人争论的一个话题就是,谁规定HTML5的标准化的执行和实现就一定要依赖于浏览器?用HTML5技术开发的内容,但是不用浏览器形态的方式去浏览,算不算是HTML5所涵盖的领域?另外,PC某些垂直领域在几年内仍然无法摒弃插件体系,尤其是页游市场。国内目前的页游市场是几百亿人民币的规模,而这个领域使用Flash Stage3D技术已经根深蒂固,从游戏创作的技术工作流程和性能要求上,HTML5的能力目前还无法达到那个高度,光从Flash Stage3D可以在PC调用DirectX和OpenGL,而HTML5只能调用WebGL这点来看就被完爆。而且Adobe Flash播放器已经在PC领域渗透超过10亿台终端,这个市场占有率还不能短时间内被取代,在Flash与HTML5的更新交替年代,与其等待PC市场漫长的自然更迭,HTML5为何不能从没有Flash的移动市场强势介入,成为跨平台富媒体内容的开发首选?最后一个观点是建立在第三个观点之上的,HTML5最广泛的被接纳与普及前,还要先解决以下几个关键问题。1.HTML5的标准化的能力推进需要更多参与制定厂商的通力协作,不要把商业的博弈及目标凌驾在标准化的普及之上,公心要大于私心,通力协作,才可能尽快实现更多具有前瞻创新技术标准草案的落地。HTML5规范虽然在2014年底终于定稿,但是这其中经历了太多的曲折,推进的过程中充满了各大浏览器厂商借助标准扩大行业话语权的暗战,目前,仍然有大量的创新标准无法在日新月异的移动领域市场快速被定案与普及。太多事实,给各位列举几个。CSS3的标准落地异常复杂,甚至于出现在开发者创建和声明CSS3新属性时,针对不同浏览器,一个属性要设定针对浏览器的众多前缀才能保证浏览器对它的支持,这么蛋疼的编写设定虽然是过渡方案,但是不得不说标准化落地过程中产生的各种额外代价都无形的转嫁给了开发者。另一个例子是关于WebGL,来源于http://webglstats.com的数据统计,移动设备对于WebGL的支持率已经上升到有史以来的最高,超过8成支持WebGL内容的访问,这无疑是可喜的状况。但是从另一方面的比较则看出WebGL的进化仍面临巨大挑战。首先是,WebGL1.0从2011年起到现在已经近4年多几乎没有过任何能力上的进化,这几年全部都是标准规范草案定义能力的推进普及,变革速度相比起微软的DX12和Kronos组织全新一代的Vulkan技术的进化速度相比,简直惨不忍睹。当未来PC和主机游戏,甚至手机原生游戏都更多的可以从下一代的DX和Vulkan技术中全面获益,获得飞一样的提升时,我们HTML5的开发者们仍旧在为越来越多的设备终于支持WebGL而沉浸其中。好比有钱人又买别墅了,我还在为今年终于工资涨了几百而欢欣雀跃一样讽刺。如果HTML5技术想大成,不仅标准化的普及要快,功能性的创新也同样要快。2.HTML5相关开源项目(包括DOM,JavaScript/TypeScript,CSS)在github上无疑是总数世界第一。但是另外一方面,HTML5仍然需要更为强大,更有工作效率的工作流。我们需要在HTML5领域内有能跟其他领域一样世界级的工作流方案,强大的引擎,高度可视化的创意工具,云与端的计算完美结合,这些都能更有效的保证我们的工作成果和工作过程越来越专业。各行各业最顶级的创意开发工具,目前来看,没有一个是专门为HTML5技术而生的。例如Visual Studio虽然也可以支持HTML5和JS开发,但是相比C++,C#在VS中的集成工作流,待遇显然就是一个不招待见的“干儿子”。我们Web前端开发已经习惯用各种script editor,配合浏览器的developer tools,再配以各种node上的testing,build和publish工具,最后再通过Phonegap或者Cordova类似的打包来完成工作,这就是我们HTML5开发者的工作流,且我们认为已经很好了。但是这是我们被习惯被教育后采用的工作方式,是因为业界本就没有针对HTML5更高效专业的工作流。我天天弯着腰犁田,换个牛车替我就感觉很满足了,殊不知世界上有插秧机这种更高效的工具一样。正在使用的不代表就是最好的,因为更好的我们没见过。HTML5技术领域的创新绝对不能忽略更高度更自动化的工作流,这是一个高度繁荣市场的终极需求,不是某个通过terminal和command就能搞定一台机器的极客需求。虽然HTML5看似已经成了移动市场上实现网络富媒体交互技术的好选择,但是HTML5的技术未来并不是想象中的那么乐观,前路依然任重而道远。', '1442379570');
INSERT INTO `answer_table` VALUES ('185', '159', '155', '未来属于移动设备,Flash现在的最大劣势就是能耗太大(别指望手机电池技术突飞猛进),只要不解决这个问题,Flash就没有未来。 ', '1309032090');
INSERT INTO `answer_table` VALUES ('186', '159', '156', '很坚定的说 html5 ', '1313029529');
INSERT INTO `answer_table` VALUES ('187', '159', '157', '跑个题:adobe Flash CC 版本,创建列表中排在首位的文件类型已经从 flash 变为了 “html 5 画布”。', '1409455227');
INSERT INTO `answer_table` VALUES ('188', '159', '557cc99bfe762006cbe8be655320af2b', '本人已投身于全新行业全新领域,既跟Flash没关系,也跟HTML5没关系,所以关于这类的技术问题,请大家不要再邀请我去回答。 ---------这是一条更新线(2017.2)---------我特别不喜欢挖坟,但是有3个原因看到这个问题不得不答: 1. 我曾经从事了15年的Flash…', '1442379570');
INSERT INTO `answer_table` VALUES ('189', '159', '158', '如图', '1442441060');
INSERT INTO `answer_table` VALUES ('190', '165', '160', '1. 2008年的时候我进入一家端游公司打工,建议他们开始着手做手机游戏了。CTO没听进去。现在回头来看,08年是切入手机游戏非常好的时机,但那家公司错过了。错过的原因就是,“市场太小,一款游戏排到第一也才几十万的收入,根本不够看的”2. 最近这几月,腾讯QQ浏览器里面跑出来的数据,第一名和第二名H5游戏的收入都100万月流水左右。所以,后面的事情发展会如何你懂的。这只是个开始,和2010年的iOS游戏,2011年的Android游戏市场规模非常类似。3. 大家讲H5游戏,实际上并不是真的指纯HTML5技术的游戏,而是泛指“手机页游”。PC页游上需要一个flash插件来加速,同样的手机页游上最佳的技术方案也是带插件下去,目前cocos, egret, layabox都在顶这条技术路线。「手机页游」这个概念是腾讯提出来的,楼主自己百度。所以,我的观点是,纯H5游戏——没戏,这个性能限制和兼容性,基本做不了什么东西。手机页游——大有可为——也就是现在市面上统称为“H5游戏”的东西。', '1438528110');
INSERT INTO `answer_table` VALUES ('191', '165', 'e06f30956c83a8f9745abe4d21b55c58', '1. 2008年的时候我进入一家端游公司打工,建议他们开始着手做手机游戏了。CTO没听进去。现在回头来看,08年是切入手机游戏非常好的时机,但那家公司错过了。错过的原因就是,“市场太小,一款游戏排到第一也才几十万的收入,根本不够看的” 2. 最近这几月,…', '1438528110');
INSERT INTO `answer_table` VALUES ('192', '165', '161', '我一个朋友辞职自己闭关大半年用纯HTML5开发了一款模拟经营游戏,目前在Windows商店长时间排在前十,steam上卖得也不错。 我也做了很长时间的HTML5,还为我们的东西写了一个2d绘图引擎(非游戏),感觉HTML5的性能其实还是不错的,canvas在各个平台上兼容性…', '1438604209');
INSERT INTO `answer_table` VALUES ('193', '165', '162', '优势: 用户导入成本和用户自传播低门槛。原生手游目前国内渠道导入每用户的成本在7-8元,HTML5游戏只有0.3元。 可以通过发送链接的方式给朋友展示游戏成就或者邀请朋友一起游戏,对强社交互动属性的游戏具有天生助力。(比如棋牌游戏等) 劣势: 性能。性…', '1438607869');
INSERT INTO `answer_table` VALUES ('194', '165', '163', '顺着题主的几个问题说吧 1.你的这种逻辑是对的,但是还存在一种情况是:“听说某个游戏挺好玩你去玩一玩” “好啊,我操!居然这么大,半天都下不完,还是算了吧。我手机空间本来就不多。” 所以说,要说传播性也得定位用户群,这些用户到底是游戏爱好者还…', '1438652110');
INSERT INTO `answer_table` VALUES ('195', '165', '164', '当然有存在的理由。 首先,对于玩家而言,大部分单机游戏,他们的生命周期很短,玩家下了几天,玩了之后,就会删除,对于这种游戏,玩家更多的是体验一种新鲜感以及新奇玩法的乐趣。 其次,而且对于这一类单机游戏来说,其所包含的资源量,性能要求本身并不…', '1460117743');
INSERT INTO `answer_table` VALUES ('196', '169', '166', 'H5是一种用在微信上的PPT。', '1437378344');
INSERT INTO `answer_table` VALUES ('197', '169', '167', '注意注意: <b>H5 != HTML5</b> <i>H5 是一个产品名词 HTML5 是一个技术名词</i> 对于知乎多个相关问题里批判H5的叫法,我只想说:图样图森破,上台拿衣服 打个比方,如果有个人跟你说:“我要做个网站,H5的”。 那TA是想让你用header、footer、nav、section等标签? 让…', '1433322295');
INSERT INTO `answer_table` VALUES ('198', '169', 'e26f600d1d4b79abc3a674885d4a5bb2', '前一段时间很火的 吴亦凡入伍的广告 你看静态新闻的时候,是在加载后面两个视频,加载完成之后,吴亦凡就蹦出来了 所以你们看到吴亦凡从画面里面出来的时候脑海里的台词是: <b>卧槽,这是怎么做到的!</b> 而我的内心台词是: <b>卧槽,我知道是怎么做到的,你把流量…</b>', '1436115413');
INSERT INTO `answer_table` VALUES ('199', '169', '2a55fb1b7f5995d9fdad7e818e61599a', 'H5是一种用在微信上的PPT。', '1437378344');
INSERT INTO `answer_table` VALUES ('200', '169', '168', '<b>刚写的文章,或许能解答一二</b> <strong>什么是HTML?</strong> 通俗易懂版:<strong>HTML就是你跟浏览器下达命令的语言。</strong>比如要把一篇文章显示在浏览器上,文章既有图片又有文字,你要告诉它哪些是文字,哪些是图片,并且分别都放在哪个地方,需要用什么样式(颜色、大小、对齐……),…', '1445586460');
INSERT INTO `answer_table` VALUES ('201', '169', '7a2450423f25f23cd23eda4581eaea5d', 'H5从2014年底的初露锋芒到2015年的全面火爆,再到2016的沉淀,2017年,H5依然是品牌Social传播的首选。当你看了很多H5是什么的科普后,却怎么也做不去刷屏的案例。那么如何理解H5?我想每一个策划人员/运营人员/设计师都必须有一个完整、鲜活的认知,然后才…', '1505290988');
INSERT INTO `answer_table` VALUES ('202', '172', '170', '这个是 Web Notifications 。Twitter 也支持的。火狐也支持的,并且不需要翻墙就能收到通知。(Google Chrome 当然是要连接 Google 的服务器来接收推送消息的啦。)使用 Web Notifications注意:Web Notifications 不是之前大家都已经熟知的桌面通知!虽然展示形式一样,但后者需要有相应的浏览器页面打开,而前者不需要!', '1475199986');
INSERT INTO `answer_table` VALUES ('203', '172', 'e1ecb812fd5ef0e75d04e4a2a6a34e57', '这个是 <a href=\"https://link.zhihu.com/?target=https%3A//www.w3.org/TR/notifications/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Web Notifications</a> 。Twitter 也支持的。火狐也支持的,并且不需要翻墙就能收到通知。(Google Chrome 当然是要连接 Google 的服务器来接收推送消息的啦。) <a href=\"https://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/API/notification/Using_Web_Notifications\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">使用 Web Notifications</a> 注意:<b>Web Notifications</b> 不是之前大家都已经熟知的<b>桌面通知</b>!虽…', '1475199986');
INSERT INTO `answer_table` VALUES ('204', '172', '171', '不仅仅是web notification,还需要push api。 <a href=\"https://link.zhihu.com/?target=https%3A//developer.mozilla.org/en-US/docs/Web/API/Push_API\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Push API - Web APIs</a>', '1475204830');
INSERT INTO `answer_table` VALUES ('205', '175', '99f2830d193ec87598d65e9725e2048b', 'shell svn git nodejs npm nvm nrm gulp webpack babel sass less postcss vue react angular jquery charles fiddler chrome devtool express koa eslint hapi http https handlebars ejs jade karma mocha sinon istanbul webstorm sublime vscode atom vim', '1482850954');
INSERT INTO `answer_table` VALUES ('206', '175', '173', '前端有很多框架和技术,其实选择你需要的就可以了', '1427609520');
INSERT INTO `answer_table` VALUES ('207', '175', '0553e0e2a56f9ab508de9c4a734c54c6', '你需要看一些前台的continues intergration 和 continues delivery的文章。 里面有解释架构时如何为以后的开发做好规划。 如何更快速的实现开发到发布之间的每一步。 然后选择你的framework ☺ css html javascrit 更多的是一种语言。而gulp grunt 是开发…', '1427685993');
INSERT INTO `answer_table` VALUES ('208', '175', '174', '这要依据你需要解决的问题来决定 大方向是要知道的 例如 模块化,require还是sea 自动化工程,gulp还是grunt 单元测试,mocha还是qunit(单元测试我也还没尝试过) 前端模板引擎,jade还是ejs mv*框架,js庞大复杂难以管理,backbone还是angular css框架,b…', '1428228209');
INSERT INTO `answer_table` VALUES ('209', '175', '72d26f9f0c7c6d0b2bab73418c595c6b', 'Chrome Developer Tools.', '1430021230');
INSERT INTO `answer_table` VALUES ('210', '175', '99f2830d193ec87598d65e9725e2048b', 'shell svn git nodejs npm nvm nrm gulp webpack babel sass less postcss vue react angular jquery charles fiddler chrome devtool express koa eslint hapi http https handlebars ejs jade karma mocha sinon istanbul webstorm sublime vscode atom vim', '1482850954');
INSERT INTO `answer_table` VALUES ('211', '176', '73b238083b4b949735125eb56bee8206', '额。。最高票答案没答到点子上,最后怎么跑到Nodejs上去了。。Websocket只是协议而已。。我一个个来回答吧一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解有交集,但是并不是全部。另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。通俗来说,你可以用HTTP协议传输非Html数据,就是这样=。=再简单来说,层级不一样。二、Websocket是什么样的协议,具体有什么优点首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。1) HTTP的生命周期通过Request来界定,也就是一个Request 一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response , 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。教练,你BB了这么多,跟Websocket有什么关系呢?_(:з」∠)_好吧,我正准备说Websocket呢。。首先Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手。在握手阶段是一样的-------以下涉及专业技术内容,不想看的可以跳过lol:,或者只看加黑内容--------首先我们来看个典型的Websocket握手(借用Wikipedia的。。)GET /chat HTTP/1.1\nHost: server.example.com\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\nSec-WebSocket-Protocol: chat, superchat\nSec-WebSocket-Version: 13\nOrigin: http://example.com\n熟悉HTTP的童鞋可能发现了,这段类似HTTP协议的握手请求中,多了几个东西。我会顺便讲解下作用。Upgrade: websocket\nConnection: Upgrade\n这个就是Websocket的核心了,告诉Apache、Nginx等服务器:注意啦,窝发起的是Websocket协议,快点帮我找到对应的助理处理~不是那个老土的HTTP。Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\nSec-WebSocket-Protocol: chat, superchat\nSec-WebSocket-Version: 13\n首先,Sec-WebSocket-Key 是一个Base64 encode的值,这个是浏览器随机生成的,告诉服务器:泥煤,不要忽悠窝,我要验证尼是不是真的是Websocket助理。然后,Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。简单理解:今晚我要服务A,别搞错啦~最后,Sec-WebSocket-Version 是告诉服务器所使用的Websocket Draft(协议版本),在最初的时候,Websocket协议还在 Draft 阶段,各种奇奇怪怪的协议都有,而且还有很多期奇奇怪怪不同的东西,什么Firefox和Chrome用的不是一个版本之类的,当初Websocket协议太多可是一个大难题。。不过现在还好,已经定下来啦~大家都使用的一个东西~ 脱水:服务员,我要的是13岁的噢→_→然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!HTTP/1.1 101 Switching Protocols\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=\nSec-WebSocket-Protocol: chat\n这里开始就是HTTP最后负责的区域了,告诉客户,我已经成功切换协议啦~Upgrade: websocket\nConnection: Upgrade\n依然是固定的,告诉客户端即将升级的是Websocket协议,而不是mozillasocket,lurnarsocket或者shitsocket。然后,Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key。服务器:好啦好啦,知道啦,给你看我的ID CARD来证明行了吧。。后面的,Sec-WebSocket-Protocol 则是表示最终使用的协议。至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了。具体的协议就不在这阐述了。------------------技术解析部分完毕------------------你TMD又BBB了这么久,那到底Websocket有什么鬼用,http long poll,或者ajax轮询不都可以实现实时信息传递么。好好好,年轻人,那我们来讲一讲Websocket有什么用。来给你吃点胡(苏)萝(丹)卜(红)三、Websocket的作用在讲Websocket之前,我就顺带着讲下 long poll 和 ajax轮询 的原理。首先是 ajax轮询 ,ajax轮询 的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。场景再现:客户端:啦啦啦,有没有新信息(Request)服务端:没有(Response)客户端:啦啦啦,有没有新信息(Request)服务端:没有。。(Response)客户端:啦啦啦,有没有新信息(Request)服务端:你好烦啊,没有啊。。(Response)客户端:啦啦啦,有没有新消息(Request)服务端:好啦好啦,有啦给你。(Response)客户端:啦啦啦,有没有新消息(Request)服务端:。。。。。没。。。。没。。。没有(Response) ---- looplong poll long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。场景再现客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)服务端:额。。 等待到有消息的时候。。来 给你(Response)客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request) -loop从上面可以看出其实这两种方式,都是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的另外一个特点,被动性。何为被动性呢,其实就是,服务端不能主动联系客户端,只能有客户端发起。简单地说就是,服务器是一个很懒的冰箱(这是个梗)(不会、不能主动发起连接),但是上司有命令,如果有客户来,不管多么累都要好好接待。说完这个,我们再来说一说上面的缺陷(原谅我废话这么多吧OAQ)从上面很容易看出来,不管怎么样,上面这两种都是非常消耗资源的。ajax轮询 需要服务器有很快的处理速度和资源。(速度)long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)所以ajax轮询 和long poll 都有可能发生这种情况。客户端:啦啦啦啦,有新信息么?服务端:月线正忙,请稍后再试(503 Server Unavailable)客户端:。。。。好吧,啦啦啦,有新信息么?服务端:月线正忙,请稍后再试(503 Server Unavailable)客户端:然后服务端在一旁忙的要死:冰箱,我要更多的冰箱!更多。。更多。。(我错了。。这又是梗。。)--------------------------言归正传,我们来说Websocket吧通过上面这个例子,我们可以看出,这两种方式都不是最好的方式,需要很多资源。一种需要更快的速度,一种需要更多的\'电话\'。这两种都会导致\'电话\'的需求越来越高。哦对了,忘记说了HTTP还是一个无状态协议。(感谢评论区的各位指出OAQ)通俗的说就是,服务器因为每天要接待太多客户了,是个健忘鬼,你一挂电话,他就把你的东西全忘光了,把你的东西全丢掉了。你第二次还得再告诉服务器一遍。所以在这种情况下出现了,Websocket出现了。他解决了HTTP的这几个难题。首先,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。所以上面的情景可以做如下修改。客户端:啦啦啦,我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)客户端:麻烦你有信息的时候推送给我噢。。服务端:ok,有的时候会告诉你的。服务端:balabalabalabala服务端:balabalabalabala服务端:哈哈哈哈哈啊哈哈哈哈服务端:笑死我了哈哈哈哈哈哈哈就变成了这样,只需要经过一次HTTP请求,就可以做到源源不断的信息传送了。(在程序设计中,这种设计叫做回调,即:你有信息了再来通知我,而不是我傻乎乎的每次跑来问你)这样的协议解决了上面同步有延迟,而且还非常消耗资源的这种情况。那么为什么他会解决服务器上消耗资源的问题呢?其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(PHP等)来处理。简单地说,我们有一个非常快速的接线员(Nginx),他负责把问题转交给相应的客服(Handler)。本身接线员基本上速度是足够的,但是每次都卡在客服(Handler)了,老有客服处理速度太慢。,导致客服不够。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。这样就可以解决客服处理速度过慢的问题了。同时,在传统的方式上,要不断的建立,关闭HTTP协议,由于HTTP是非状态性的,每次都要重新传输identity info(鉴别信息),来告诉服务端你是谁。虽然接线员很快速,但是每次都要听这么一堆,效率也会有所下降的,同时还得不断把这些信息转交给客服,不但浪费客服的处理时间,而且还会在网路传输中消耗过多的流量/时间。但是Websocket只需要一次HTTP握手,所以说整个通讯过程是建立在一次连接/状态中,也就避免了HTTP的非状态性,服务端会一直知道你的信息,直到你关闭请求,这样就解决了接线员要反复解析HTTP协议,还要查看identity info的信息。同时由客户主动询问,转换为服务器(推送)有信息的时候就发送(当然客户端还是等主动发送信息过来的。。),没有信息的时候就交给接线员(Nginx),不需要占用本身速度就慢的客服(Handler)了--------------------至于怎么在不支持Websocket的客户端上使用Websocket。。答案是:不能但是可以通过上面说的 long poll 和 ajax 轮询来 模拟出类似的效果-----_(:з」∠)_两天写了两篇科普类文章。。好累OAQ,求赞。。对啦,如果有错误,欢迎大家在底下留言指出噢~', '1424620278');
INSERT INTO `answer_table` VALUES ('212', '176', '11c4242fd92613a7f85ad9fff60c29c9', 'HTML5 是一个很宽广的概念,是对大量新 API 的总称。不存在 HTTP5 的概念,HTTP 最高的版本号是 1.1。简单来说,你可以完全抛开 HTML5 和 HTML4 的概念,只考虑浏览器要么支持 WebSocket,要么不支持。 WebSocket 跟其他 API 比较不一样的是,它不仅仅依赖…', '1360914063');
INSERT INTO `answer_table` VALUES ('213', '176', '6ef2e77274cb0719253a577665cf690e', '简单说,没错,WebSocket不是HTTP协议,HTTP只负责建立WebSocket连接。', '1424521357');
INSERT INTO `answer_table` VALUES ('214', '176', '223c3f3147d3f2c09a1245898c0c95aa', '你可以把 WebSocket 看成是 HTTP 协议为了支持长连接所打的一个大补丁,它和 HTTP 有一些共性,是为了解决 HTTP 本身无法解决的某些问题而做出的一个改良设计。在以前 HTTP 协议中所谓的 keep-alive connection 是指在一次 TCP 连接中完成多个 HTTP 请求,…', '1424537431');
INSERT INTO `answer_table` VALUES ('215', '176', '73b238083b4b949735125eb56bee8206', '额。。最高票答案没答到点子上,最后怎么跑到Nodejs上去了。。Websocket只是协议而已。。 我一个个来回答吧 <b>一、WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)</b> 首先HTTP…', '1424620278');
INSERT INTO `answer_table` VALUES ('216', '176', '006373ce404a7d3011acb11de6de16dd', '<b>以下是腾讯云技术社区整理的 <a href=\"https://link.zhihu.com/?target=https%3A//www.qcloud.com/document/product/214/4150%3FfromSource%3Dgwzcw.93403.93403.93403\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">WebSocket原理说明 </a>——</b> 众所周知,Web应用的通信过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现。这种机制对于信息变化不是特别频繁的应用可以良好支撑,但…', '1492498519');
INSERT INTO `answer_table` VALUES ('217', '182', '177', '谢邀。 H5是超文本语言HTML的第五次修订,是近几年来Web标准巨大的飞跃。 以往,我们在Web上还只是上网看一些基础文档,但现在,Web是一个内涵非常丰富的平台。和以前版本不同的是,HTML5并非仅仅用来表示Web内容,在这个平台上还能非常方便的加入视频、音频、图象、动画,以及同电脑的交互。 HTML5的意义在于它带来了一个无缝的网络,无论是PC、平板电脑,还是智能手机都能很方便的浏览基于HTML5的各类网站。 对用户来说好处在于,我们手机上的App也会越来越少,用H5实现的游戏,不需要下载后安装,就能立即在手机界面中生成一个APP图标,使用手机中的浏览器来运行,新增的导航标签也能更好的帮助小屏幕设备和视力障人士的使用。H5拥有服务器推送技术,能让用户拥有更好的网页上的实时聊天,更快的网游体验。 H5对于开发者来说更是福音,HTML5本身是由W3C推荐出来的,也就意味着每一个浏览器或每一个平台都会去实现,这样可以节省开发者花在浏览器页面展现兼容性上的时间,并且,它取消了一些过时的HTML4标记,如<font>和<center>,它们被CSS取代,多媒体对象将不再全部绑定在object或embed标签中,而是<audio>视频标签,<audio>音频标签等。 同时,H5还新增了<nav>和<footer>,这种标签将有利于搜索引擎的索引整理,此外,像设置一个简单的email输入框也十分方便,我们只需要设定他的type属性即可,浏览器会验证他的输入是否是合法邮件格式。 H5还拥有的服务器推送技术,能够帮助我们实现服务器将数据“推送”到客户端的功能,客户端与服务器之间的数据传输将更加高效,基于SVG、Canvas、WebGL及CSS3的3D功能,用户会惊叹于在浏览器中,所呈现的各种炫酷的视觉效果。 在IPhone IPad上不支持的FLASH将来都有可能通过HTML5华丽丽的呈现在你的iOS设备上。 ', '1417420844');
INSERT INTO `answer_table` VALUES ('218', '182', '178', '因为简单好用,开发速度快', '1417419292');
INSERT INTO `answer_table` VALUES ('219', '182', '9179e7aba206b4ec7545c7113461d868', '谢邀。 H5是超文本语言HTML的第五次修订,是近几年来Web标准巨大的飞跃。 以往,我们在Web上还只是上网看一些基础文档,但现在,Web是一个内涵非常丰富的平台。和以前版本不同的是,HTML5并非仅仅用来表示Web内容,在这个平台上还能非常方便的加入视频、音…', '1417420844');
INSERT INTO `answer_table` VALUES ('220', '182', '179', '我听过有的App可以直接做简单的类似的H5,这个是真正的H5吗?', '1417422346');
INSERT INTO `answer_table` VALUES ('221', '182', '180', '几年前看到一篇文章叫《APP将死》就是文中得意思。', '1417424369');
INSERT INTO `answer_table` VALUES ('222', '182', '181', '你看看这个链接,说得还比较详细: <a href=\"https://link.zhihu.com/?target=http%3A//www.mzread.com/posts/s/844da9ke56j3\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">乌云装扮者_HTML5 是什么鬼?_拇指阅读</a>', '1418006458');
INSERT INTO `answer_table` VALUES ('223', '186', '183', '我觉得现在前端已经可以很流畅地像客户端一样开发了. 直接上图比较直接. 这个是我们新开发的引擎工具 http://fireball-x.com/, 整个都是 HTML5 技术做界面. 我想说如果我用 WPF, QT 什么的写的话, 这个项目基本就难产了. 如果你是一个像我一样对操作细节有疯狂追求的人, 那么你写界面的时候一定会希望更多的自定义和对原生控件的修改. 这个时候你会发现 HTML5 的界面书写才是你的好伙伴. 比如:设计这种贴心的 gizmos:精准的 tree view 插入提示:为每个控件量身定做的 focus 视觉效果:甚至还有窗口间的 dock/popup:然后一开 Dev Tools 就可以调节样式, Debug, 很符合处女座们对 1px 的追求:更新 =============================我只是回答了一下问题, 顺带show了一下我们未公开的项目. 没想大家挺好奇这个项目的. 我就简单介绍一下大概的技术结构和选型过程:整个项目是构建在 Atom-Shell 之上的. 我们最开始是在 Node-Webkit 上面编写, 但是无奈 Node-Webkit Bug 比较多, 更新和反馈不是很及时, 所以就换到了 Atom-Shell. Atom-Shell 项目活跃度很高, Report Issue 基本都是当天回复, 而且我发现 Atom-Shell 的作者之一赵成战斗力惊人, 也是 Github 上得满绿程序员.这是我的战斗力: 这是赵成的:所以我是脑残程序粉, 喜欢 fo 战斗力爆表的程序员和他的项目. 于是我们就改成 Atom-Shell. 底层 UI 部分我们是在 Polymer 基础上构建的. 所以我们玩的很 fashion 很 high! Shadow DOM, Custom Element, Object Observe, css flex, Web Animation, SVG, 任何你能想到的酷炫新技术, 都在我们的编辑器开发中一一使用. 最开始我使用 Angular 和 React 分别作了一版, Angular 因为采用 MV结构, 不太适合 IDE 类型的程序形态, 具体 MV 粉们就别喷我了, 我是那种不太会用框架,架构的土鳖程序员, 从小到大最爱用的语言是 C 语言, 到现在都只会写函数 + 结构 的编程方式, 什么面向对象之类的完全玩不来 (只懂得 struct 里头加 父类的 struct head, 只会写 func ptr ). 用的编程工具也很土鳖, 是我自己写的一个 Vim 的改版叫做 exVim: Home. 所以, 就是因为我的编程思想非常古老, 以至于我无法接受 Angular 的高大上, 而 Polymer 只是对原生的几件事情薄薄的包了一层, 符合我们的初衷. React 主要问题在于双向绑定部分, 不符合我们的项目需求, 否则 React 是个好东西. 估计以后我做网站和其他小东西就靠他. 编译层我们使用 Gulp, 还是上面的观点, 土鳖喜欢简单的东西. Grunt 像我这种用 Vim 写代码的程序员, 敲代码手痛. Gulp 的问题主要在于他的插件编程门槛比较高一些, 毕竟一切都要 streaming, 所以插件的质量普遍不如 Grunt. 好在我们程序员天生喜欢 DIY , 不行自己写呗. 而这些主要的底层技术选型做好以后, 剩下的事情就是没(朝)日(九)没(晚)夜(六)地写代码了. 我们团队缺人, 虽然我编程古怪, 思想老旧, 但团队成员都是自由选择, 自由发挥. 如果你是一枚前端, 后端, 全栈 或者 优秀的游戏引擎工程师, 或者干脆只是喜欢玩酷炫技术的阿宅, 或者看到这个工具右上角那个图标就秒懂我们日后要做成什么样子. 恰巧喜欢厦门这个地方和没有打卡的生活方式, 又碰巧想用 Html5, Nodejs 写写酷炫的东西. 欢迎联系我们. 发简历到: [email protected]', '1415937024');
INSERT INTO `answer_table` VALUES ('224', '186', '184', '我们来分析一下究竟哪些因素让前端开发这么困扰。 先看看界面部分吧。 #1. 命令式还是声明式 毫无疑问,就写界面来说,声明式的代码编写效率远高于命令式: <Panel title=\"Test\">\n <Button label=\"Click me\"/>\n</Panel>\n\nPanel p = new Panel();\np.title = …', '1388997595');
INSERT INTO `answer_table` VALUES ('225', '186', '185', '关键是兼容性。所以说。没几年了。后端是统一环境。前端各种厂商的历史坑。没可比性。话说回来,就算所有人都用一个浏览器的时候。我觉得后端开发也比前端开发复杂多了……知识指数不是一个量级的根本。', '1389052229');
INSERT INTO `answer_table` VALUES ('226', '186', '74aa241d0d503ee8e146cef20aea24db', '我最近看了一些WebComponent的东西,包括Google的Polymer,也尝试了写一点玩具代码。说下感想。 写在前面:WebComponent和MV*的关系其实没那么大,和Angular、React关系也没那么对立,Angular、React关注了比WebComponent多得多的问题,但在我眼里它们并不…', '1415885158');
INSERT INTO `answer_table` VALUES ('227', '186', 'c265de1dfd836bf0f644c8e0123e53a4', '我觉得现在前端已经可以很流畅地像客户端一样开发了. 直接上图比较直接. 这个是我们新开发的引擎工具 <a href=\"https://link.zhihu.com/?target=http%3A//fireball-x.com/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">fireball-x.com/</span><span class=\"invisible\"></span></a>, 整个都是 HTML5 技术做界面. 我想说如果我用 WPF, QT 什么的写的话, 这个项目基本就难产了. 如果你是一个像我一样对操作细节有疯…', '1415937024');
INSERT INTO `answer_table` VALUES ('228', '186', '3ec3b166992a5a90a1083945d2490d38', '本答案仅为反对轮子和轮子的脑残粉而写。【请轮子的脑残黑也自重,不要跑到本答案的评论区叫好。】 微软十几年前早早搞出了HTML Component,但是netscape的余孽创办的W3C极力阻挠。现在好了,大家还在慢慢等Web Component。要是当初那一小撮人老老实实接受…', '1418103385');
INSERT INTO `answer_table` VALUES ('229', '191', '187', '前端目前最火,哪儿都要,变现最快,但能火多久未来是否能继续火还未知。C++最需要积累,发展周期较长,但有足够积累的话,在可预见的将来会有丰厚回报。Java折衷,容易找到工作,可预见的将来能够持续发展,但回报一般,个人认为还容易学偏。', '1410260551');
INSERT INTO `answer_table` VALUES ('230', '191', '0970f947b898ecc0ec035f9126dd4e08', '赚钱指数C++ > Java > 前端', '1410259467');
INSERT INTO `answer_table` VALUES ('231', '191', '78e3b98074a915b222ae1be4ab038a6e', '前端目前最火,哪儿都要,变现最快,但能火多久未来是否能继续火还未知。C++最需要积累,发展周期较长,但有足够积累的话,在可预见的将来会有丰厚回报。Java折衷,容易找到工作,可预见的将来能够持续发展,但回报一般,个人认为还容易学偏。', '1410260551');
INSERT INTO `answer_table` VALUES ('232', '191', '188', '有草台培训班出来的前端找不到工作,也有前端在为各大电商打工,一个月几万块等期权成熟。 有Java工程师每天写着枯燥的代码,也有人搞着高大上的Hadoop。 有C/C++程序员找不到对口的工作,也有人实现了LLVM。 所谓有没有前途,更多的取决于个人的能力。反过…', '1410266177');
INSERT INTO `answer_table` VALUES ('233', '191', '189', '憋不住,上来喷一下。 明明是HR问题,硬是被大V引导成技术问题。 还是需要看供需关系。眼下国内就业市场上,JAVA程序员应该是泛滥成灾的状态吧?而前端工程师由于技能更加复合,存在结构化短缺。c/c++则由于我国IT业在世界产业链的下游,导致从供应角度就不…', '1410274666');
INSERT INTO `answer_table` VALUES ('234', '191', '190', '首先,你的前途不是语言决定的,而是你自己决定的,不管C++还是Java还是XXX语言,你要是学精了,都有前途,就算是汇编,学精了也可以去搞底层驱动、嵌入式,一样有前途 + 钱途 其次,不要把你的前途绑定在某一门语言上,真正牛逼的人,是将语言当做工具,解…', '1410435427');
INSERT INTO `answer_table` VALUES ('235', '197', '192', '系统级别的触摸API只有 touchstart / touchmove / touchend, 和鼠标事件不同的是,touch事件一次可以包含多个touches的信息。其他高级一些的手势判别,例如pinch, zoom, pan 都是在这三个事件的基础上组合出来的。你可以看看 Hammer.JS - Hammer.js 的实现。', '1448506479');
INSERT INTO `answer_table` VALUES ('236', '197', '193', '谢邀 你后面粘贴的那一大堆东西是干什么的……? <a href=\"https://link.zhihu.com/?target=http%3A//blog.csdn.net/iwasdream/article/details/33741859\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">移动应用滑动屏幕方向判断解决方案,JS判断手势方向</a> 《LetMeBaiduItForYou》系列,我都懒得用Google就能找到的答案,你为什么连百度都不用? 以后这种送分题请不要找我来回答了,谢谢。 ', '1448502542');
INSERT INTO `answer_table` VALUES ('237', '197', '194', '泻药。 难道题主要的不是onscroll?', '1448503783');
INSERT INTO `answer_table` VALUES ('238', '197', '239163a3c71e7a8ed54c73ad5b13198f', '系统级别的触摸API只有 touchstart / touchmove / touchend, 和鼠标事件不同的是,touch事件一次可以包含多个touches的信息。其他高级一些的手势判别,例如pinch, zoom, pan 都是在这三个事件的基础上组合出来的。你可以看看 <a href=\"https://link.zhihu.com/?target=http%3A//hammerjs.github.io\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Hammer.JS - Hammer.js</a> 的实现。', '1448506479');
INSERT INTO `answer_table` VALUES ('239', '197', '195', '没有 你需要这个 <a href=\"https://link.zhihu.com/?target=http%3A//hammerjs.github.io/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">hammerjs.github.io/</span><span class=\"invisible\"></span></a>', '1451548768');
INSERT INTO `answer_table` VALUES ('240', '197', '196', '楼上各种文不对题真是服气,好不容易有一个回答对的还是在评论中得到的, <a href=\"https://link.zhihu.com/?target=https%3A//developer.mozilla.org/zh-CN/docs/Web/API/TouchEvent\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">TouchEvent - Web API 接口</a> 当然了,如果要想判断左滑右滑这种,上面提到的 <a href=\"https://link.zhihu.com/?target=http%3A//hammerjs.github.io/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">http://hammerjs.github.io</a>绝对远超需求,如果并不需要那么多事件,用<a href=\"https://link.zhihu.com/?target=http%3A//touch.code.baidu.com/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Touch.js</a>也就够了', '1452147324');
INSERT INTO `answer_table` VALUES ('241', '200', '596c0a5fdd9b36cea06bac348d418824', '我就分享一下我的学习路径吧。1. 当年玩过一段时间的 MSN Space,里面有些地方支持部分 CSS,当时为了做得比别人高端就东拼西凑搞了一点。这期间属于完全盲目摸索。2. 看了一遍《CSS Mastery》,基本入门了。《CSS 禅意花园》翻了几页就丢一边了,感觉没什么意思。期间通过做 WordPress 主题来实践,并且积累了一些基本的兼容性知识。3. 后面就没看过书了,工作了开始看了一点 W3C 的 CSS 规范。查文档主要就是 MDN / MSDN / http://QuirksMode.org / Can I Use / StackOverflow 等在线资源,包括一些博客的文章(CSS Tricks/ALA/...)。4. CSS 的书说真的就看完整看过一本,接下来 @CSS魔法 翻译的《CSS Secrets》可能会搞来看看(广告费请发微信红包给我)。我觉得挺自然而然的,也可能是当时开始学的时候也没有现在这么多框架之类的东西,不太容易混乱。循序渐进吧……--(其实我想吐槽题主的排版)', '1445426193');
INSERT INTO `answer_table` VALUES ('242', '200', '37b16179eb39f5f21ecf6a6416350639', '谢邀 1. 注意排版 2. CSS 是一个了不起的发明 3. 当初,HTML 放内容,CSS 用来控制样式,组合起来做排版用的 4. 你提到的 line-height 居中法其实是一个 hack,用途有限 5. CSS 随着时代进化,有些事情还是做不来,但能做的事情越来越多了 6. CSS 的进化与…', '1445421847');
INSERT INTO `answer_table` VALUES ('243', '200', '596c0a5fdd9b36cea06bac348d418824', '我就分享一下我的学习路径吧。 1. 当年玩过一段时间的 MSN Space,里面有些地方支持部分 CSS,当时为了做得比别人高端就东拼西凑搞了一点。这期间属于完全盲目摸索。 2. 看了一遍《CSS Mastery》,基本入门了。《CSS 禅意花园》翻了几页就丢一边了,感觉没…', '1445426193');
INSERT INTO `answer_table` VALUES ('244', '200', '198', '如果真的能看懂css了,个人建议先不要看bootstrap,毕竟比较工程化,了解选择器的组合使用就够了 去themeforest找几个高销量主题,研究一下,就知道什么是优美的css了,当初甚至颠覆了我对css的认知,才发现这门语言应该是什么样的 说点反对的: 1、『为了…', '1445429785');
INSERT INTO `answer_table` VALUES ('245', '200', '74aa241d0d503ee8e146cef20aea24db', '蟹妖 我也忘了CSS怎么开始学的,大概就是早些时候(06、07年)基本都还在用传说中的table布局,后来忘了怎么渐渐开始知道CSS了,怎么学习呢?练呗,找了很多网页模板(那时候很流行,就是一个设计稿,甚至只有JPG的一张图)来抄,抄的越像越好,蛋疼做了几…', '1445479958');
INSERT INTO `answer_table` VALUES ('246', '200', '199', '谢邀, 这问题想回答很久了, 奈何项目比较忙, 今天终于可以忙里偷闲作答下: 图多预警: --------------------------------------------------------------正文分割线------------------------------------------------------------ 题主说了这么多挺不容…', '1446269446');
INSERT INTO `answer_table` VALUES ('247', '205', '201', '看题主问的是H5游戏广告定制,不知道题主是想要免费的还是收费的?如果是免费的,除了上面说的那几个定制工具外,可以尝试用一下新的这个工具?叫24好玩-还原最简单的游戏乐趣也是免费定制H5游戏的,相对来说设计风格我比较喜欢简约风的,像下面这样(随便截了个图)里面的话操作也不是很复杂,替换素材就像更换头像一样。还能设置发奖方式,基本上也能满足发奖需求了。总之操作下来感觉比市面上流行的那些定制工具要好看一点,操作也更简单一点,做出来游戏的统计也算全面。不过如果题主你要做更精细或者个性化的可能就要找高级定制了,免费定制满足不了你~然后!这个网站上还有自己的高级定制服务24好玩-做最懂你的微信游戏定制 ,如果需要的话你可以戳一下,不过这个我就没有定制过了...', '1459849510');
INSERT INTO `answer_table` VALUES ('248', '205', '202', '开心推<a href=\"https://link.zhihu.com/?target=http%3A//www.kxtui.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">kxtui.com</span><span class=\"invisible\"></span></a>,做h5游戏很专业', '1455691701');
INSERT INTO `answer_table` VALUES ('249', '205', '203', '用了多个网站,还是觉得开心推比较实用,最主要选择多,模板量多。但还是有不足的地方。易企秀的界面好看一点。', '1455851418');
INSERT INTO `answer_table` VALUES ('250', '205', 'ba7bdba0c31d75a3d4aa6e8cf74aaf2e', '看题主问的是H5游戏广告定制,不知道题主是想要免费的还是收费的? 如果是免费的,除了上面说的那几个定制工具外,可以尝试用一下新的这个工具?叫<b><u><a href=\"https://link.zhihu.com/?target=http%3A//24haowan.shanyougame.com/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">24好玩-还原最简单的游戏乐趣</a></u></b>也是免费定制H5游戏的,相对来说设计风格我比较喜欢简约风的,像下面这样(随便…', '1459849510');
INSERT INTO `answer_table` VALUES ('251', '205', '0', '互动推-专做微信H5游戏开发、专注微信互动营销,<a href=\"https://link.zhihu.com/?target=http%3A//www.hudongtui.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">hudongtui.com</span><span class=\"invisible\"></span></a>。', '1498555958');
INSERT INTO `answer_table` VALUES ('252', '205', '204', '定制游戏非ih5莫属,专业级工具,定制服务还不错。游戏广告吸不吸引人,主要还是看你的玩法够不够新颖吧。模板一套满大街的营销游戏,不需要定制啦', '1517990778');
INSERT INTO `answer_table` VALUES ('253', '211', '206', '这跟性别有关系吗?而且女程序员又这么吃香', '1433222732');
INSERT INTO `answer_table` VALUES ('254', '211', '207', '奔三女码农一枚。。。公司的it男比较多。。。尽情选择。。。噗哈哈~~~-------------------------华丽丽的分割线----------update 2015-06-02-------------------------------------------在男生多的地方工作真的比较轻松,但有时候你也必须像一个男人一样跟…', '1432878291');
INSERT INTO `answer_table` VALUES ('255', '211', '208', '如果自身对编程感兴趣的话,作为女生去学HTML5应该比男生要有优势,主要有以下几点: 1)女生天生审美和色彩感觉强过一般的男生,所以女生很多都从事设计; 2)HTML5一般都是指移动端开发,而移动端开发重交互,而女生对交互的理解也比男生要强些,或者说更…', '1432897722');
INSERT INTO `answer_table` VALUES ('256', '211', '209', '做网页做前端啊…… 你学HTML5难道还想做司机吗?', '1433163661');
INSERT INTO `answer_table` VALUES ('257', '211', '7bf40d52b7f7c4ba3823d0c6ab84b39b', '这跟性别有关系吗?而且女程序员又这么吃香 ', '1433222732');
INSERT INTO `answer_table` VALUES ('258', '211', '210', '总有这种很迷茫的人问这种很迷茫的问题搞得别人也很迷茫,算了,折叠我把', '1433321466');
INSERT INTO `answer_table` VALUES ('259', '217', '212', '一个学期前我也和楼主差不多不知道这些都是啥,一个学期之后差不多都弄懂了,来讲讲自己的理解吧 > < 因为接触的时间不是很长,有错误的地方欢迎指正~首先要知道网站访问大概是什么个过程:假设你在浏览器地址栏输入这个问题的地址http://www.zhihu.com/question/22689579\n访问过程和下图差不多,浏览器和服务器交流,服务器和数据库交流(有时候数据库就在服务器那台机子上)HTML 与 CSS你家电脑拿到一个 html (就是上图 HTTP 响应的 body 里的内容)之后,就会对它进行解析渲染。HTML 就是一种标记语言。类比一下,大家在论坛上经常会用一些代码来添加富文本内容,举一些栗子:[img]图片地址[/img]\n 用来贴图[url]超链接[/url]\n 用来贴地址[del]呵呵[/del]\n 表示标签里的文字应该被删掉(默认添加删除线效果)这种论坛代码也是一种标记语言,HTML 的作用就和它差不多。服务器返回给你的html文件里面,写的是一些代码,大概是这样的:浏览器拿到这些代码之后,分析一下给你渲染好页面显示出来,如果不用css,效果是这样的,按照浏览器默认的样式显示出列表、图片、超链接、输入框、按钮等等:是不是觉得默认样式有点看瞎狗眼呢……所以很多时候我们需要自定义样式,现行通用的规定样式的语言是CSS,我们可以用它写一些定义样式的代码,然后在 html 文件里用一个<link>标签把这些规定样式的 CSS 代码与表达内容语义的 HTML 代码关联起来,然后你就能看到一个符合人类正常审美的页面了:CSS 代码的格式基本是属性:值\n比如知乎顶上那个蓝色的导航条,它的 CSS 大约是这样的第一个属性对应的代码翻译成人话,就是它的位置(position)应该是不动(fixed)的,浏览器会兢兢业业地去实现这段代码要求实现的效果,\n所以你在页面上翻来翻去顶上那个导航条都会死死地黏在窗口顶部不跟着滚动。再拿里面的其他几个属性做栗子解释一下就是:left 和 top \n为零指明这个导航条要紧贴着窗口的左上角width 和 height 指定这个导航条的宽和高background \n指明这个导航条的背景是一种渐变的蓝色浏览器就会根据这些 CSS 代码,“画”出对应的样式。HTML 5 与 XHTML像人的语言一样,网络上的网页里的 HTML 代码也不一定是标准的,好比有时候你发音不太标准,别人会去猜测你说的到底是什么一样,有些时候前端程序猿不小心写错了 HTML,浏览器也会试图猜测他们原来想写的是什么,做对应的渲染,而猜是要有一个常识做依据的。加上有些浏览器支持一些标签,有一些又不支持,以及其他混乱的情况,为了防止大家鸡同鸭讲,我们需要对 HTML 代码里能有什么标签,标签怎么写,标签可以有什么属性这些东西有一定的共识,建立一个通行的标准,HTML5 就是其中一个比较新的标准。这个标准新加了很多可以用的标签和属性,然后各大浏览器也吭哧吭哧按这个标准去实现了很多这些新加的标签和属性,本来前端程序员要写一堆代码去实现的效果,现在浏览器都给你实现好了,只要写两三行,调用一下浏览器给你实现的部分就能搞定,简单愉快,所以很多人都在热情地推广这个标准~(当然新标准也不可能是完美的,总会有一些问题,怕跑题这里按下不表~)至于 XHTML,就是 HTML 的近亲 XML 和 HTML 自己的杂交品种,对语法要求比较严格,并且为了兼容 XML,在语法上与 HTML 有一些不同~JavaScript 与浏览器脚本有了表示内容和语义的 HTML,规定样式的 CSS,得到的是一个静态的页面,没什么动画(其实用 CSS 还是可以有一些动画的,不过这个跑题了),按 F5 才会刷新数据,都 21世纪了,这么呆板单调的网页怎么能展现我大智人种族的创造性口胡!于是我们有了 Javascript(JS) 来给页面添加一些动态的效果,比如知乎问题的标签,鼠标移上去会弹出一个小窗口,这个就是 JS 实现的效果啦。浏览器都会帮你实现一些 JS 可以用的工具(函数,对象什么的),你只要写一些 JS 的代码,保存在 xxx.js 里,在 html 文件中用 \n<script> 关联进来就可以用了,像上图这个效果应该就包括了 鼠标悬停到标签上时创建一个新的 <div> 小窗口 用 JS \n向知乎服务器发送一个请求,得到这个小窗口应该显示的数据,放在这个小窗口里(这就是所谓的AJAX,不用刷新就能与服务器进行交互,更新页面的一小部分~)浏览器拿到这样的代码,就会解析并实现出相应的效果,楼主问的浏览器脚本,指的就是这样子的代码。其实用来写浏览器脚本的,也不是非得JavaScript 不可,当年还为到底用什么语言写这种代码有过一段战火纷飞的时期,但现在尘埃落定,各大浏览器都默认了:请用 \nJS 写这些动态效果的代码给我解析~以上就是前端部分的内容,下面简述一下后端的东西吧> <Web Server 和 Web Services浏览器给服务器发一个请求,服务器不是一看就知道怎么响应的。首先这些请求和响应要有一个通用的写法,也就是要有一个协议,常用的是 HTTP 协议。像最前面的图,服务器的响应写了一个状态码 200 OK ,是 HTTP 协议里约定俗成的一个东西,服务器写 200 OK 在响应里,表示“你请求的这个东西我有”,如果是404 Not Found,就是“你请求的这个东西我这里没有”。HTTP 响应里还包括很多东西,比如 Content-type 表示服务器发过来的文件类型是什么(文本?动画?图片?音频?),这样发过去了人家浏览器好知道怎么展示给用户看。人家服务器怎么知道按协议要写什么东西进去呢,这就是 Web Server 干活的时候了。形象化一下HTTP响应,大概就长这样:再上个锤子,浏览器和服务器之间请求响应的过程大致是长这样的,右下角的那些东西就是由 Web Server 生成的(服务器脚本可以做一些改动,但这些一般是 Web Server 的份内活):再比如说很多时候你访问一个网站,浏览器里输的地址并没有写明你请求的文件,比如这个问题的地址是:http://www.zhihu.com/question/22689579\n但知乎的服务器其实返回了一个html给你,服务器怎么知道这个地址对应要返回什么样的 html 代码给你的?也是 Web Server 干的活。除了浏览器输地址敲回车这种赤裸裸的访问,客户端与服务器的交互还有很多种,比如:前面提到的用 JS 完成的 AJAX,有点像浏览器和服务器之间的悄悄话~还有其他应用软件与服务器的交互,比如:微信、QQ 与腾讯的服务器的交互网游客户端与网游公司服务器的交互搜索引擎用来搜集网页信息的程序(爬虫)与各种各样的网站服务器的交互只要你知道用什么地址访问、怎样访问人家的服务器,并且有相应权限,你也可以自己写一些程序去和他们的服务器交互(比如用微博API - 新浪微博API获取微博,开发第三方应用或者做数据分析)。从这些栗子里可以看出,客户端与服务器的交互的主体、客体、载体是五花八门的:服务器可以是大型机也可以是个人电脑,只要能跑相应的程序就行客户端像前面举的栗子里一样,可以是各种软件,而且这些软件不一定运行在个人电脑上,也可以是手机、平板、智能穿戴设备等等有时候不是传生成好的 HTML 或者其他服务器上已经有的文件,而是传输经过一定逻辑处理后生成的字符串或者其他各种封装好的数据像前面提到的 HTML 需要有一定标准一样,为了防止混乱和鸡同鸭讲,我们又需要先对这些机器需要怎么交互达成一定共识,再让它们进行交流。人与人之间通信,需要先有一种大家都认识的写法(比如简体字/繁体字)和一种彼此都懂的语言(比如普通话/广东话)。要让这些形形色色的机器能够通过网络进行交互,我们就需要指明一种协议(比如 HTTP/HTTPS)和一种数据封装格式(比如 HTML/XML),Web Server 提供的 Web Service,指的就是这种协议+格式的交流体系。不过 Web Service 的生态系统和 HTML 的标准不一样,用户可以选择的协议和数据封装格式更多,普通的网站访问用的 HTTP + HTML 只是其中一种,一些封闭系统内的交流还可以自己定义一个协议和格式来用(比如 QQ)。Web Service 传输的数据再经由本地客户端(浏览器、QQ/微信,网游客户端等)的分析渲染,就能够以普通人能够理解的形式展现出来。此外还有一些 Web Service 并不是为普通用户设计的,像前面提到的微博API,是用来给程序猿进行二次开发的~ 除了提供 Web Service, Web Server 还会兼顾很多功能,包括提供缓存,平衡负载,这样在访问量比较大的时候能有有条不紊地接客。常见的现成的 Web Server 有开源的 Apache、Nginx和微软的IIS,你也可以用一些工具(比如 Node.js )自己定制一个。因为 Web Server 需要比较好的性能,所以投产时用的 Web Server 通常是C/C++/Java写的,但是其实很多语言都可以写,而且配合上语言底层的优化和好的模型,其他语言写的 Web Server也可以有不错的表现。PHP ,服务器脚本,Web Framework开头那张图里服务器接到请求之后可以给访客发送对应的文件,但21世纪的服务器怎么可能只会“接请求-发文件”这么弱智的一招呢,人家还可以处理你上传来的文件的!还可以接受你发过来的各种请求,去操作服务器本地的文件or数据库的!要干这些事,自然服务器那边也少不了要有代码了,这些代码就是服务器脚本。前面说的 Web Service 传输的数据,主要也是由服务器脚本生成,再交由 Web Server ,按照某种协议套好整个响应的格式,返回给客户端的。同一个网址,每个人看到的页面不一定是一样的,比如知乎首页的网址都是http://www.zhihu.com/\n但是没登陆和登陆之后看到的东西不一样,登陆之后每个人看到的导航栏的用户信息,关注的动态,都不一样。服务器脚本可以对这些不同的状态,生成不同的页面,交给 Web Server 返回给浏览器。知乎的主页给大家看到的 html 整体来说是差不多的,都有导航栏,左边是关注的动态,右边是广告和边栏,每一块的整体构造大同小异,只是一些地方内容有所区别。服务器脚本就是利用已知的数据,在这些因人而异的地方填入相应的内容,生成给每个人看的页面。比如我的主页,导航栏右边的头像和名字跟别人看到的不一样,就是因为这块地方有一个放图片的<img>标签和一个写名字的<span>标签,服务器脚本在查询本地的数据之后给我返回的页面里<img>的标签填了我头像的图片链接,<span>标签里填了我的名字,给别人的页面就填其他链接、其他名字,这样每个人看到的页面就不一样了。PHP 就是一种常见的用来写服务器脚本的语言,其实只要是能拿来写大家传输数据的通用接口(CGI)的语言都可以用来写服务器脚本(也就是说几乎所有编程语言都可以写 = =b),只是因为现成工具的丰富程度和专攻程度不一样,所以有一些语言在写服务器端脚本的时候会比较热门。为了方便,我们在写服务器脚本的时候,通常还会用个同语言写的 Web Framework 来处理各种细节,防御一些常见的攻击,提供跨站认证(比如用已有的微博账号注册其他网站)的接口,利用cookie处理登陆状态和用户设置,生成网页模版之类的。如果你用 C# 或者 Visual Basic 写服务器脚本,就可以用 http://ASP.NET 这个框架实现这些功能,帮你省点麻烦。不过现在不少人是反过来为了一个好用的 Web Framework 去选择它对应的服务器脚本语言的。一个普通网站访问的过程简单概括一下,对于我们普通的网站访问,涉及到的技术就是:用户操作浏览器访问,浏览器向服务器发出一个 HTTP 请求;服务器接收到 HTTP 请求,Web Server 进行相应的初步处理,使用服务器脚本生成页面;服务器脚本(利用Web Framework)调用本地和客户端传来的数据,生成页面;Web Server 将生成的页面作为 HTTP 响应的 body,根据不同的处理结果生成 HTTP header,发回给客户端;客户端(浏览器)接收到 HTTP 响应,通常第一个请求得到的 HTTP 响应的 body 里是 HTML 代码,于是对 HTML 代码开始解析;解析过程中遇到引用的服务器上的资源(额外的 CSS、JS代码,图片、音视频,附件等),再向 Web Server 发送请求,Web Server 找到对应的文件,发送回来;浏览器解析 HTML 包含的内容,用得到的 CSS 代码进行外观上的进一步渲染,JS 代码也可能会对外观进行一定的处理;用户与页面交互(点击,悬停等等)时,JS 代码对此作出一定的反应,添加特效与动画;交互的过程中可能需要向服务器索取或提交额外的数据(局部的刷新,类似微博的新消息通知),一般不是跳转就是通过 JS 代码(响应某个动作或者定时)向 Web Server 发送请求,Web Server 再用服务器脚本进行处理(生成资源or写入数据之类的),把资源返回给客户端,客户端用得到的资源来实现动态效果或其他改变。注意这只是小网站里比较常见的模型,大网站为了解决规模问题还会有很多处理,每个环节都会有一些细微的差异,中间还会使用各种各样的工具减轻服务器的压力,提高效率,方便日常维护~延伸阅读 —— 那些看花眼的名词为了方便调试,很多 Web Framework 会自带一个简单的 Web Server,或者有些 Web Server 会自带一个简单的 Web\n Framework ,实际部署到服务器上开放使用的时候为了性能或者安全等多方面的考虑,可以把内置的 Web Server 换成其他的,比如 \nApache 或者 Nginx (举个栗子,知乎用的是 Tornado 做 Framework,Server 换成了 Nginx,见知乎使用了哪些框架和开源库?)。如果是开源的东西,还可以在遵守开源协议的前提下自己改一下再用~因为后端不像前端已经有 HTML + CSS + JS 这样的既定事实标准,服务器脚本与 Web Framework \n的选择很多,所以新手会听到很多眼花缭乱的技术名词的地方多在这里~ \n举一些栗子,早年常见的服务器端语言有:开源的 PHPSun 公司的 JSP 中使用的 Java微软的 ASP 中使用的 VBScript现在在这方面的应用热起来的语言有 Python,对应常见的 Framework 包括知乎和Quora有用到的 Tornado(其实是自带 Framework 的 Web Server),社区很成熟的 Django (用户包括 Instagram、Pinterest)等Ruby,一般都用 Rails 这个 Framework,用户包括 Github、早期的 Twitter 等逆天的 JavaScript,有了 Node.js 这个平台,Web Server、服务器脚本和浏览器脚本全都可以用\n JavaScript 来写……Node.js上最常用的 Framework是Express微软家的则跟着 http://ASP.NET 转移到了C# 或者 Visual BasicErlang,擅长大规模的并发,不少游戏公司拿来写服务器,靠几十个工程师支撑几亿用户的WhatsApp也是用的这个~几种常见的架构包括:LAMP = Linux + Apache + MySQL + PHP(P还可能是Python或Perl。有时候L会改成W=Windows。),也就是服务器上的操作系统是 Linux,Web Server 用 Apache,数据库用 MySQL,服务器脚本用 PHP,这些都是开源技术,网站起步时用起来的成本会比较低,所以是普通网站里非常常见的架构(虽然对于发展得很大的网站会遇到很多瓶颈),Facebook就是这种,淘宝也曾经是。J2EE,Java 世界的架构,通常是企业用的(银行、大型公司,.etc),比较常见地还会搭配一种 UNIX 做操作系统,Apache 做 Web Server,Tomcat 转换 JSP 到 Java 给服务器程序用(其实它也自带 Web Server),Oracle 数据库等等。不一定拿来建站,常常用来提供企业里的各种需要用到网络的业务。我们学校教务系统就是用J2EE做的=。= 淘宝现在也是从LAMP转型到了这个。http://ASP.NET,微软家的架构,通常会搭配 Windows Server 操作系统,SQL Server 数据库,IIS 做 Web Server。StackOverflow和京东(曾经)就是这个架构。神奇的MEAN架构,MongoDB做数据库,Express做 Web Framework,Angular 做前端的 JavaScript 框架,Node.js 用于编写 Web Server。神奇之处在于这几个东西的语言都是 JavaScript (MongoDB的实现不是,但与外界沟通用的语言是)。因为是比较新的架构,还有待时间的考验,不过被很多人(尤其是靠 JavaScript 吃饭的前端程序猿们)热切关注。一般来说重点不在技术而且在乎成本的新网站比较喜欢用 LAMP,重视安全稳定和速度的企业和机构喜欢 J2EE,想省事的网站喜欢 http://ASP.NET,比较 Geek 的网站和创业公司喜欢折腾各种 Python、Ruby、Node.js世界的东西,Google 这样现成的技术都解决不了需求的超大型网站就自己折腾解决方案。虽然可以用的语言和所属体系五花八门,其实服务器端程序要做的事情本质上都差不多的,就好比自然世界中要表达“吃过了没”这句话的意思,你可以用各种各样的语言在各种各样的场景里表达出来~', '1391980893');
INSERT INTO `answer_table` VALUES ('260', '217', '9f89524aceaf1245a51758d7bddd9ec2', '一个学期前我也和楼主差不多不知道这些都是啥,一个学期之后差不多都弄懂了,来讲讲自己的理解吧 > < 因为接触的时间不是很长,有错误的地方欢迎指正~ 首先要知道网站访问大概是什么个过程: 假设你在浏览器地址栏输入这个问题的地址 http://www.zhihu.com/…', '1391980893');
INSERT INTO `answer_table` VALUES ('261', '217', '213', '先普及用户<b>通过 浏览器 </b><b>访问网页 </b>的过程: 网页内容是通过<b>服务器运算</b>得出的结果,将结果(网页代码)传输给浏览器,网页代码再通过<b>浏览器</b><b>运算</b>(计算、渲染),最终展示在用户的眼前的。 至此,我们知道了有2个运算过程: 1、服务器运算 2、浏览器运算 而让电脑(…', '1403972364');
INSERT INTO `answer_table` VALUES ('262', '217', '214', '就说下前台这三个,html是名词,css是形容词,javascript是动词。三个互相配合才是一句句子', '1420635563');
INSERT INTO `answer_table` VALUES ('263', '217', '215', '<b>以下是个人当时了解网站开发结构时的一份记录,看到本题就想贴出来,供大家一起参考和纠错,至于文笔和格式就不要苛刻了...毕竟只是一份简单的记录。</b> <b><u>文字最后有一张整体结构图,如果没时间看字,希望这张图能有所帮助</u></b>。 <b>正文:</b><b>内容说明</b>本记录描述本人了解…', '1432534826');
INSERT INTO `answer_table` VALUES ('264', '217', '216', '今天看到了一张特别棒的图(<b>点击查看大图</b>),这张图理清了Web应用中所涉及的常用知识,有很多计算机软件基础知识图片源自 Brendan Fortuner 你说的这几个对应的位置在图上如下(点击看大图): 至于 XHTML 和 HTML5 其实就是 HTML 发展过程中的不同版本~关…', '1505125882');
INSERT INTO `answer_table` VALUES ('265', '222', '218', '先用 canvas,然后 fallback 到用两张图片,一张正常,一张模糊。', '1398397698');
INSERT INTO `answer_table` VALUES ('266', '222', '3ec3b166992a5a90a1083945d2490d38', '应该是用了某个库可以把元素的内容在canvas上绘制,并通过算法加以blur。', '1398364105');
INSERT INTO `answer_table` VALUES ('267', '222', '19f75715ca1c98a89fa366efbe157053', '先用 canvas,然后 fallback 到用两张图片,一张正常,一张模糊。', '1398397698');
INSERT INTO `answer_table` VALUES ('268', '222', '219', '简单的做法是用CSS filter blur,只是浏览器有兼容问题,所以可以再fallback到svg/canvas/image', '1398400621');
INSERT INTO `answer_table` VALUES ('269', '222', '220', '这里有两个Medium Scroll Effect,建议都可以参考一下: <a href=\"https://link.zhihu.com/?target=http%3A//codepen.io/andreasstorm/pen/pyjEh\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Medium Scroll Effect</a><a href=\"https://link.zhihu.com/?target=http%3A//codepen.io/bassta/pen/iIskw\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Medium.com style header effect</a>', '1398401975');
INSERT INTO `answer_table` VALUES ('270', '222', '221', '苹果官方有demo的 使用coreimage的滤镜或者coregraphics就可以实现', '1428030546');
INSERT INTO `answer_table` VALUES ('271', '227', '83a3b10a446f936a77f07f78870b5eec', 'http://repair.ruchope.org整个建站过程不超过三天,使用Wordpress建站系统,使用Apple IOS7风格的主题使用的工具有Wordpress建站系统http://cn.wordpress.orgSatellite7模板http://pan.baidu.com/s/1sj4Oxlj我的站点是在一台Linux服务器上,不过初学者推荐使用WAMP,也方便在自己的电脑上给你老师做展示WAMP网站服务器软件http://wampserver.com如何使用WAMP搭建Wordpress站点http://jingyan.baidu.com/search?word=wamp+wordpress========================Satellite7模板是付费模版,做作业可以,切勿商业使用想学习Web开发的可以关注我,查看我的其他回答========================最后劝题主心不要太大罗马不是一日建成的不要总想着第一次就要惊世骇俗,一鸣惊人踏踏实实学习,一步一步来我的第一个网页就是用html和css纯手写的,很简单,没有js然后看书不推荐head first系列,太多哗众取宠的内容和词语,只是读起来轻松,此外多读无益一边学习一边实践祝题主早日成才========================最后抱怨一下知乎上怎么越来越多讽刺挖苦装逼秀优越的回答人与人之间最基本的信任友爱互帮互助哪里去了', '1428297095');
INSERT INTO `answer_table` VALUES ('272', '227', '223', '还有一个月,做出一个网站是可以的。不过从可行性的角度来说,如果采用以下的方式会更好一点。 1.网站尽量不要做得页面太多,太复杂,里面的页面几个就好,时间不用花的特别多在内容的扩展上而更多的放在有限界面的美观上。 2.想办法网上下载以下别人的网站…', '1428283233');
INSERT INTO `answer_table` VALUES ('273', '227', '83a3b10a446f936a77f07f78870b5eec', '<a href=\"https://link.zhihu.com/?target=http%3A//repair.ruchope.org\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">repair.ruchope.org</span><span class=\"invisible\"></span></a> 整个建站过程不超过三天,使用Wordpress建站系统,使用Apple IOS7风格的主题 使用的工具有 Wordpress建站系统 <a href=\"https://link.zhihu.com/?target=http%3A//cn.wordpress.org\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">cn.wordpress.org</span><span class=\"invisible\"></span></a> Satellite7模板 <a href=\"https://link.zhihu.com/?target=http%3A//pan.baidu.com/s/1sj4Oxlj\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">pan.baidu.com/s/1sj4Oxl</span><span class=\"invisible\">j</span><span class=\"ellipsis\"></span></a> 我的站点是在一台Linux服务器上,不过初学者推荐使用WAMP,也…', '1428297095');
INSERT INTO `answer_table` VALUES ('274', '227', '224', '<b>我觉得我还是有资格回答这个问题的!虽然过程无法想象!结果还算满意吧......</b> <b>本人没有任何网站建设的基础;但是却在一个月内完成自己满意的网站!</b> <b><u>从设计到建设-甚至手机端!</u></b> <b><u>以下是手机端</u></b> ', '1429324026');
INSERT INTO `answer_table` VALUES ('275', '227', '225', '今天18号了,不知道题主目前的进度怎么样了。有两个实战教程我觉得对题主目前是有用的,能立刻看到效果。 基于我的理解,楼主的意思大概就是做几个简洁大气布局风格页面介绍kindle,不需要做什么后台管理系统。 So,我建议实战布局练手出发,楼主可以先仿照…', '1429360978');
INSERT INTO `answer_table` VALUES ('276', '227', '226', '尽心尽力地装扮自己的QQ空间', '1449054765');
INSERT INTO `answer_table` VALUES ('277', '228', 'c5198d4e9c0145aee04dd53cc6590edd', '我们来分析一下究竟哪些因素让前端开发这么困扰。先看看界面部分吧。#1. 命令式还是声明式毫无疑问,就写界面来说,声明式的代码编写效率远高于命令式:<Panel title=\"Test\">\n <Button label=\"Click me\"/>\n</Panel>\n\nPanel p = new Panel();\np.title = \"Test\";\nButton b = new Button();\nb.label = \"Click me\";\np.add(b);\n第一种容易写,容易理解。#2. 控件标签集不管你的软件面向什么行业,至少都要一些控件,或者是基本的表单输入,或者是复杂的比如树形表格,里面还可以跨行跨列渲染的。如果我们有一套映射到控件的标签,那么写代码是肯定会简单很多的,比如说,在HTML里面没有原生的Panel,那么,刚才第一段代码可能就要变成:<div class=\"panel panel-default\">\n <div class=\"panel-heading\">\n <h3 class=\"panel-title\">Simple HTML Loader</h3>\n </div>\n <div class=\"panel-body\">\n <button>Click me</button>\n </div>\n</div>\n我们为了使得界面代码编写更高效,毫无疑问会倾向于把这么一堆东西简化成一个Panel标签,这样就会逐步建立一套面向自己行业的标签集。#3. 带逻辑的控件刚才这个例子为什么简单呢,因为它只是一个普通容器,静态的,不带逻辑,所以即使你用什么静态模板也能解决问题。如果复杂一点,是一个TabNavigator,就要考虑切换的事件,再复杂一些是个树形表格,那就更麻烦了。我们来看jQuery提供的插件方式实现TabNaviator:<div id=\"tabs\">\n <ul>\n <li><a href=\"#tabs-1\">Nunc tincidunt</a></li>\n <li><a href=\"#tabs-2\">Proin dolor</a></li>\n <li><a href=\"#tabs-3\">Aenean lacinia</a></li>\n </ul>\n <div id=\"tabs-1\">\n </div>\n <div id=\"tabs-2\">\n </div>\n <div id=\"tabs-3\">\n </div>\n</div>\n\n <script>\n $(function() {\n $( \"#tabs\" ).tabs();\n });\n </script>\n从我个人的角度看,这种代码很愚蠢。蠢在何处呢?HTML这类声明式的界面描述语言,写起来本来应当直观一些的,但是被这么一搞,又往命令式的方向去了。而且两种东西混杂,声明和渲染居然分了两处,又增加了维护的成本。难道就没有别的办法来解决这个问题吗?我们看看其他语言和框架,比如Flex和Silverlight。<mx:TabNavigator id=\"tn\" width=\"100%\" height=\"100%\">\n <!-- Define each panel using a VBox container. -->\n <mx:VBox label=\"Panel 1\">\n <mx:Label text=\"TabNavigator container panel 1\"/>\n </mx:VBox>\n\n <mx:VBox label=\"Panel 2\">\n <mx:Label text=\"TabNavigator container panel 2\"/>\n </mx:VBox>\n\n <mx:VBox label=\"Panel 3\">\n <mx:Label text=\"TabNavigator container panel 3\"/>\n </mx:VBox>\n</mx:TabNavigator>\n上面这段是Flex里面的TabNavigator,在这个链接底部有运行结果:TabNavigator为什么它可以看不到逻辑的代码,但是又确实能有动作呢,因为它的实现类是mx.containers.TabNavigator,在这个代码里,可以自己手动去处理一切内部实现,但是暴露给业务开发人员的就是这么简单的标签。我们看看在HTML和JS这个体系里用什么办法去解决。不要提JSF这类服务端技术,因为它的思路也是不好的,展示代码的生成和渲染都不在一个地方,会有很多问题。#4. Polymer与Angular早期IE里有HTC,也就是HTML Components,因为别的浏览器厂商不喜欢,所以快要消亡了。在W3C新的HTML规范里,有一个Web Components,参见这里:Introduction to Web Components这个东西跟HTC的思想本出同源,它引入了Custom Elements和Shadow DOM这两个概念,也就是说,我可以自定义一个标签,然后在内部随便怎么折腾,用这个标签的人可以很方便。很美好,是不是,但是只适用于比较新的浏览器,基于这个理念架构的框架Polymer的目标也只是支持一些比较新的浏览器。Polymer那么怎么办呢?我们还有Angular,它也可以自定义标签,然后用directive的方式写内部实现。<tabs>\n <pane title=\"Localization\">\n </pane>\n <pane title=\"Pluralization\">\n </pane>\n</tabs>\n<script id=\"components.js\">\n angular.module(\'components\', [])\n\n .directive(\'tabs\', function() {\n return {\n restrict: \'E\',\n transclude: true,\n scope: {},\n controller: function($scope, $element) {\n var panes = $scope.panes = [];\n\n $scope.select = function(pane) {\n angular.forEach(panes, function(pane) {\n pane.selected = false;\n });\n pane.selected = true;\n }\n\n this.addPane = function(pane) {\n if (panes.length == 0) $scope.select(pane);\n panes.push(pane);\n }\n },\n template:\n \'<div class=\"tabbable\">\' +\n \'<ul class=\"nav nav-tabs\">\' +\n \'<li ng-repeat=\"pane in panes\" ng-class=\"{active:pane.selected}\">\'+\n \'<a href=\"\" ng-click=\"select(pane)\">{{pane.title}}</a>\' +\n \'</li>\' +\n \'</ul>\' +\n \'<div class=\"tab-content\" ng-transclude></div>\' +\n \'</div>\',\n replace: true\n };\n })\n\n .directive(\'pane\', function() {\n return {\n require: \'^tabs\',\n restrict: \'E\',\n transclude: true,\n scope: { title: \'@\' },\n link: function(scope, element, attrs, tabsCtrl) {\n tabsCtrl.addPane(scope);\n },\n template:\n \'<div class=\"tab-pane\" ng-class=\"{active: selected}\" ng-transclude>\' +\n \'</div>\',\n replace: true\n };\n })\n</script>\n这么一来,也就有些接近我们的目标了,看到现在,我们还记得目标是什么吗?是尽可能精简的面向领域的容器和控件标签集,有了这个,写界面代码才能更简单。#5. 为什么HTML默认标签集这么小事情结束了吗?没有呢。我们的HTML体系为什么标签集这么小?因为他要解决的是通用领域的东西,怎样才能通用呢?要的是尽可能无歧义。怎样的东西会没有歧义?那就是它的含义尽可能少,比如说单行文本输入框,总没人对它有歧义吧,它无非就是可以设置最大最小长度,是否只读,是否禁用,最多通过某种规则来限制输入字符,最多最多,也就这些可做的了,大家都认同。Button就不同了,一开始他是<input type=\"button\" value=\"Click\"/>,后来大家想要各种各样的button,于是开放了<button></button>这样的标签,可以在里面写各种HTML,我记得当时很多人在中间加上下和左右两层marquee,简直玩坏了。现在HTML里面又有了数字输入,日期时间输入这样的东西,数字的没什么疑问,就是最大最小值,步进值等等,日期时间这个就复杂了,它怎么做,都有人不满意。有人要日期排左边,有人要时间排上面,有人只要年和月,有人只要分和秒。有人要点空白表示选中,有人要双击日期表示选中,还有人想用农历、波斯历、尼泊尔历,简直没完了,还不如不做,谁要谁自己做……所以,面向各领域的人们,自己动手,丰衣足食吧。#6. 界面修饰好了,控件集的问题解决了,我们来看看界面的修饰。你们发现没有,不管用什么非HTML的标签体系,可能写代码会很快,但是有时候要修饰界面,比如只是调整一下所有容器的边距,某些按钮的圆角之类,就会生不如死。这时候你会发现,HTML里面的CSS真是神器,什么都能干,而且是面向切面的,只要你的HTML结构是良好的,完全不需要调整这个层面的代码。为什么其他体系的CSS没有这么强呢?比如说Flex也可以写CSS,QT也可以写CSS。因为CSS的部分实在是太复杂了,复杂到整个浏览器里面绝大部分的代码都在处理这方面的东西,像Google的Chrome团队有1000多人,别的体系没法有这么大投入,只能看着羡慕。上次看到一个问题,近30年来软件开发体系有哪些本质的改进?我觉得CSS真的可以入选,这是一个把结构和展现完全分离的典范,并且实现得很好。我们的前端开发一般都是面向某个领域的,不管什么领域,CSS方向都可以有一个很独立的规划,因为它可以不影响界面的结构。所以这个方面,其实不太会对前端开发造成太多压力,压力只集中在维护CSS的人群身上。好了,上面扯了那么多,其实到现在还在界面的层次,一直没有去谈到真正的逻辑。那么,最让我们困扰的部分是哪里呢? #7. 模块化和加载Web前端开发有个最苦闷的事情就是选型,因为HTML这个体系很开放,提供的默认能力又不是很足够,如果要做复杂交互的东西,会需要很多额外的工作。有各种框架从各种角度来解决问题,但怎么把这些东西整合到正好符合自己的需要,是一个很花精力的事情,很多时候恨不得自己把全部轮子都造一遍。真正的开发工作中,跨浏览器,踩各种坑应该是最烦闷的事,其他部分,如果有做好自己领域里标签的定义,或者不用标签用其他方式,应该不算特别困难。有人说JavaScript语言本身比较松散,所以写业务逻辑比较头疼,这不算大问题。基于B/S的开发,有一个大坑是你在运行的时候要先把代码加载过来,然后才能跑。你看那些C/S软件,有这困扰吗?再看看后端程序员,谁还要关心自己的代码执行之前要做的事情?所以后端程序员写前端代码,都情不自禁地会引入一大堆库。我们形象一点来描述一下这个过程:嗯,大家都用jQuery,我也引入,抄了两段代码发现真不错。咦,我要个树控件,网上逛了一圈,拿了个zTree回来。再埋头苦干半个小时,缺数据表格控件,于是过了一会,jQuery UI被整体引入了。再埋头苦干,上网乱点了点,浏览器跳出个广告,一看叫做Kendo UI,看看发现不错,引进来再说,用里面的某个控件。又过了一阵,听说最近Angular很火啊,看了看例子,表单功能怎么那么强,我也要用!捣鼓捣鼓又加进去了。项目里又要用图表库,看了半天眼睛都花了,百度的ECharts不错哦,引进来。哎呀我界面怎么那么丑,人家的怎么那么清爽,查看源码,一看,Bootstrap,去官网一看,真乃神器,不用简直对不起自己。没多久之后,这个界面已经融合了各种主流框架,代码写法五花八门,依赖了几M的JS库,更要命的是里面某些JS有冲突,某些样式也互相覆盖,快疯了。这里有哪些问题呢?JS代码要先加载到界面才能执行,而这么几M的代码加载过来就要好久了,然后每个框架还要把自己初始化,又耗不少时间,半分钟之后自己写的JS才开始执行,用户等得都快怀孕了。不管是JS还是CSS,都应当控制基准的代码,这件事的主要意义是避免冲突,因为整个体系都比较松散,如果不加控制,就会造成冲突。即使在服务端写Java,也有类签名一致性之类的问题,所以这个部分必须要重视。刚才这两点,第二点暂时不是我们要探讨的范围,第一点,引出的话题就是异步加载,这是一个可以展开说很多的话题,也不再说了。异步加载和缓存是面对复杂场景必做的优化措施。但是这个里面规范就有好几种,具体实现方式就更多了。ES6的module也许可以解决这个问题。harmony:modules [ES Wiki]#8. 逻辑的分层网站型和应用型Web程序对分层的需求是不一样的。网站型的逻辑大部分都在处理UI,而应用型可能有很多业务逻辑,这部分需要更好的组织,以便复用,或者即使我们的目标不包括复用,为了这个代码的可维护性,也需要有比较好的组织方式。本质上这些组织方式与传统的客户端软件开发没什么不同,主要要做的无非就是UI层的隔离,或者模板化,或者别的什么方式。纯逻辑的代码大家都会写,但这个逻辑怎么跟界面产生关系,这是个问题。有些框架通过在HTML元素上设置额外属性,然后启动的时候读取,在框架内部做一些相关的事情,比如Angular、Avalon和Knockout。有的框架在视图层中让开发人员手动去处理界面,就像未引入框架的那样,比如Backbone,两者是各有利弊的。前面这种,一般功能是会很强大,但是它自身所做的东西必须足够多,多得帮你做掉绝大部分本来该自己做的事,你才会特别爽。所以,用这类框架来做表单型应用的时候,是会非常舒服的,因为这些需求他做框架的时候能预见,所以比如校验、联动、存取之类的都会处理掉。假如你要做一个绘图类应用,这就麻烦了,不管你是用Canvas还是SVG,它所能帮到的都不多。这时候,后面这类可能反而适合一些。这些数据分层框架的原理是什么呢?是要做一层表单与数据的对应关系,所以他要检测数据的变动,比如一个Object,它某个值变更了,要去把对应的界面更改之类。这里面也有很多的坑,可以一步一步踩过来。。。到现在,我大致可以回答你的问题,什么情况下前端开发会比较轻松呢?针对自己领域的界面标签库比较完善,或者易于扩展样式容易调整,并且独立于界面元素逻辑模块化,层次分明,在某种统一规范上存在大量可用库咦,我这三点好像在说微软的WPF体系吗?', '1388997595');
INSERT INTO `answer_table` VALUES ('278', '228', 'c5198d4e9c0145aee04dd53cc6590edd', '我们来分析一下究竟哪些因素让前端开发这么困扰。 先看看界面部分吧。 #1. 命令式还是声明式 毫无疑问,就写界面来说,声明式的代码编写效率远高于命令式: <Panel title=\"Test\">\n <Button label=\"Click me\"/>\n</Panel>\n\nPanel p = new Panel();\np.title = …', '1388997595');
INSERT INTO `answer_table` VALUES ('279', '228', '8366575cfc9846f14d3fb919baedbd19', '关键是兼容性。所以说。没几年了。后端是统一环境。前端各种厂商的历史坑。没可比性。话说回来,就算所有人都用一个浏览器的时候。我觉得后端开发也比前端开发复杂多了……知识指数不是一个量级的根本。', '1389052229');
INSERT INTO `answer_table` VALUES ('280', '228', '74aa241d0d503ee8e146cef20aea24db', '我最近看了一些WebComponent的东西,包括Google的Polymer,也尝试了写一点玩具代码。说下感想。 写在前面:WebComponent和MV*的关系其实没那么大,和Angular、React关系也没那么对立,Angular、React关注了比WebComponent多得多的问题,但在我眼里它们并不…', '1415885158');
INSERT INTO `answer_table` VALUES ('281', '228', 'c265de1dfd836bf0f644c8e0123e53a4', '我觉得现在前端已经可以很流畅地像客户端一样开发了. 直接上图比较直接. 这个是我们新开发的引擎工具 <a href=\"https://link.zhihu.com/?target=http%3A//fireball-x.com/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">fireball-x.com/</span><span class=\"invisible\"></span></a>, 整个都是 HTML5 技术做界面. 我想说如果我用 WPF, QT 什么的写的话, 这个项目基本就难产了. 如果你是一个像我一样对操作细节有疯…', '1415937024');
INSERT INTO `answer_table` VALUES ('282', '228', '3ec3b166992a5a90a1083945d2490d38', '本答案仅为反对轮子和轮子的脑残粉而写。【请轮子的脑残黑也自重,不要跑到本答案的评论区叫好。】 微软十几年前早早搞出了HTML Component,但是netscape的余孽创办的W3C极力阻挠。现在好了,大家还在慢慢等Web Component。要是当初那一小撮人老老实实接受…', '1418103385');
INSERT INTO `answer_table` VALUES ('283', '234', '229', '刚好我专栏中文章做了类似的探索。首先可以确认的是,微信以及QQ的安卓版本,以及安卓手机的Chrome浏览器是支持WebRTC的,但是目前从支持的情况来说,Chrome最好。而整个iOS平台还不知道什么时候会支持这一特性。注意这个回答是2017年了,大约16年下半年开始支持的。我调研的方面包括在前端提取ORB特征点,然后通过ajax或者websocket发送到服务端,使用docker负载均衡,并且在后端OpenCV识别。以及其中涉及到的效率优化问题等等。(知乎专栏) 从结论来说,对于简单的云识别方面,是可以做到实时的。(这里还没有牵扯到在前端做整体图片的pose计算,跟踪等进一步的调研)另一方面,对于纯粹的前端,目前我也在尝试二维码的整体识别和跟踪。(知乎专栏)视频可以参照这里:二维码识别效果 - 腾讯视频二维码的检测比起一般的图片还是要容易很多,所以加上Pose计算和3D绘制也可以做到实时。目前正在尝试增加跟踪来避免过多的抖动。', '1487675889');
INSERT INTO `answer_table` VALUES ('284', '234', '230', '可以,分两块 1. 摄像头输入以及视觉分析,通过 <a href=\"https://link.zhihu.com/?target=https%3A//github.com/inspirit/jsfeat\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">inspirit/jsfeat · GitHub</a> 2. WebGL 三维渲染、模型动画,通过 <a href=\"https://link.zhihu.com/?target=https%3A//github.com/mrdoob/three.js\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">mrdoob/three.js · GitHub</a> 局限性是手机上的浏览器不支持摄像头,还得再等等。 微信 js-sdk 能拿到单张照片,但无法得到连续的摄像头视频,这…', '1426472162');
INSERT INTO `answer_table` VALUES ('285', '234', '231', '有demo,但是还有局限,欢迎一起研究', '1439947095');
INSERT INTO `answer_table` VALUES ('286', '234', '232', '看看亮风台他们的AR平台,虽然技术都是十几年前的拿过来做成了API,不过人家还是花了点功夫的。(我没用过,不知道效果如何ㄟ( ▔, ▔ )ㄏ ', '1441685100');
INSERT INTO `answer_table` VALUES ('287', '234', '233', '正巧看到这个问题,现在浏览器已经可以获得摄像头了(连微信和QQ的内置浏览器都可以),昨天刚做了一个 demo。 <a href=\"https://zhuanlan.zhihu.com/p/24800940\" class=\"internal\"><span class=\"invisible\">https://</span><span class=\"visible\">zhuanlan.zhihu.com/p/24</span><span class=\"invisible\">800940</span><span class=\"ellipsis\"></span></a> ', '1483792037');
INSERT INTO `answer_table` VALUES ('288', '234', 'ca89ef1dea984ad12b94e342fbe63c16', '刚好我专栏中文章做了类似的探索。 首先可以确认的是,微信以及QQ的安卓版本,以及安卓手机的Chrome浏览器是支持WebRTC的,但是目前从支持的情况来说,Chrome最好。而整个iOS平台还不知道什么时候会支持这一特性。注意这个回答是2017年了,大约16年下半年开…', '1487675889');
INSERT INTO `answer_table` VALUES ('289', '240', '235', 'talk is cheap, show me the code', '1382583911');
INSERT INTO `answer_table` VALUES ('290', '240', '236', '再做三个项目,应该能面个实习了。', '1382542227');
INSERT INTO `answer_table` VALUES ('291', '240', 'fd79c8008dac7fb5a433ef50c058e271', 'talk is cheap, show me the code', '1382583911');
INSERT INTO `answer_table` VALUES ('292', '240', '237', '把这两本书看完,是不是就淹不死了。 ', '1382585985');
INSERT INTO `answer_table` VALUES ('293', '240', '238', '<b>怒答</b> 三本都不是入门书籍 阅读优质的前端书籍经常需要看一页的书写几个小时的代码,有时还要回顾以前<b>学</b>过的章节。 不明白为什么很多人喜欢把javascript权威指南这本字典推荐给不懂的新人做入门书籍 问楼主:HTML5是什么? <b>入门的话:</b> CSS彻底设计研究 然后…', '1382716791');
INSERT INTO `answer_table` VALUES ('294', '240', '239', '如果你真的完整看完,而且全部理解了的话。相信你至少拥有了胜任这份工作所需的理解能力和认真的态度了。 当然,再仔细想想,就算是把书看完这一点,也是不太容易的。更何况要想真正理解书中内容,必然是要一点点动手实践才行的。有些内容,还需要结合项目…', '1382756536');
INSERT INTO `answer_table` VALUES ('295', '246', '241', '建议楼主可以尝试下WeX5——一款遵循apache协议的开源可视化快速开发工具,单屏快速加载,媲美原生的开发体验。他基层技术用的是cordova和bootstrap,在这个基础上又提供了很多便捷的东西,更新的也很快,值得追随!', '1456295325');
INSERT INTO `answer_table` VALUES ('296', '246', '242', '若是单纯的写HTML,我认为notepad++配合zencoding,是最佳组合。 若是还需要写Js,那我推荐aptana,开源,高效。不过启动慢了点。 其他的IDE可以参考下问: 写 JavaScript 时的 IDE 或编辑器选择有哪些好的推荐? <a href=\"http://www.zhihu.com/question/19606319\" class=\"internal\"><span class=\"invisible\">http://www.</span><span class=\"visible\">zhihu.com/question/1960</span><span class=\"invisible\">6319</span><span class=\"ellipsis\"></span></a>', '1348040079');
INSERT INTO `answer_table` VALUES ('297', '246', '243', 'SublimeText2', '1348045876');
INSERT INTO `answer_table` VALUES ('298', '246', 'fdf277fdb215d81e4c76abcad744e766', '建议楼主可以尝试下WeX5——一款遵循apache协议的开源可视化快速开发工具,单屏快速加载,媲美原生的开发体验。他基层技术用的是cordova和bootstrap,在这个基础上又提供了很多便捷的东西,更新的也很快,值得追随!', '1456295325');
INSERT INTO `answer_table` VALUES ('299', '246', '244', '就我现在日常喜欢用的工具有通用编辑器sublime/atom,现在改用vscode了,唯一缺陷就是有点慢。。php的话phpstorm服务端开发环境 virtualbox+vagrant+homestead前端调试当然是chrome和一大堆extensions,在mac下,所以用virtualbox测试windows下的ie浏览器sh…', '1456299041');
INSERT INTO `answer_table` VALUES ('300', '246', '245', '强烈推荐webstorm 谁用谁知道!', '1457351964');
INSERT INTO `answer_table` VALUES ('301', '252', '247', '我觉得,当你面的是前端工程师。那div+css的意义是否可以类比于老师去面试说我会讲话?', '1466757996');
INSERT INTO `answer_table` VALUES ('302', '252', '248', '事实上,在目前国内的前端市场,简历上这样写并不一定会减分。 减不减分要看你碰到怎样的面试官,如果碰到我这种有强迫症的,很有可能减分。 这种说法兴起于我们极度落后的前端行业刚刚开始出现曙光的时期。在那之前,网页是由 <table> 及其属性拼凑出来的…', '1454034759');
INSERT INTO `answer_table` VALUES ('303', '252', '249', '问题是,有些要求写着精通DIV+CSS。 不写DIV的话,遇到逗比HR只能呵呵了', '1454082582');
INSERT INTO `answer_table` VALUES ('304', '252', '250', 'Div+CSS已经是很多年前的做法了。 而且这也是一种不严谨的表现吧(°ー°〃) 推荐采用HTML语义化标签,这样不仅利于SEO,而且结构明晰便于开发维护,即使在去掉样式或样式意外丢失时页面依旧有很清晰的结构,便于访客正常阅读。', '1454114745');
INSERT INTO `answer_table` VALUES ('305', '252', '251', '因为这你写的太细了,可以更宏观一点,不然显得简历索然无味', '1460629125');
INSERT INTO `answer_table` VALUES ('306', '252', 'd162ba1d566a45ff8d40142e0627980d', '我觉得,当你面的是前端工程师。那div+css的意义是否可以类比于老师去面试说我会讲话?', '1466757996');
INSERT INTO `answer_table` VALUES ('307', '258', '253', 'var imf = function () {\n var lf = 0;\n var instances = [];\n //定义一个通过class获得元素的方法,并传入三个参数\n function getElementsByClass (object, tag, className) {\n \n var o = object.getElementsByTagName(tag);\n //定义一个数组变量,通过标签名获取元素\n //通过for循环来返回通过class获取的元素\n\n for ( var i = 0, n = o.length, ret = []; i < n; i++)\n //变量n等于数组o的个数,字符类型是数值\n //新增了一个数组ret用处暂不明确,继续往下读\n //遍历数组o里面的每一个对象\n \n if (o[i].className == className) ret.push(o[i]);\n //如果数组o里面元素的类名存在与传入的className参数名相同的话,将 \n //这个类名的元素添加到ret数组中(push是从数组末尾添加)\n \n if (ret.length == 1) ret = ret[0];\n //如果数组ret的个数有1个存在,那么直接返回它\n\n return ret;\n //for循环至此结束,继续下一个函数的读取\n }\n //定义名为addEvent函数,并传入3个参数\n function addEvent (o, e, f) {\n if (window.addEventListener) o.addEventListener(e, f, false);\n \n //通过if判断解决兼容性问题,如果浏览器支持.addEventListener() \n //方法,给数组o添加监听事件\n else if (window.attachEvent) r = o.attachEvent(\'on\' + e, f);\n //因为IE低版本浏览器的监听事件不符合w3c规范,只能用.attachEvent \n //方法来兼容\n }\n \n//继续定义一个名字很奇怪的函数传入2个参数\n function createReflexion (cont, img) {\n var flx = false;\n //变量flx的布尔值初始化为false,一般后面用来判断这个变量的存在是真 \n //还是假\n if (document.createElement(\"canvas\").getContext) {\n //这也是一个兼容性判断,如果浏览器支持h5 canvas .getContext属性 \n //和方法的话,就继续下去\n flx = document.createElement(\"canvas\");\n //读到这里,我明白了为什么提前将变量flx = false 了;如果为true的话\n //就没法判断浏览器是否支持canvas了\n //这一步是动态创建canvas节点,名为flx\n flx.width = img.width;\n //定义canvas的宽度等于img的宽度\n flx.height = img.height;\n //定义canvas的高度等于img的高度\n var context = flx.getContext(\"2d\");\n //获取canvas的上下文环境\n context.translate(0, img.height);\n //将canvas绘图表面向下平移img高度的像素,目的暂不明确\n context.scale(1, -1);\n //将canvas绘图表面进行缩放操作,x轴放大1倍,y轴缩小1倍,暂不明白作者\n //意图,-1应该是反向。\n //又是向下平移,又是纵向翻转,应该是做一种上下对称的东西\n context.drawImage(img, 0, 0, img.width, img.height);\n //.drawImage()方法,将图片绘制到canvas中,宽高都是图片的宽高\n context.globalCompositeOperation = \"destination-out\";\n //这个属性比较冷门,我是查资料才知道是:在源图像外显示目标图像。只有源 \n //图像外的目标图像部分会被显示,源图像是透明的。个人猜想作者利用这个 \n //属性不是简单的把img画到上去,而是想利用源图像外的部分来做文章。\n var gradient = context.createLinearGradient(0, 0, 0, img.height * 2);\n //绘制起点为原点的60°角的线性渐变\n gradient.addColorStop(1, \"rgba(255, 255, 255, 0)\");\n //定义结束的颜色,不透明度为0\n gradient.addColorStop(0, \"rgba(255, 255, 255, 1)\");\n //定义开始的颜色,不透明度为1\n context.fillStyle = gradient;\n //上面都是基于状态的绘制,这一步是执行绘制\n context.fillRect(0, 0, img.width, img.height * 2);\n //绘制一个矩形,左上角坐标(0,0),右下角坐标(img宽度,img高度X2)\n\n } else {\n //如果浏览器不支持canvas,则用css滤镜来实现此效果\n /* ---- DXImageTransform ---- */\n flx = document.createElement(\'img\');\n flx.src = img.src;\n flx.style.filter = \'flipv progid:DXImageTransform.Microsoft.Alpha(\' +\n \'opacity=50, style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy=\' +\n (img.height * .25) + \')\';\n }\n //上面那一大串,讲的是创建一个img标签替代canvas,定义图像src,定义滤镜\n \n /* ---- insert Reflexion ---- */\n flx.style.position = \'absolute\';\n flx.style.left = \'-1000px\';\n cont.appendChild(flx);\n return flx;\n }\n //设置flx的css位置属性\n //用.appendChild()方法将动态创建的flx作为子元素,添加到cont的节点中\n //结束了\n //码完注释,我猜想这是一段实现图片倒影的函数,倒影显示在图像的下方。\n', '1458116176');
INSERT INTO `answer_table` VALUES ('308', '258', '254', '就多写这是我在块我在说一下吧。 题主现在应该处于:想动手写点东西,但是又不是怎么开始的这一个阶段。 其实我有很长一段时间是处于这个阶段,我看了完了《DOM艺术编程》,照着书上的例子写,基本就是抄。 然后关上书,还是什么都写不出来,老是去回想书里…', '1453891495');
INSERT INTO `answer_table` VALUES ('309', '258', '255', '我想,学习编程语言与学习说话是类似的,都有三要素:词法,语法,背景知识 词法:决定是否能一个词一个词的读下来 语法:决定是否能明白,表达式或者语句要做什么 背景知识:决定是否能理解整个篇章在做什么 想一想,我们从出生就生活在汉语(举例而已,少…', '1455648018');
INSERT INTO `answer_table` VALUES ('310', '258', '1a1247893382151c7baf4e25b8ea662c', 'var imf = function () {\n var lf = 0;\n var instances = [];\n //定义一个通过class获得元素的方法,并传入三个参数\n function getElementsByClass (object, tag, className) {\n \n var o = object.getElementsByTagName(tag);\n //定义一个数组变量,通过标…', '1458116176');
INSERT INTO `answer_table` VALUES ('311', '258', '256', '因为js一般不只是js,他一般还要配合调用别的东西,比如你的这一部分代码,它大部分的工作是操作dom,那你就要去学习dom操作的基本知识。而且dom里面findbyclass addEvent 都是相对深入一些的知识,换句话说,你看的这个代码要的基础知识稍多了一些。', '1458118734');
INSERT INTO `answer_table` VALUES ('312', '258', '257', '按教程,例子写固然重要,但是更好的办法是多练,实现你想实现的功能。html css入门无非是认识一些标签,真的运用到实践去,去解决各个浏览器兼容问题,更合理地去优化布局,也是很有学问的。', '1458224309');
INSERT INTO `answer_table` VALUES ('313', '262', '259', '用ab、Siege、Jmeter之类工具或者根据需求自己开发的测试工具,会得到一些服务器性能数据,如最高并发、吞吐率等等。根据这些数据可以获得基本的服务器性能信息,可以估算出大概的并发量。', '1453267995');
INSERT INTO `answer_table` VALUES ('314', '262', '260', '这篇文章解决了很多用户的难题,就是如何通过最大用户并发数来确定系统最大用户数,因为这个问题不解决的话,用户很难挑选到最为适合自身系统的服务器,我们来看看这篇文章。以下是作者原文。\n本篇主要是性能方面的。\n一个系统的最大并发用户数为1100,怎么…', '1453110841');
INSERT INTO `answer_table` VALUES ('315', '262', '261', '根据已有项目经验进行估算…… 譬如,我已有A项目 最大并发100 , 那么做基于A项目的B项目时,就可以参考其数据 思考彼此关系,来考虑B的最大并发……', '1453116429');
INSERT INTO `answer_table` VALUES ('316', '262', '500420fbca9879fe659d9690cd5633c6', '用ab、Siege、Jmeter之类工具或者根据需求自己开发的测试工具,会得到一些服务器性能数据,如最高并发、吞吐率等等。 根据这些数据可以获得基本的服务器性能信息,可以估算出大概的并发量。', '1453267995');
INSERT INTO `answer_table` VALUES ('317', '263', 'ee5131c6e4e62390f8f4f7ff91851244', '很多时候,我们觉得系统的Frame框很难看,于是想自定义。自定义Frame的第一步是在package.config文件中将frame选项设置为false。{\"name\": \"1\",\"main\": \"index.html\",\"nodejs\": true,\"single-instance\": false,\"chromium-args\" : \"--enable-webgl --ignore-gpu-blacklist\",\"window\": {\"show\":true,\"title\": \"AxeSlide\",\"toolbar\": true,\"width\":1000,\"height\":400,\"resizable\":true,\"show_in_taskbar\":true,\"frame\":false,\"kiosk\":false,\"icon\": \"resources/img/axeslide.png\",\"position\":\"center\"},\"webkit\":{\"plugin\":true}}修改配置文件之后,我们看到的是下面的窗口。无frame窗口是没有办法进行拖拽的,这肯定很不爽了,下面我们可以添加下面的样式到body上,实现整个窗口的拖动。body {-webkit-app-region: drag;}到此,我们的无边框窗体已经建成了,拖拽窗口的问题已经解决了,一切似乎完美了,就这么简单。不过当我们“手贱”地去双击下窗口的时候,窗口自动最大化了。其实这是nw.js优化过后的一个功能,在早期版本的时候,无边框窗口,双击是没有任何反应的,很多用户提了bug,作者于是添加了这个功能。但是不是任何时候,我们都需要最大化的,比如自定义了一个登录窗,我们想保持固定的大小怎么办?我首先想到的是监听Click事件,如下:document.onclick = function (e) {e.preventDefault();}添加之后呢,然而并没有卵用,现在已经确认是nw.js的一个bug,据说在0.13版本修复了,不过还处于beta阶段。一招不行,再来一招,可不可以通过设置最大,最小宽高都一样的方式解决呢?继续修改配置文件。此时我们再次测试,发现双击之后确实没有最大化了,不过窗口的位置却偏移到了屏幕的左上角。这当然也不是我们需要的,那么就没办法处理了吗?既然默认的处理方式不行,自己动手丰衣足食吧,捕获Click和MouseMove事件,自己实现拖拽也不是很困难的,说干就干。先去掉原来用于body上执行拖拽的样式,然后添加下面的代码。<script>var gui = require(\'nw.gui\')var win = gui.Window.get()var $win = windowvar $nav = document.body;var dragging = falsevar mouse_x, mouse_yvar win_x, win_y;$nav.onmousedown= function (e) {e = e.originalEvent || evar isbg = $(e.target).closest(\'.navbar-nav, #form-user\').length < 1if (!isbg) returndragging = truemouse_x = e.screenXmouse_y = e.screenYwin_x = win.xwin_y = win.y};$win.onmousemove=function (e) {if (!dragging) returnwin.x = win_x + (e.screenX - mouse_x)win.y = win_y + (e.screenY - mouse_y)};$win.onmouseup=function () {dragging = false};</script>拖拽前窗口在左上角。拖拽后。ok,是不是完美的解决问题了呢?文章转自我的知乎专栏:http://zhuanlan.zhihu.com/xuanhun/20504162', '1452853321');
INSERT INTO `answer_table` VALUES ('318', '263', 'ee5131c6e4e62390f8f4f7ff91851244', '很多时候,我们觉得系统的Frame框很难看,于是想自定义。 自定义Frame的第一步是在package.config文件中将frame选项设置为false。{\"name\": \"1\",\"main\": \"index.html\",\"nodejs\": true,\"single-instance\": false,\"chromium-args\" : \"--enable-webgl --ignore-…', '1452853321');
INSERT INTO `answer_table` VALUES ('319', '265', '5b651f38d9d96a995107ec0e855cf5c1', '路过这是个老问题现在应该早就不提了吧懒的再写贴点儿老图吧由于写的时间很早,细节上可能有变化不过大致情况如此理解下就好了', '1451472045');
INSERT INTO `answer_table` VALUES ('320', '265', '99f2830d193ec87598d65e9725e2048b', '怎么可能一样,一个是CSSStyleDeclaration对象,一个是字符串。', '1450709093');
INSERT INTO `answer_table` VALUES ('321', '265', '766a84590614270ad6e4cc2dd0fbfc12', 'Are you kidding? ', '1450710917');
INSERT INTO `answer_table` VALUES ('322', '265', '264', '有区别 首先区分property和attribute,两个翻译成中文都可以作为属性,但是在实际上是有区别的。 在html标签里的属性称为attribute 例如:<a href=\"/people/mi-si-14\" data-tip=\"p$b$mi-si-14\" data-original_title=\"alaki\">alaki</a> 这个dom element有3个…', '1450973969');
INSERT INTO `answer_table` VALUES ('323', '265', '596c0a5fdd9b36cea06bac348d418824', '<a data-hash=\"f446fb6b94f55372294b59d5f0fccbde\" href=\"https://www.zhihu.com/people/f446fb6b94f55372294b59d5f0fccbde\" class=\"member_mention\" data-editable=\"true\" data-title=\"@alaki\" data-hovercard=\"p$b$f446fb6b94f55372294b59d5f0fccbde\">@alaki</a> 已经说得很好了,我补充下。 elem.style 和 elem.getAttribute(\'style\') 的关系我在这个回答里提到过一点,可以参考一下:<a href=\"https://www.zhihu.com/question/20529237/answer/15392281\" class=\"internal\">webkit内核的浏览器为什么removeAttribute(\'style\')会失效? - 顾轶灵的回答</a> (里面有些链接好像失效了) 总的来说,style 的…', '1451470780');
INSERT INTO `answer_table` VALUES ('324', '265', '5b651f38d9d96a995107ec0e855cf5c1', '路过 这是个老问题 现在应该早就不提了吧 懒的再写 贴点儿老图吧 由于写的时间很早,细节上可能有变化 不过大致情况如此 理解下就好了', '1451472045');
INSERT INTO `answer_table` VALUES ('325', '270', '266', '这个知识的范围真的很大,涉及到编程功底、网络、流媒体、CDN、等等等等... 与其说知识不如说需要用到哪些技术,用这些开源的技术你可以在一周之内搭一个完整的网络视频直播系统。然后你再用这些技术反推你需要的知识,这样就不会导致学到没用的知识。链接:如何搭建一个完整的视频直播系统? - 网络主播七牛云移动端推流开源SDK:GitHub - pili-engineering/PLCameraStreamingKit: Pili RTMP Streaming SDK for iOS, H.264 and AAC hardware encoding supported. Camera and Microphone as input source.完整的基于IOS手机直播:GitHub - songsmith/LiveVideoCoreSDKOBS-PC端主播推流工具,斗鱼等游戏直播都在用GitHub - jp9000/obs-studio: OBSRTMP直播可以用nginx-rtmpGitHub - arut/nginx-rtmp-module: NGINX-based Media Streaming Server开源播放器也很多,ffplay、jwplayer、ijkplayer等等,我就不一一给你发了,哈哈https://github.com/Bilibili/ijkplayer其实最难的难点是提高首播时间、服务质量即Qos。要想在技术上把别的直播站PK下去,可以考虑这几种方案:1. gop缓存,为加快首播时间2. gop丢帧,为解决延时,为什么会有延时,网络抖动、网络拥塞导致的数据发送不出去,丢完之后所有的时间戳都要修改,切记要不客户端就会卡一个 gop的时间,是由于 dts 和 pts 的原因,或者播放器修正 dts 和 pts 也行(推流端丢gop更复杂,丢 p 帧之前的 p 帧会花屏)3. 纯音频丢帧,要解决音视频不同步的问题,要让视频的 delta增量到你丢掉音频的delta之后,再发音频,要不就会音视频不同步 4. 源站主备切换和断线重连5. 根据TCP拥塞窗口做智能调度,当拥塞窗口过大说明节点服务质量不佳,需要切换节点和故障排查6. 增加上行、下行带宽探测接口,当带宽不满足时降低视频质量,即降低码率7. 定时获取最优的推流、拉流链路IP,尽可能保证提供最好的服务8. 监控必须要,监控各个节点的Qos状态,来做整个平台的资源配置优化和调度9. 如果你家产品从推流端、CDN、播放器都是自家的,保障 Qos 优势非常大.10. 当直播量非常大时,要加入集群管理和调度,保障 Qos', '1463138134');
INSERT INTO `answer_table` VALUES ('326', '270', '267', '如果是做直播平台,最难的是从摄像头(包括移动端、PC)推流到服务器这一段,各种bug太多了 从直播服务器分发到用户这一段,基本就是把流复制到CDN而已,包括多码流输出都是CDN做。能怎么样取决于CDN的良心 如果还要把视频保存下来,做后续处理。那就是另外…', '1446692276');
INSERT INTO `answer_table` VALUES ('327', '270', '43fef250f785524faf0a1272c2421c05', '对于做了腾讯视频多年的表示,如果要全国用户跨平台流畅观看,这个东西复杂到我已经很难在知乎上回答了;对于要简单的看了w3school然后用chrome写个hello world,可以apache搭个服务器,html5设置src就行了,不过这是点播,要模拟直播,把MP4转一个M3U8修改…', '1447763390');
INSERT INTO `answer_table` VALUES ('328', '270', '8acba44fed9b541169a11ee6479cae4f', '这个知识的范围真的很大,涉及到编程功底、网络、流媒体、CDN、等等等等... 与其说知识不如说需要用到哪些技术,用这些开源的技术你可以在一周之内搭一个完整的网络视频直播系统。然后你再用这些技术反推你需要的知识,这样就不会导致学到没用的知识。 链接…', '1463138134');
INSERT INTO `answer_table` VALUES ('329', '270', '268', '<b>一、直播的技术架构:</b>直播视频采集SDK(PC/IOS/Anddroid)——直播CDN(直播流分发加速)——直播视频播放器SDK(PC/IOS/Android) <b>二、音视频处理的一般流程:</b>数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示1、<b>数据采集:</b>摄像机及拾音…', '1465127709');
INSERT INTO `answer_table` VALUES ('330', '270', '269', '上面已经说的很完整了,我真不知道该不该补充。 我简单说两句,希望对你有价值,而且不耗时间。 网络视频直播系统开发需要用到哪方面的知识?修 1. 语音视频的几个模块:回声消除,噪声抑制,自动增益,丢帧补偿,前向纠错,网络抖动。 2. 流媒体传输的各个…', '1483083164');
INSERT INTO `answer_table` VALUES ('331', '275', '271', '移动端比pc端简单点.......另外建议不要用库或者框架,我用zepto都嫌卡,自己封装一下不好,最新的html5已经极大的简化了开发的难度。', '1445527954');
INSERT INTO `answer_table` VALUES ('332', '275', '272', '如果你想通过前端代码导出可用的移动端app,那么你可以试着学习一下ionic或者mui。在学ionic之前我建议先学一下angular.js。当你学会了写移动端网页的时候,至少现在你就可以试着用这些框架去导出一个app。但是当你app需要的运算量很大的时候,还是建议用原…', '1445388910');
INSERT INTO `answer_table` VALUES ('333', '275', 'd1f0f4587281169bdcf03f25c11d4bed', '学vue.js', '1445420087');
INSERT INTO `answer_table` VALUES ('334', '275', '7a2d5a1343d5483c00bacfbf7ad3d9e9', '移动端比pc端简单点.......另外建议不要用库或者框架,我用zepto都嫌卡,自己封装一下不好,最新的html5已经极大的简化了开发的难度。', '1445527954');
INSERT INTO `answer_table` VALUES ('335', '275', '273', '我大三自学html5游戏,随便选了一个叫做limejs的开发框架。 这个框架里面有详细的教程,网上也有API供参考,到现在做了四五个游戏还算很顺利的 欢迎来 limejs 吧 做客!', '1445693737');
INSERT INTO `answer_table` VALUES ('336', '275', '274', 'webpack+vue+vuerouter+less。用起来很好。', '1477750973');
-- ----------------------------
-- Table structure for `author_table`
-- ----------------------------
DROP TABLE IF EXISTS `author_table`;
CREATE TABLE `author_table` (
`ID` int(10) NOT NULL,
`type` varchar(16) DEFAULT NULL,
`name` varchar(64) DEFAULT NULL,
`gender` tinyint(4) DEFAULT NULL,
`userType` varchar(16) DEFAULT NULL,
`img_url` varchar(255) DEFAULT NULL,
`headline` text,
`followerCount` int(11) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of author_table
-- ----------------------------
INSERT INTO `author_table` VALUES ('1', 'people', '广州蓝景信息技术有限公司', '-1', 'organization', '', '', '86');
INSERT INTO `author_table` VALUES ('2', 'people', '知乎用户', '1', 'people', '', '码农', '31');
INSERT INTO `author_table` VALUES ('3', 'people', '烈日烤鱼', '1', 'people', '', 'Software Engineer @ Google', '1220');
INSERT INTO `author_table` VALUES ('4', 'people', '一个没羞没臊的', '-1', 'people', '', '程序员', '6');
INSERT INTO `author_table` VALUES ('5', 'people', '云时之间', '1', 'people', '', '机器学习的小萌新 自然语言处理的小呆瓜', '784');
INSERT INTO `author_table` VALUES ('7', 'people', '100offer', '-1', 'organization', '', '让最好的人才遇见更好的机会', '18023');
INSERT INTO `author_table` VALUES ('8', 'people', '陈二狗不理包子脸', '1', 'people', '', '打电脑的。关注我的连你一块儿打。[#超凶的表情]', '491');
INSERT INTO `author_table` VALUES ('9', 'people', '慕课网', '-1', 'organization', '', '慕课网,程序员的梦工厂', '18501');
INSERT INTO `author_table` VALUES ('10', 'people', '谢然', '1', 'people', '', '五个月把学生送进过美团、小米和阿里,办前端培训是因为热爱教育。', '4028');
INSERT INTO `author_table` VALUES ('11', 'people', '阿安', '1', 'people', '', '跪求前端,java简历~', '1482');
INSERT INTO `author_table` VALUES ('13', 'people', '蜗牛学院', '-1', 'organization', '', '蜗牛学院,致力于中国移动互联网领域的IT高端人才培养。只为成就更好的你!', '9731');
INSERT INTO `author_table` VALUES ('14', 'people', '匿名用户', '1', 'people', '', '', '-1');
INSERT INTO `author_table` VALUES ('15', 'people', '张小河', '1', 'people', '', '海棠学院创始人/微:feclass66', '628');
INSERT INTO `author_table` VALUES ('16', 'people', '怎挽', '-1', 'people', '', '自由职业者', '1');
INSERT INTO `author_table` VALUES ('18', 'people', '顾轶灵', '1', 'people', '', '百度前端工程师', '126084');
INSERT INTO `author_table` VALUES ('19', 'people', 'bailnl', '1', 'people', '', '', '114');
INSERT INTO `author_table` VALUES ('20', 'people', 'justjavac', '1', 'people', '', '写代码的 | 公众号: codefm', '26195');
INSERT INTO `author_table` VALUES ('22', 'people', '乔捷', '1', 'people', '', '全栈程序员,CTO', '362');
INSERT INTO `author_table` VALUES ('23', 'people', '我是WeX', '1', 'people', '', 'Web Design & Code', '346');
INSERT INTO `author_table` VALUES ('24', 'people', '黄轶', '1', 'people', '', '热爱技术,热爱分享', '1166');
INSERT INTO `author_table` VALUES ('25', 'people', '王德福', '1', 'people', '', '编码,做饭,写段子', '12070');
INSERT INTO `author_table` VALUES ('26', 'people', '石建文', '1', 'people', '', '长期内推腾讯阿里,简历私信', '85');
INSERT INTO `author_table` VALUES ('28', 'people', 'Awee', '1', 'people', '', '一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程。', '1124');
INSERT INTO `author_table` VALUES ('29', 'people', 'MarsZhang', '1', 'people', '', 'Coder', '32');
INSERT INTO `author_table` VALUES ('30', 'people', '知乎用户', '1', 'people', '', '前端 / <a href=\"https://link.zhihu.com/?target=http%3A//garychang.cn\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">garychang.cn</span><span class=\"invisible\"></span></a>', '34');
INSERT INTO `author_table` VALUES ('31', 'people', 'Evan', '1', 'people', '', '男人,应该对自己狠点。', '1');
INSERT INTO `author_table` VALUES ('32', 'people', '回忆秋千', '1', 'people', '', '我们改变不了潮水的方向', '2');
INSERT INTO `author_table` VALUES ('34', 'people', '知乎用户', '1', 'people', '', '写很简单的代码', '3014');
INSERT INTO `author_table` VALUES ('35', 'people', '知乎用户', '1', 'people', '', '我代码写得少,你不要骗我。公众号:痞子达', '273');
INSERT INTO `author_table` VALUES ('36', 'people', '张鹏', '1', 'people', '', '点量软件:贡献点滴力量 微信18660117010, QQ52401692', '70');
INSERT INTO `author_table` VALUES ('37', 'people', '揽月9527', '1', 'people', '', '', '15');
INSERT INTO `author_table` VALUES ('39', 'people', '貘吃馍香', '1', 'people', '', '北京碎催,胡同串子,说话痞,圣母婊请勿近', '10379');
INSERT INTO `author_table` VALUES ('40', 'people', 'vczh', '1', 'people', '', '专业造轮子,拉黑抢前排。<a href=\"https://link.zhihu.com/?target=http%3A//gaclib.net\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">gaclib.net</span><span class=\"invisible\"></span></a>', '689403');
INSERT INTO `author_table` VALUES ('41', 'people', '知乎用户', '1', 'people', '', '一个想把代码写成诗的人。公众号:5厘米的理想', '332');
INSERT INTO `author_table` VALUES ('42', 'people', '贺师俊', '1', 'people', '', 'Web开发者', '43084');
INSERT INTO `author_table` VALUES ('43', 'people', 'aniwei', '1', 'people', '', '', '10');
INSERT INTO `author_table` VALUES ('45', 'people', '墨磊', '1', 'people', '', '不折腾会死星喵', '9187');
INSERT INTO `author_table` VALUES ('46', 'people', '颜海镜', '1', 'people', '', '前端 <a href=\"https://link.zhihu.com/?target=http%3A//yanhaijing.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">yanhaijing.com</span><span class=\"invisible\"></span></a>', '4527');
INSERT INTO `author_table` VALUES ('47', 'people', 'Kenneth', '1', 'people', '', '笑看贵国走向共和', '41507');
INSERT INTO `author_table` VALUES ('49', 'people', '莱因哈特', '1', 'people', '', 'IT Specialist / Interview', '16');
INSERT INTO `author_table` VALUES ('50', 'people', '玄魂工作室-玄魂', '1', 'people', '', 'JavaScript/2d&amp;3d/c#/python/', '8131');
INSERT INTO `author_table` VALUES ('52', 'people', '陶澈', '1', 'people', '', '前端开发者', '70');
INSERT INTO `author_table` VALUES ('53', 'people', '凌柏超', '1', 'people', '', '实用派前端 処女はお姉さまに恋してる', '90');
INSERT INTO `author_table` VALUES ('54', 'people', '伍一峰', '1', 'people', '', 'Texas Poker Face', '2714');
INSERT INTO `author_table` VALUES ('55', 'people', '陈子贱', '1', 'people', '', '蚂蚁森林-生活圈-前端空城狮', '36');
INSERT INTO `author_table` VALUES ('56', 'people', '啦啦啦', '1', 'people', '', '前端小菜鸟,大神勿笑', '47');
INSERT INTO `author_table` VALUES ('58', 'people', 'Trotyl Yu', '1', 'people', '', '某外包公司的搬砖工。', '2728');
INSERT INTO `author_table` VALUES ('59', 'people', '程墨Morgan', '1', 'people', '', '互联网研发老兵,《深入浅出React和Redux》作者', '35406');
INSERT INTO `author_table` VALUES ('60', 'people', '余博伦', '1', 'people', '', '少刷知乎多看书', '14563');
INSERT INTO `author_table` VALUES ('61', 'people', '知乎用户', '1', 'people', '', '<a href=\"https://link.zhihu.com/?target=http%3A//itlr.cc\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">itlr.cc</span><span class=\"invisible\"></span></a>', '4165');
INSERT INTO `author_table` VALUES ('62', 'people', '毛绒球状闪电', '-1', 'people', '', '专业卖萌,至于写代码……', '17');
INSERT INTO `author_table` VALUES ('64', 'people', '腾讯云技术社区', '-1', 'organization', '', '更多腾讯海量技术文章,请关注腾讯云技术社区', '11485');
INSERT INTO `author_table` VALUES ('65', 'people', '知乎用户', '1', 'people', '', '知乎只写用户', '239838');
INSERT INTO `author_table` VALUES ('66', 'people', 'Ivony', '1', 'people', '', '大隐隐知乎', '67602');
INSERT INTO `author_table` VALUES ('67', 'people', '董可人', '1', 'people', '', 'Taurus.ai 创始人', '66065');
INSERT INTO `author_table` VALUES ('68', 'people', 'Ovear', '1', 'people', '', '各种乱七八糟神马的。', '2185');
INSERT INTO `author_table` VALUES ('70', 'people', '方老司', '1', 'people', '', '学校皆祸害<a href=\"https://link.zhihu.com/?target=http%3A//earnfish.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">earnfish.com</span><span class=\"invisible\"></span></a>', '691');
INSERT INTO `author_table` VALUES ('71', 'people', 'Mad Wiki', '1', 'people', '', '再想想', '7008');
INSERT INTO `author_table` VALUES ('72', 'people', '知乎用户', '1', 'people', '', '待我代码编成,娶你为妻可好 @花仲马', '29602');
INSERT INTO `author_table` VALUES ('73', 'people', '暗灭', '1', 'people', '', '京华九月秋近寒,浮沉半生影长单', '20485');
INSERT INTO `author_table` VALUES ('75', 'people', 'Aresn', '1', 'people', '', 'iView <a href=\"https://link.zhihu.com/?target=https%3A//iviewui.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://</span><span class=\"visible\">iviewui.com</span><span class=\"invisible\"></span></a>', '2375');
INSERT INTO `author_table` VALUES ('76', 'people', '丁科', '1', 'people', '', '', '50');
INSERT INTO `author_table` VALUES ('77', 'people', '钟典', '1', 'people', '', '重庆崽儿 悉尼打工度假 数字游牧民 中国人民大学第一逗比', '1324');
INSERT INTO `author_table` VALUES ('78', 'people', '龙威', '1', 'people', '', '前端', '10');
INSERT INTO `author_table` VALUES ('79', 'people', '知乎用户', '1', 'people', '', '', '9');
INSERT INTO `author_table` VALUES ('81', 'people', '知乎用户', '1', 'people', '', '不会写代码的画师不是好爸爸', '409');
INSERT INTO `author_table` VALUES ('82', 'people', '黄玄', '1', 'people', '', 'Web and beyond', '14757');
INSERT INTO `author_table` VALUES ('83', 'people', 'waterwu', '1', 'people', '', '爱设计,爱开发,爱摄影,爱互联网.', '1416');
INSERT INTO `author_table` VALUES ('84', 'people', 'Jim Liu', '1', 'people', '', '前端码畜,INTJ,各种打自己脸', '7176');
INSERT INTO `author_table` VALUES ('85', 'people', '王硕', '1', 'people', '', '代码裁缝', '484');
INSERT INTO `author_table` VALUES ('87', 'people', 'Chiefmore', '1', 'people', '', '来自专业评测机构 <a href=\"https://link.zhihu.com/?target=http%3A//Chiefmore.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">Chiefmore.com</span><span class=\"invisible\"></span></a>', '3371');
INSERT INTO `author_table` VALUES ('88', 'people', '小鸟', '-1', 'people', '', '互联网运营狗,熟悉各种互联网工具', '152');
INSERT INTO `author_table` VALUES ('89', 'people', 'shadow.Chi', '1', 'people', '', 'AI产品经理/程序员/设计师/偶尔客串老师/码字的', '502');
INSERT INTO `author_table` VALUES ('90', 'people', '沐枫', '-1', 'people', '', '', '1');
INSERT INTO `author_table` VALUES ('91', 'people', '侯铁民', '1', 'people', '', '互联网、增长黑客,<a href=\"https://link.zhihu.com/?target=http%3A//www.199case.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">199case.com</span><span class=\"invisible\"></span></a>', '482');
INSERT INTO `author_table` VALUES ('93', 'people', '张云龙', '1', 'people', '', '全民直播CTO', '24461');
INSERT INTO `author_table` VALUES ('94', 'people', 'henix', '1', 'people', '', '', '130');
INSERT INTO `author_table` VALUES ('95', 'people', 'kmxz', '1', 'people', '', 'O ever youthful, O ever starving / 永远年轻,永远一贫如洗', '4160');
INSERT INTO `author_table` VALUES ('96', 'people', 'itlr', '1', 'people', '', '<a href=\"https://link.zhihu.com/?target=https%3A//www.linkev.com/%3Fa_aid%3Ditlr\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://www.</span><span class=\"visible\">linkev.com/?</span><span class=\"invisible\">a_aid=itlr</span><span class=\"ellipsis\"></span></a>', '7144');
INSERT INTO `author_table` VALUES ('100', 'people', '欧阳军', '1', 'people', '', '', '5');
INSERT INTO `author_table` VALUES ('102', 'people', '知乎用户', '1', 'people', '', 'a very private person', '43');
INSERT INTO `author_table` VALUES ('103', 'people', '林蔚澜', '1', 'people', '', '很开心和你一起玩/北京大学', '4858');
INSERT INTO `author_table` VALUES ('104', 'people', 'louis', '-1', 'people', '', '镜中人', '-1');
INSERT INTO `author_table` VALUES ('106', 'people', '杨啸', '1', 'people', '', '', '3');
INSERT INTO `author_table` VALUES ('107', 'people', 'erichow', '-1', 'people', '', '前端开发', '1');
INSERT INTO `author_table` VALUES ('109', 'people', '界外魔阿历克斯', '1', 'people', '', '我在康科德城神游千里。', '1286');
INSERT INTO `author_table` VALUES ('110', 'people', '韩宇', '1', 'people', '', 'HTML5游戏开发者社区经理/ Sirius2D引擎推广中', '513');
INSERT INTO `author_table` VALUES ('111', 'people', '知乎用户', '-1', 'people', '', '', '7');
INSERT INTO `author_table` VALUES ('112', 'people', '拿着灼热的铁', '-1', 'people', '', '写作', '2');
INSERT INTO `author_table` VALUES ('114', 'people', 'David', '1', 'people', '', 'H5资森玩家', '764');
INSERT INTO `author_table` VALUES ('115', 'people', 'Think Lee', '1', 'people', '', 'IBM Designer', '3827');
INSERT INTO `author_table` VALUES ('116', 'people', '知乎用户', '1', 'people', '', '动画攻城狮 <a href=\"https://link.zhihu.com/?target=http%3A//www.w3cplus.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">w3cplus.com</span><span class=\"invisible\"></span></a>', '14168');
INSERT INTO `author_table` VALUES ('117', 'people', '童同学', '1', 'people', '', '跨界设计师', '59');
INSERT INTO `author_table` VALUES ('118', 'people', '菜可乎斯基', '1', 'people', '', '分享点滴 茁壮成长', '50');
INSERT INTO `author_table` VALUES ('121', 'people', '尤雨溪', '1', 'people', '', '一个前端', '71683');
INSERT INTO `author_table` VALUES ('122', 'people', '祖明', '1', 'people', '', 'AC Milan球迷', '3250');
INSERT INTO `author_table` VALUES ('123', 'people', '李金皆', '1', 'people', '', '不用了', '153');
INSERT INTO `author_table` VALUES ('124', 'people', 'uikoo9.com', '1', 'people', '', '一个人的技术团队', '7');
INSERT INTO `author_table` VALUES ('125', 'people', 'IT米粉', '1', 'people', '', '微信号:itmifen,IT狗,程序猿,苦B奋斗的伪文中老年', '136');
INSERT INTO `author_table` VALUES ('127', 'people', 'walle', '1', 'people', '', '不知道说什么', '352');
INSERT INTO `author_table` VALUES ('128', 'people', '朱剑昭', '1', 'people', '', '', '1');
INSERT INTO `author_table` VALUES ('129', 'people', 'Jasin Yip', '1', 'people', '', '前端工程师叶俊星,Cardano 信仰者', '16525');
INSERT INTO `author_table` VALUES ('130', 'people', '郭家兴', '1', 'people', '', '追风的骚年.前端小白.不会画画的设计爱好者.', '73');
INSERT INTO `author_table` VALUES ('131', 'people', 'Mark', '1', 'people', '', '码蜂社 <a href=\"https://link.zhihu.com/?target=http%3A//mafengshe.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">mafengshe.com</span><span class=\"invisible\"></span></a> 创始人,前端交流群180251611', '2254');
INSERT INTO `author_table` VALUES ('133', 'people', '鲁小夫', '-1', 'people', '', '程序员', '9893');
INSERT INTO `author_table` VALUES ('134', 'people', '草皮子', '1', 'people', '', 'HTML5/GAME', '184');
INSERT INTO `author_table` VALUES ('135', 'people', 'renjie chen', '1', 'people', '', '', '33');
INSERT INTO `author_table` VALUES ('136', 'people', 'casio90', '1', 'people', '', '硬件工程师', '342');
INSERT INTO `author_table` VALUES ('137', 'people', '孙灼灼', '-1', 'people', '', '新媒体运营', '490');
INSERT INTO `author_table` VALUES ('139', 'people', 'Chuckie Chang', '1', 'people', '', '扎根梦想. <a href=\"https://link.zhihu.com/?target=http%3A//www.c945.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">c945.com</span><span class=\"invisible\"></span></a>', '1339');
INSERT INTO `author_table` VALUES ('140', 'people', '梓骞', '1', 'people', '', '招web前端开发 <a href=\"https://link.zhihu.com/?target=http%3A//t.cn/RpvqD7B\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">t.cn/RpvqD7B</span><span class=\"invisible\"></span></a>', '713');
INSERT INTO `author_table` VALUES ('141', 'people', '方应杭', '1', 'people', '', '公众号 XDML,想进群加微信 hungervalley ,暗号:知乎', '17008');
INSERT INTO `author_table` VALUES ('143', 'people', '豪情', '1', 'people', '', '一直在打杂,从未被超越', '7026');
INSERT INTO `author_table` VALUES ('144', 'people', 'robert wang', '1', 'people', '', '跳槽去做前端的嵌入式研究僧', '503');
INSERT INTO `author_table` VALUES ('145', 'people', 'Galen', '1', 'people', '', 'Web前端 / 猫奴', '720');
INSERT INTO `author_table` VALUES ('146', 'people', 'Yorkie', '-1', 'people', '', '<a href=\"https://link.zhihu.com/?target=http%3A//github.com/yorkie\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">github.com/yorkie</span><span class=\"invisible\"></span></a>', '3547');
INSERT INTO `author_table` VALUES ('147', 'people', '知乎用户', '1', 'people', '', '=>DRY', '512');
INSERT INTO `author_table` VALUES ('149', 'people', '王楠', '1', 'people', '', '喜欢做游戏的大叔', '4850');
INSERT INTO `author_table` VALUES ('150', 'people', '云中客', '1', 'people', '', '不断修炼的程序员', '31');
INSERT INTO `author_table` VALUES ('151', 'people', '军假司马', '1', 'people', '', '未来已经发生,只是尚未流行', '273');
INSERT INTO `author_table` VALUES ('152', 'people', '唯尚', '-1', 'people', '', '未来的知识分子', '-1');
INSERT INTO `author_table` VALUES ('154', 'people', '知乎用户', '1', 'people', '', '正在创业的天文爱好者', '3134');
INSERT INTO `author_table` VALUES ('155', 'people', '刘远', '1', 'people', '', '设计师,喜欢游戏、漫画和足球', '596');
INSERT INTO `author_table` VALUES ('156', 'people', '寸志', '1', 'people', '', '不同凡想,心成伟事。', '10170');
INSERT INTO `author_table` VALUES ('157', 'people', '知乎用户', '1', 'people', '', '对未知领域保持敬畏', '312');
INSERT INTO `author_table` VALUES ('158', 'people', 'Rain', '1', 'people', '', '学生', '5157');
INSERT INTO `author_table` VALUES ('160', 'people', '王哲', '1', 'people', '', 'Cocos引擎首席客服', '6950');
INSERT INTO `author_table` VALUES ('161', 'people', 'Alex Zhao', '1', 'people', '', 'Knot.js作者, <a href=\"https://link.zhihu.com/?target=http%3A//www.knotjs.com\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://www.</span><span class=\"visible\">knotjs.com</span><span class=\"invisible\"></span></a>', '1054');
INSERT INTO `author_table` VALUES ('162', 'people', '廖鑫炜', '1', 'people', '', '全栈码工', '224');
INSERT INTO `author_table` VALUES ('163', 'people', '李超', '1', 'people', '', '我想走起来..', '13');
INSERT INTO `author_table` VALUES ('164', 'people', '易良慧', '1', 'people', '', '产品经理,关注企业服务、AI、大数据。', '232');
INSERT INTO `author_table` VALUES ('166', 'people', 'Contra', '1', 'people', '', 'Creative coder@INT++ n\' Float Lab', '174');
INSERT INTO `author_table` VALUES ('167', 'people', '思扬', '-1', 'people', '', '致力将知乎娱乐化', '963');
INSERT INTO `author_table` VALUES ('168', 'people', 'Whales', '-1', 'people', '', '', '26');
INSERT INTO `author_table` VALUES ('170', 'people', '依云', '-1', 'people', '', '啊咧,一句话介绍不清楚的喵。', '5826');
INSERT INTO `author_table` VALUES ('171', 'people', '暮雨', '1', 'people', '', '前端开发', '23');
INSERT INTO `author_table` VALUES ('173', 'people', '宗宇', '1', 'people', '', '前端码农', '636');
INSERT INTO `author_table` VALUES ('174', 'people', 'Yika', '1', 'people', '', 'CNHC / 鹅厂前端工程师', '185');
INSERT INTO `author_table` VALUES ('177', 'people', 'Michael Lee', '1', 'people', '', 'Seize the day ', '111');
INSERT INTO `author_table` VALUES ('178', 'people', 'forzen W', '1', 'people', '', '业余编程汪', '-1');
INSERT INTO `author_table` VALUES ('179', 'people', 'max Xu', '1', 'people', '', '军事爱好者', '1');
INSERT INTO `author_table` VALUES ('180', 'people', '知乎用户', '1', 'people', '', '一边回答问题,一边喷人。', '120');
INSERT INTO `author_table` VALUES ('181', 'people', '丁正', '1', 'people', '', '深度人格神经官能症患者', '2');
INSERT INTO `author_table` VALUES ('183', 'people', 'Johnny Wu', '1', 'people', '', '高级黑 / 神吐槽 / 自带嘲讽 / 游戏工具程序员', '4119');
INSERT INTO `author_table` VALUES ('184', 'people', '徐飞', '1', 'people', '', '三流程序员,二流架构师', '29987');
INSERT INTO `author_table` VALUES ('185', 'people', '小爝', '1', 'people', '', '一个前端小白', '24050');
INSERT INTO `author_table` VALUES ('187', 'people', '赵劼', '1', 'people', '', '知乎“温赵轮”三大软狗之一。', '145121');
INSERT INTO `author_table` VALUES ('188', 'people', '问答无用', '1', 'people', '', '希望生活工作两不误', '1067');
INSERT INTO `author_table` VALUES ('189', 'people', 'qaqabincs', '1', 'people', '', '生命不息,思考不止', '277');
INSERT INTO `author_table` VALUES ('190', 'people', '李运华', '1', 'people', '', '好写代码,好为人师,好读书不求甚解', '10078');
INSERT INTO `author_table` VALUES ('192', 'people', '沈嵘', '1', 'people', '', '产品总监', '683');
INSERT INTO `author_table` VALUES ('193', 'people', '暗影忍喵', '1', 'people', '', '三星小炸弹S7 / Lumia 920(已摔碎) / 游走于加班与猝死边缘的屌丝 / DotAer', '182');
INSERT INTO `author_table` VALUES ('194', 'people', 'Frend', '1', 'people', '', '前端 ', '112');
INSERT INTO `author_table` VALUES ('195', 'people', '太狼', '1', 'people', '', 'JavaScript/TypeScript', '2709');
INSERT INTO `author_table` VALUES ('196', 'people', '知乎用户', '1', 'people', '', '行走江湖全靠气势', '59');
INSERT INTO `author_table` VALUES ('198', 'people', '知乎用户', '1', 'people', '', '哈?', '123');
INSERT INTO `author_table` VALUES ('199', 'people', '萧强', '1', 'people', '', 'web前端开发', '613');
INSERT INTO `author_table` VALUES ('201', 'people', 'cheer', '-1', 'people', '', '容我择日疯,来年撞日死', '13');
INSERT INTO `author_table` VALUES ('202', 'people', '谢家杰', '1', 'people', '', '', '3');
INSERT INTO `author_table` VALUES ('203', 'people', '小妮', '-1', 'people', '', '', '-1');
INSERT INTO `author_table` VALUES ('204', 'people', '丹奇梦', '-1', 'people', '', '爱喝咖啡的互联网人', '3');
INSERT INTO `author_table` VALUES ('206', 'people', '陈晟', '1', 'people', '', '还在努力中的前端开发,专注写bug', '554');
INSERT INTO `author_table` VALUES ('207', 'people', '吉April', '-1', 'people', '', '程序媛', '175');
INSERT INTO `author_table` VALUES ('208', 'people', '子丶言', '1', 'people', '', '一只会炼金术的游吟诗人~', '46');
INSERT INTO `author_table` VALUES ('209', 'people', '丛九九', '1', 'people', '', '在读程序猿', '430');
INSERT INTO `author_table` VALUES ('210', 'people', '隐约雷鸣', '1', 'people', '', '罚站工程师', '41');
INSERT INTO `author_table` VALUES ('212', 'people', '张秋怡', '-1', 'people', '', '@ alinode', '21045');
INSERT INTO `author_table` VALUES ('213', 'people', '知乎用户', '1', 'people', '', '产品狗,机器学习初学者,略懂梅花', '735');
INSERT INTO `author_table` VALUES ('214', 'people', '胖胖小', '1', 'people', '', '码农', '434');
INSERT INTO `author_table` VALUES ('215', 'people', '知乎用户', '1', 'people', '', '杂学家', '146');
INSERT INTO `author_table` VALUES ('216', 'people', 'Shelley Lee', '-1', 'people', '', '', '2612');
INSERT INTO `author_table` VALUES ('218', 'people', '薛天禄', '1', 'people', '', 'Impact?', '33908');
INSERT INTO `author_table` VALUES ('219', 'people', 'Rix Tox', '1', 'people', '', '太不專業了', '2361');
INSERT INTO `author_table` VALUES ('220', 'people', 'Will', '1', 'people', '', '前端工程师', '74');
INSERT INTO `author_table` VALUES ('221', 'people', 'crazycode', '1', 'people', '', '软件工程师', '129');
INSERT INTO `author_table` VALUES ('223', 'people', '陈佳', '1', 'people', '', '我就是和多人敬仰的堃哥同为植物七君子之一的小佳', '109');
INSERT INTO `author_table` VALUES ('224', 'people', '万彦文', '1', 'people', '', 'OS X 用户', '409');
INSERT INTO `author_table` VALUES ('225', 'people', 'Maxine708', '-1', 'people', '', '听说有个遥远的星球,上面住满了外星人。', '30');
INSERT INTO `author_table` VALUES ('226', 'people', '窝窝头', '1', 'people', '', '普通学生', '5');
INSERT INTO `author_table` VALUES ('229', 'people', '迷路', '1', 'people', '', '中华田园全站工程师 微信meirooo', '668');
INSERT INTO `author_table` VALUES ('230', 'people', 'Vinjn张静', '1', 'people', '', 'NVIDIA 招 Graphics / Compute 工程师', '17520');
INSERT INTO `author_table` VALUES ('231', 'people', 'AR学院归海', '1', 'people', '', 'VR/AR玩家、开发者、创业者', '585');
INSERT INTO `author_table` VALUES ('232', 'people', '闫展逸', '1', 'people', '', 'AR/VR,智能硬件', '804');
INSERT INTO `author_table` VALUES ('233', 'people', '知乎用户', '1', 'people', '', '当轩,前端工程师', '1314');
INSERT INTO `author_table` VALUES ('235', 'people', '刘超', '1', 'people', '', '写代码的,想写一辈子', '1051');
INSERT INTO `author_table` VALUES ('236', 'people', '知乎用户', '1', 'people', '', '阿里钉钉招前端', '2261');
INSERT INTO `author_table` VALUES ('237', 'people', '黑猫', '1', 'people', '', '没猫。', '2986');
INSERT INTO `author_table` VALUES ('238', 'people', 'NimoChu', '1', 'people', '', 'Web前端程序员', '329');
INSERT INTO `author_table` VALUES ('239', 'people', '林建入', '1', 'people', '', '快乐的程序员', '16943');
INSERT INTO `author_table` VALUES ('241', 'people', '阳光下的我们', '-1', 'people', '', 'Html5从业者', '59');
INSERT INTO `author_table` VALUES ('242', 'people', 'SunLn', '1', 'people', '', '人生 ing', '4673');
INSERT INTO `author_table` VALUES ('243', 'people', '张铮铮', '1', 'people', '', '前端工程师', '2348');
INSERT INTO `author_table` VALUES ('244', 'people', 'Matt Zhou', '1', 'people', '', '虽然这样,今天、明天、后天,我必须前行。', '126');
INSERT INTO `author_table` VALUES ('245', 'people', '王灿', '1', 'people', '', 'Java/JavaScript/dota2', '22');
INSERT INTO `author_table` VALUES ('247', 'people', '哒哒大文涛', '1', 'people', '', '后端Starter', '3');
INSERT INTO `author_table` VALUES ('248', 'people', 'Boring', '1', 'people', '', '', '69');
INSERT INTO `author_table` VALUES ('249', 'people', '小豆沙', '1', 'people', '', '已重置', '9');
INSERT INTO `author_table` VALUES ('250', 'people', '知乎用户', '1', 'people', '', '一个没什么不同的普通人', '643');
INSERT INTO `author_table` VALUES ('251', 'people', '春哥大魔王', '1', 'people', '', '自认全栈工程师。身处互联网。', '180');
INSERT INTO `author_table` VALUES ('253', 'people', '贺青林', '1', 'people', '', '会点点设计,会点点程序', '117');
INSERT INTO `author_table` VALUES ('254', 'people', '张明臣', '-1', 'people', '', '有所改善的拖延症 | 跑步爱好者 |', '51');
INSERT INTO `author_table` VALUES ('255', 'people', '梅雪香', '1', 'people', '', 'WEB前端工程师', '916');
INSERT INTO `author_table` VALUES ('256', 'people', '知乎用户', '1', 'people', '', 'Good good study, day day up', '213');
INSERT INTO `author_table` VALUES ('257', 'people', '张竞择', '1', 'people', '', '产品经理,试图热爱生活', '37');
INSERT INTO `author_table` VALUES ('259', 'people', 'gostop', '1', 'people', '', '走走停停', '-1');
INSERT INTO `author_table` VALUES ('260', 'people', '王小王', '-1', 'people', '', '', '190');
INSERT INTO `author_table` VALUES ('261', 'people', '卡拉迦迪斯', '1', 'people', '', '猫狗双全', '705');
INSERT INTO `author_table` VALUES ('264', 'people', 'liuqipeng', '1', 'people', '', '<a href=\"https://link.zhihu.com/?target=https%3A//github.com/liuqipeng417\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">https://</span><span class=\"visible\">github.com/liuqipeng417</span><span class=\"invisible\"></span></a>', '49');
INSERT INTO `author_table` VALUES ('266', 'people', '知乎用户', '1', 'people', '', '知乎虐我千百遍,我待知乎如初恋.', '752');
INSERT INTO `author_table` VALUES ('267', 'people', 'temple x', '1', 'people', '', '就差陈胜 吴广了', '19');
INSERT INTO `author_table` VALUES ('268', 'people', '郑岐', '1', 'people', '', 'IM-直播-音视频', '1540');
INSERT INTO `author_table` VALUES ('269', 'people', '柴文多', '1', 'people', '', '即构科技后台码农,花椒直播脑残粉', '60');
INSERT INTO `author_table` VALUES ('271', 'people', '王晶峰', '1', 'people', '', '脑残儿童欢乐多', '582');
INSERT INTO `author_table` VALUES ('272', 'people', 'XueRainey', '1', 'people', '', '积极的悲观主义者', '17');
INSERT INTO `author_table` VALUES ('273', 'people', '陈熠', '1', 'people', '', '编程爱好者', '4');
INSERT INTO `author_table` VALUES ('274', 'people', '知乎用户', '1', 'people', '', '', '17');
-- ----------------------------
-- Table structure for `question_table`
-- ----------------------------
DROP TABLE IF EXISTS `question_table`;
CREATE TABLE `question_table` (
`ID` int(10) NOT NULL,
`title` varchar(128) DEFAULT NULL,
`content` text,
`topics` varchar(255) DEFAULT NULL,
`attention_count` int(11) DEFAULT NULL,
`view_count` int(11) DEFAULT NULL,
`best_answer_ID` int(11) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of question_table
-- ----------------------------
INSERT INTO `question_table` VALUES ('6', '如何看待人工智能已经能自动编写html和css了?', '在未来三年内,深度学习将改变前端开发,它可以快速创建原型,并降低软件开发的门槛。 去年,该领域取得了突破性的进展,其中 Tony Beltramelli 发表了 pix2code 的论文[1],而 Airbnb 则推出了sketch2code[2]。 目前,前端开发自动化的最大障碍是计算能力。但是,现在我们可以使用深度学习的算法,以及合成的训练数据,探索人工前端开发的自动化。', '1,2,3,4,5', '25', '1156', '1');
INSERT INTO `question_table` VALUES ('12', '2018年一个合格的前端应该是什么样的?', '自学转行已经一年了,目前在一家小公司,基本上是一个人独立做前端方面的事情,觉得可能和现在主流前端有点脱轨啊,那么如何成为一个符合主流需求的前端呢?', '6,5,7,8,9', '1538', '203519', '7');
INSERT INTO `question_table` VALUES ('17', 'IT培训公司都有哪些通病?', '自学与培训,让真正想学习的人无从选择,而培训公司的资本化运作带来的弊端将整个行业弄的乌烟瘴气。', '6,10,5,11,12', '352', '125303', '13');
INSERT INTO `question_table` VALUES ('21', 'html5 mutation observer 不能监听元素尺寸变化,还有何用?', '现在dom树都是mvvm生成了,最需要的元素尺寸变动监听为什么反而没有支持呢?', '6,5', '73', '4794', '19');
INSERT INTO `question_table` VALUES ('27', '如何评价微信小程序内嵌网页功能开放?', '<a href=\"https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s/ArNnF12VSC8EEN1MDUwn4Q\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">mp.weixin.qq.com/s/ArNn</span><span class=\"invisible\">F12VSC8EEN1MDUwn4Q</span><span class=\"ellipsis\"></span></a> 十几分钟前,微信公众号发的 ', '6,13,14,5,15', '520', '135690', '23');
INSERT INTO `question_table` VALUES ('33', '为什么大多数视频网站都不用HTML5?', '如题,国内如优酷,土豆等等视频网站都不是HTML5,直接导致在OS X系统下必须安装flash或者使用像chrome这样内置了flash的浏览器。 HTML5不像flash那样增加硬件功耗导致发热为什么视频网站都不用呢?', '5', '30', '14947', '29');
INSERT INTO `question_table` VALUES ('38', '如何解析网页视频的原始地址?', '比如腾讯课堂的一个视频:<a href=\"https://link.zhihu.com/?target=http%3A//ke.qq.com/cgi-bin/courseDetail%3Fcourse_id%3D52993\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">ps教程-ps入门案例教学(photoshop教程)【oeasy】</a> 一个解析器可以解析出这个视频的地址是:<a href=\"https://link.zhihu.com/?target=http%3A//static.video.qq.com/TPout.swf%3Fvid%3Da1400po96pp\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">static.video.qq.com/TPo</span><span class=\"invisible\">ut.swf?vid=a1400po96pp</span><span class=\"ellipsis\"></span></a> 请问这是怎么做到的? PS: 看了chrome(network)和源代码没看出。', '6,16,13,5,17', '47', '30871', '35');
INSERT INTO `question_table` VALUES ('44', 'onclick = xxx这种赋值写法绑定事件的原理是什么?', '刚入门不久,能力有限,这个问题我描述起来有点困难,只有劳烦各位大神细看了 我之前一直以为js底层存在类似下面这样的代码: //给所有dom对象定义好onclick值为一个空函数\nHTMLElement.prototype.onclick = function(){};\n\n//给所有dom对象绑定默认点击回调函数:点击时都执行一次自己的onclick方法\n[].map.call(document.all,function(item){\n item.addEventListener(\'click\',function(){\n this.onclick();\n });\n});\n然后我认…', '6,13,5', '126', '7323', '41');
INSERT INTO `question_table` VALUES ('48', '前端工程师有必要阅读 HTML、CSS、JavaScript 标准吗?如果有此必要,有没有一些提高效率或收益的建议?', '@克军 在提到前端技术的学习时认为应从阅读标准开始,书本往往是标准的滞后。 此意见是否合理? 如果有此必要,那么在阅读时有没有提高效率/收益的建议和方法? 感觉单纯的读标准可能会理解难度较大,特别是ECAMScript的标准。 谢谢!', '6,13,5,18', '328', '16679', '47');
INSERT INTO `question_table` VALUES ('51', '是不是表单中所有带 name 属性的都会被 form.submit() 提交?', '', '6,3,13,5,19', '31', '1254', '53');
INSERT INTO `question_table` VALUES ('57', '关于页面组件化的问题?', '前端小菜,最近写公司的网页,发现页面上的很多内容都是可以重复使用的,例如页面导航栏,也听说过一点web component,想尝试着把这些可以复用的东西分离出来,这时候,我考虑到一个问题 **分离出来的组件怎么导入的页面中呢?** 之前弄过博客系统(jekyll和hexo),所以我知道后端有这种类似的功能,但是作为一个前端的话,我该怎么处理这个问题呢? 是交给后端来完成呢,还是我自己使用某些开发工具来合并组件? 大家给个意见~!', '6,13,5', '81', '2187', '57');
INSERT INTO `question_table` VALUES ('63', 'Web Component 和类 React、Angular、Vue 组件化技术谁会成为未来?', '类比现在 HTML5 和 RN、Weex 技术体系,标准的 HTML5 显然是无线端的未来(只不过时间未知),特别是 PWA 技术等技术的兴起,会进一步推进,起码有点希望。 反观 Web Component 是 W3C 专门为组件化创建的标准,包括一些 Shadow DOM 等特性彻底的、从浏览器的层面解决掉一些作用域的问题(例如全局覆盖的 CSS)。而且也不需要构建、编译,直接跑在浏览器上。但是因为众多坑导致一直难以流行。有一些大公司(例如 Google)也研发…', '6,13,20,21', '723', '31961', '63');
INSERT INTO `question_table` VALUES ('69', 'WebSocket 是什么原理?为什么可以实现持久连接?', 'WebSocket是HTML5出的东西 也就是说HTTP协议没有变化 但HTTP是不支持持久连接的(长连接,循环连接的不算) 或者说WebSocket干脆就不是基于HTTP来执行的。但是。。。说不通啊。。。 他是怎么实现的呢??为什么可以实现持久连接???? ----------------------------- 【【【【【【【【【【【【【【补充】】】】】】】】】】::::: 既然WebSocket和HTTP是两个协议 为什么要在HTML5才支持 又如果说HTML5 出来以后可以用WebSo…', '5,22,23', '5835', '487769', '69');
INSERT INTO `question_table` VALUES ('74', '怎么学习前端开发?求推荐学习路线?', '首先,我是软件工程系的研究生,女生 说这个原因就是,我有代码能力,但不强悍。。 作为一个女生对样式也很感兴趣。。。 现在做测试开发岗位,我的工作主要是python+Django开发内部使用的平台(所以这也是我的工作需求) django使用了约1年,不算熟练,也是够用了。 在写Django时,因为测试部门往往不会有那么好的前端工程师支持,所以前台页面我们一般拿了bootstrap的东西在用, 问题就是,没有系统的学习过前端开发,很多不懂…', '6,4,5,18,11', '2954', '344997', '75');
INSERT INTO `question_table` VALUES ('80', '如何利用HTML&JS等前端知识开发Android应用?', '我是一条即将毕业的大四狗,目前在一家网络公司做前端开发的实习生,每天也算充实。可是想到毕业设计就头痛。 我选的题目是“基于Android平台的选课系统的设计与实现”,看上去很简单的一个题目,但显然不是我所擅长的,兴趣不在此。不过看到利用HTML5等前端知识也可以开发Android应用,甚是欢喜。 眼瞅着毕业临近,时间紧迫啊。想问一下各位,在短时间内如果想利用前端开发的方式去做这样一个不是很复杂的Android应用,应该还需…', '6,24,5', '205', '30717', '81');
INSERT INTO `question_table` VALUES ('86', '为什么知乎前端圈普遍认为H5游戏和H5展示的JSer(负责前端界面工作的程序员)不属于前端工程师呢?', '事实上,大家都使用HTML,CSS,JS这三种语言。唯一的区别就是他们使用canvas和webgl更多一些罢了。 在H5游戏行业,你可以管他们叫做游戏开发,ok的。 但问题来了,那么展示类网站呢,比如广告行业、比如企业级的宣传领域,这类前端程序员依然被公司的HR定义为前端工程师啊。他们的工作流程就是做酷炫的动画效果和互动效果因此也大量使用canvas2d和webgl技术,但又不如游戏行业对于机制的要求那么高。 然后悲剧了,他们的工作流程跟…', '6,25,5,18,26', '494', '84498', '87');
INSERT INTO `question_table` VALUES ('92', '做H5页面用什么软件比较好?', '想学H5制作,用什么软件比较好?', '5,27', '1277', '559475', '93');
INSERT INTO `question_table` VALUES ('97', 'Web 前端与算法的结合点在哪里?', '想知道在web前端开发中算法的应用主要在哪方面,有没有一个结合点?', '6,4,13,28,5', '525', '32987', '99');
INSERT INTO `question_table` VALUES ('98', '怎么学习前端开发?求推荐学习路线?', '首先,我是软件工程系的研究生,女生 说这个原因就是,我有代码能力,但不强悍。。 作为一个女生对样式也很感兴趣。。。 现在做测试开发岗位,我的工作主要是python+Django开发内部使用的平台(所以这也是我的工作需求) django使用了约1年,不算熟练,也是够用了。 在写Django时,因为测试部门往往不会有那么好的前端工程师支持,所以前台页面我们一般拿了bootstrap的东西在用, 问题就是,没有系统的学习过前端开发,很多不懂…', '6,4,5,18,11', '2954', '344997', '105');
INSERT INTO `question_table` VALUES ('99', 'IT培训公司都有哪些通病?', '自学与培训,让真正想学习的人无从选择,而培训公司的资本化运作带来的弊端将整个行业弄的乌烟瘴气。', '6,10,5,11,12', '352', '125303', '111');
INSERT INTO `question_table` VALUES ('101', 'HTML6最近有新动向吗?', 'HTML5火爆的时代有限,我们往未来看,替代HTML5的新版本HTML6是否已经有了?或者HTML6会在什么时候发布?会加入AR/VR等新的功能吗?', '1,3,29,5,30', '33', '2754', '117');
INSERT INTO `question_table` VALUES ('105', '浏览器能否调用摄像头录制10秒视频,保存为MP4文件?', '有木有大神知道,我现在已经能用JavaScript在浏览器端调用摄像头,想点击按钮后录制10秒视频然后上传服务器,后台是nodejs。(我的想法是能否将录制数据存为文件流上传,但是我发现上传的视频无法播放。) (最原始版)', '31,13,32,5,7', '48', '6855', '120');
INSERT INTO `question_table` VALUES ('108', '白鹭引擎和layabox哪个好用,哪个技术更成熟 ?', '<a href=\"https://link.zhihu.com/?target=http%3A//zhidao.baidu.com/list%3Ftag%3D%25B1%25E0%25B3%25CC\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">编程</a><a href=\"https://link.zhihu.com/?target=http%3A//zhidao.baidu.com/list%3Ftag%3DHTML\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">HTML</a><a href=\"https://link.zhihu.com/?target=http%3A//zhidao.baidu.com/list%3Ftag%3DFlash\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Flash</a><a href=\"https://link.zhihu.com/?target=http%3A//zhidao.baidu.com/question/1368430871449610419.html%23\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">修改标签</a> 对于flash程序做html5产品,白鹭引擎和layabox哪个技术更成熟,更傻瓜化;对开发新成品而已,不用考虑旧产品升级', '5,33,34', '207', '61943', '124');
INSERT INTO `question_table` VALUES ('113', '如何评价Hex FRVR?', '<a href=\"https://link.zhihu.com/?target=http%3A//hex.frvr.com/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">hex.frvr.com/</span><span class=\"invisible\"></span></a>', '35,36,5,37,38', '46', '4214', '130');
INSERT INTO `question_table` VALUES ('119', '请问做H5页面需要学什么?', '不是用MAKA、初页那些模板直接替换,而是能用一些类似于互动大师的工具,做出动画效果比较独特的H5页面。我本身不是这个专业的,但是由于在工作中经常跟做H5的人撕。。有的效果明明我在其他H5里面见到过,他们还是说做不了,忽悠我,说我不是专业的不懂,最后给我一个像屎一样的H5,我还得捏着鼻子给他们钱,所以我决定去学,然后糊他们一脸。', '5,39,26', '688', '84410', '136');
INSERT INTO `question_table` VALUES ('120', '做H5页面用什么软件比较好?', '想学H5制作,用什么软件比较好?', '5,27', '1277', '559475', '142');
INSERT INTO `question_table` VALUES ('126', '怎么评价国产框架MUI跟ReactNative的对比帖?', '非广告贴,题主只是一个比较好奇而已.. 刚看到一篇 MUI 跟RN 对比的帖子, 因为对两家的东西没有深入的掌握,所以问下大家如何评价这个对比贴. 链接: <a href=\"https://link.zhihu.com/?target=http%3A//ask.dcloud.net.cn/docs/%23http%3A//ask.dcloud.net.cn/question/2900\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">文档 - DCloud问答</a> ------------------------------------------------------------------------ 这个帖子的最后一段是这么说的: HTML5需要强化毋庸置疑,但到底该怎么强化? 一种是重订语法重写引擎,一种是把HTML5不流畅的部分使用原生动画补齐。很明显后者的方向更靠谱。 一个HT…', '6,13,7,40,41', '384', '99538', '148');
INSERT INTO `question_table` VALUES ('132', 'WEB 前端菜鸟,感觉很迷茫,该怎么做?', '先说问题吧:感觉前端涉及到的东西太多了,自己也很浮躁,看了挺多书,可是代码缺敲得却不多。技术菜,又什么都想学,比如现在纠结要不要先学scss或者php或者angularjs,backbone等框架,还是深入学习html5+css3? 然后看了一些招聘要求发现又有一些坑要填,经常处于焦躁状态,感觉心好累,然后心一累,又知乎上看各种打鸡血的东西,这鸡血一打多,头脑就热起来了,就想毕业去北京闯一闯了,但又好担心去了找不到工作,想问下前辈…', '6,3,4,13,5', '1937', '194377', '154');
INSERT INTO `question_table` VALUES ('138', '第一个h5小游戏怎么做?', '本人是刚出来做前端的实习生,然后突然有一天老板给了一些psd的图,让我做h5的打地鼠的游戏,要兼容不同分辨率的手机屏幕,不知道从何开始入手??本人html.css,js基础还是有的,想套模板感觉有很多不同,自己写也不知道怎么写感觉有很多东西。。。最重要的是,不知道从何入手?求指导', '6,5,27', '107', '11308', '160');
INSERT INTO `question_table` VALUES ('142', '如何在一个月之内从零基础成为初级CSS前端开发工程师?', 'WEB初级工程师(CSS,暂时不考虑JS)指的是能独立完成项目。 至少应该具备以下的能力: 1.能够独立的完成项目,完美还原设计稿. 2.能够支持自适应,不能做自适应的网站已经很少了. 3.能够支持响应式,毕竟跨屏的场景越来越多了. 4.能够了解一门CSS框架,做为提炼自已抽象能力的引子,通过使用,来直观的感受到其他人是怎么解决代码复用问题的。 5.能够和其他的项目组成员沟通学习交流协作,熟悉一些编码规范. 然后,并不要求这个…', '3,4,13,5,42', '1223', '80483', '166');
INSERT INTO `question_table` VALUES ('148', 'web前端学到什么程度就可以找工作了?学到什么程度又可以加工资了?', '补充:什么是初级中级高级资深前端工程师?', '6,4,13,5,19', '1545', '163772', '172');
INSERT INTO `question_table` VALUES ('153', '做了一个简单WebGL的FPS游戏,有大神能指导下后续开发吗?', '可以在优酷查看我的测试视频,是我和舍友两人: <a href=\"https://link.zhihu.com/?target=http%3A//v.youku.com/v_show/id_XOTM3MTg3NTE2.html\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">fn演示视频—在线播放</a> 花了大概大半年吧,大三做到大四,后来就直接当成毕设了。 使用了three.js库,我想在这个上面再封装个游戏引擎。 现在是简单的B/S架构,测试没问题,但是人数多了服务器肯定撑不住,最近SAE也准备收费,所以我已经把测试站关了。 如果后续肯定要选一个更好的后端,前段也基本要重新来过。 有兴趣指导交流的可以直接私信,我就是不确定这个项目有没有做下去的…', '43,5,44,45,46', '53', '6510', '178');
INSERT INTO `question_table` VALUES ('159', '未来是 HTML 5 还是 Flash 的时代?', '', '47,6,32,5,48', '2206', '452130', '184');
INSERT INTO `question_table` VALUES ('165', 'HTML 5 游戏是否有存在的必要?', '在这里不讨论应用 只讨论游戏。我非常的好奇的一个供需关系。是技术为需求服务,还是需求为技术服务呢?如果你读到这里,认为技术才是一切。下面就别读了。如果技术为需求服务那么有几个问题。 1.游戏的本质还是好玩。我只听别人说某游戏好玩,你去玩一玩。从未听别人和我说某游戏不用下载,你去玩一下吧。 2.手机端的瓶颈,体验太差了.没法快乐的玩。手机的性能是非常的差。不要和我说未来会好的。如果你有基本的计算机常识。应该…', '35,5,27', '229', '47732', '190');
INSERT INTO `question_table` VALUES ('169', 'H5 是什么?', '', '6,49,5,26', '3445', '2186426', '196');
INSERT INTO `question_table` VALUES ('172', 'Chrome 浏览器并未浏览 Facebook 为什么仍能收到其通知消息?', '开启了桌面通知功能,并没有打开 Facebook 网页,仍能够收到 Facebook 的通知。 微信网页版在Chrome中就不是这样,关掉微信就不会再收到Chrome的新消息通知了。 站在用户的角度来说,微信的行为应该更符合需求,希望没有浏览Facebook的时候不要收到其通知,而开启Facebook网页的时候才能收到。 那么,Facebook网页能实现微信网页版那样的行为吗?', '50,51,5,52', '30', '2039', '202');
INSERT INTO `question_table` VALUES ('175', '前端编程该懂得的工具?', '好久以前学编程只要懂得 CSS, javascript, html 等等就好, 现在发觉外面其实有很多实用的工具和框架,像 jade, less/sass, coffeescript, bower, gulp, sublime2, bootstrap, 这些东西,作为一个编程,你有什么工具/框架 觉得应该要懂得用的?', '6,5,53,54,55', '140', '8352', '205');
INSERT INTO `question_table` VALUES ('176', 'WebSocket 是什么原理?为什么可以实现持久连接?', 'WebSocket是HTML5出的东西 也就是说HTTP协议没有变化 但HTTP是不支持持久连接的(长连接,循环连接的不算) 或者说WebSocket干脆就不是基于HTTP来执行的。但是。。。说不通啊。。。 他是怎么实现的呢??为什么可以实现持久连接???? ----------------------------- 【【【【【【【【【【【【【【补充】】】】】】】】】】::::: 既然WebSocket和HTTP是两个协议 为什么要在HTML5才支持 又如果说HTML5 出来以后可以用WebSo…', '5,22,23', '5835', '487769', '211');
INSERT INTO `question_table` VALUES ('182', 'HTML5为什么这么火?', '最近朋友圈被H5刷屏,不知道为什么H5这么火?', '56,57,5,58', '51', '10383', '217');
INSERT INTO `question_table` VALUES ('186', '还要多少年, 前端开发才能像客户端开发那样轻松?', '标题党了,, 具体说意思吧, 看到 Web Compoents 规范进展很多, Google 的 Polymer, Mozilla 的 X-Tags, Facebook 的 React, 以及一些 MV* 框架, 比如 Angular, Ractive, 都在使用自定义标签功能加强抽象. HTML 原先抽象起来太艰难了, 现在终于好转.. 我想知道, 要多少年才能到大家都能顺手呢?', '6,5,59', '2063', '156050', '223');
INSERT INTO `question_table` VALUES ('191', '做前端和做 Java 或 C++ 相比前途哪个更好?', '', '5,60,61,62,63', '471', '88029', '229');
INSERT INTO `question_table` VALUES ('197', '原生js 有没有 手机移动端 滑动 的事件?', '原生js有这些事件,可是没有一个是针对手机端滑动的;请问是否可以用原生js获取手机移动端的滑动事件 这是w3school上面的事件列表;但是好像不全,很多最新的js事件都没有;请问哪里有最新的js事件列表呢?', '6,13,5,64,65', '75', '10921', '235');
INSERT INTO `question_table` VALUES ('200', '学不会 CSS?', '请轻喷。。。 <b>html:显示什么,css:怎么显示,js:逻辑控制</b> 啊,这三者的解耦真的是太好了!真庆幸自己学web开发。。。 可是为什么还是感觉平时开发web很苦恼呢? 是了,开发web,<b>在写html时,也许是自己能力的问题吧,不大会写css,为了达到与设计一致的效果,加入了太多与内容无关的标签了</b>,加入了太多类似Bootstrap里的row,col来控制界面啊。。。 这可真是div+css开发啊。。。 这,好像与第一句话 “html:显示什么,css:…', '4,5', '750', '25894', '241');
INSERT INTO `question_table` VALUES ('205', '有没有类似开心推一样的H5游戏广告定制的平台?', '有无大家了解的类似的平台', '27,66,26', '101', '9266', '247');
INSERT INTO `question_table` VALUES ('211', '女生学HTML5有何发展前途?', '', '6,3,57,10,5', '160', '69603', '253');
INSERT INTO `question_table` VALUES ('217', 'Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么?', '建站有很多技术,如 HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、<a href=\"https://link.zhihu.com/?target=http%3A//ASP.NET\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer\"><span class=\"invisible\">http://</span><span class=\"visible\">ASP.NET</span><span class=\"invisible\"></span></a>、Web Services、浏览器脚本、服务器脚本等。它们的区别是什么?新手一点不懂,想理清所有这些技术之间的关系和应用范围。', '6,4,13,5,67', '14875', '791635', '259');
INSERT INTO `question_table` VALUES ('222', 'Medium 主页类似 iOS 7 live blur 的高斯模糊效果是如何实现的?', '滚动下滑之后,首页顶部图片的高斯模糊的动画效果。 <a href=\"https://link.zhihu.com/?target=https%3A//medium.com/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer\">Medium</a> ', '47,4,13,5,68', '57', '2629', '265');
INSERT INTO `question_table` VALUES ('227', '零基础的人如何在一个月内做出令人惊讶的网站?', '我是一个刚刚开始学习HTML及CSS的小白,老师给我的第一个任务就是在自学的基础上做出一个尽可能的优秀的网站。 我刚读完《head first: html and css》,但感觉远远不能达到自己心目中的要求。我希望以Apple的主站为效仿对象,做一个关于kindle的网站,各位大大帮帮忙', '47,5,69', '413', '20311', '271');
INSERT INTO `question_table` VALUES ('228', '还要多少年, 前端开发才能像客户端开发那样轻松?', '标题党了,, 具体说意思吧, 看到 Web Compoents 规范进展很多, Google 的 Polymer, Mozilla 的 X-Tags, Facebook 的 React, 以及一些 MV* 框架, 比如 Angular, Ractive, 都在使用自定义标签功能加强抽象. HTML 原先抽象起来太艰难了, 现在终于好转.. 我想知道, 要多少年才能到大家都能顺手呢?', '6,5,59', '2063', '156050', '277');
INSERT INTO `question_table` VALUES ('234', 'AR技术可以通过HTML5实现吗?不通过APP?', '', '13,14,5,70', '491', '59668', '283');
INSERT INTO `question_table` VALUES ('240', '看完《CSS权威指南》、《JavaScript权威指南》和《深入理解 HTML5:语义、标准与样式》能否胜任前端工程师?', '', '4,5,18,71,72', '429', '88586', '289');
INSERT INTO `question_table` VALUES ('246', '最值得推荐的 HTML 开发工具有哪几款?', '', '3,73,74,5,75', '72', '30912', '295');
INSERT INTO `question_table` VALUES ('252', '《web全栈工程师的自我修养》这本书里说:不要在简历中出现Div+CSS,会减分!请教为什么这样说?', '', '6,3,5,18,76', '72', '4106', '301');
INSERT INTO `question_table` VALUES ('258', '为什么我在学习HTMLCSS的时候很快就能上手,可是JS我已经接触了2个月了,还是无从下手?', 'var imf = function () {\n var lf = 0;\n var instances = [];\n //定义一个通过class获得元素的方法\n function getElementsByClass (object, tag, className) {\n var o = object.getElementsByTagName(tag);\n for ( var i = 0, n = o.length, ret = []; i < n; i++)\n if (o[i].className == className) ret.push(o[i]);\n if (ret.length == 1) ret = ret[0];\n return ret;\n }\n function addEvent (o, e, f) {\n if (window.…', '47,3,13,5', '115', '8395', '307');
INSERT INTO `question_table` VALUES ('262', '网站的最大并发数是如何估算的?', '', '1,77,5,30,78', '61', '20515', '313');
INSERT INTO `question_table` VALUES ('263', 'nw.js 如何禁止双击最大化?', '如题:frame设置false后,用-webkit-app-region: drag;实现的拖动,但是如何禁止双击最大化', '3,79,13,5,7', '8', '1068', '317');
INSERT INTO `question_table` VALUES ('265', 'js中 aaa.style 和 aaa.getAttribute(\'style\') 等价吗,有无区别?', 'js中 aaa.style 和 aaa.getAttribute(\'style\') 等价吗,有没有什么区别? 我自己在各种浏览器(IE6到chrome)测试的结果是一样,没发现什么区别 是完全一样吗? ============================ 我知道大概区别了,下面第二句在高级浏览器下面查不到信息 不过我想问的是,为什么在IE6/7下第二句也可以成功执行??? 是否说在ie6/7下aaa.style和aaa.getAttribute(\'style\')等价??? alert(aaa.style.height); alert(aaa.getAttrib…', '6,13,5,7', '139', '2921', '319');
INSERT INTO `question_table` VALUES ('270', '网络视频直播系统开发需要用到哪方面的知识?', '网络视频直播系统需要用到哪些知识?用什么语言开发?什么开发环境?除了HTML5之外还需要哪些方面的知识?', '1,6,5,80,40', '377', '24277', '325');
INSERT INTO `question_table` VALUES ('275', '开发移动端web app需要哪些知识?', '开发移动端web app需要哪些知识?除了基本的html5 JS CSS知识,还有哪些知识?需要用到哪些框架吗?如何才能导出生成app呢?求有相关经验者指点一二,感激不尽。', '6,4,13,5,65', '87', '4646', '331');
-- ----------------------------
-- Table structure for `topic_table`
-- ----------------------------
DROP TABLE IF EXISTS `topic_table`;
CREATE TABLE `topic_table` (
`ID` int(11) NOT NULL,
`title` varchar(64) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of topic_table
-- ----------------------------
INSERT INTO `topic_table` VALUES ('1', '互联网');
INSERT INTO `topic_table` VALUES ('2', '人工智能');
INSERT INTO `topic_table` VALUES ('3', 'HTML');
INSERT INTO `topic_table` VALUES ('4', 'CSS');
INSERT INTO `topic_table` VALUES ('5', 'HTML5');
INSERT INTO `topic_table` VALUES ('6', '前端开发');
INSERT INTO `topic_table` VALUES ('7', 'Node.js');
INSERT INTO `topic_table` VALUES ('8', 'MVC');
INSERT INTO `topic_table` VALUES ('9', '前端框架');
INSERT INTO `topic_table` VALUES ('10', '编程');
INSERT INTO `topic_table` VALUES ('11', '前端入门');
INSERT INTO `topic_table` VALUES ('12', 'IT 培训');
INSERT INTO `topic_table` VALUES ('13', 'JavaScript');
INSERT INTO `topic_table` VALUES ('14', '微信');
INSERT INTO `topic_table` VALUES ('15', '微信小程序');
INSERT INTO `topic_table` VALUES ('16', '视频网站');
INSERT INTO `topic_table` VALUES ('17', '爬虫 (计算机网络)');
INSERT INTO `topic_table` VALUES ('18', '前端工程师');
INSERT INTO `topic_table` VALUES ('19', 'jQuery');
INSERT INTO `topic_table` VALUES ('20', 'React');
INSERT INTO `topic_table` VALUES ('21', 'Web Components');
INSERT INTO `topic_table` VALUES ('22', 'HTTP');
INSERT INTO `topic_table` VALUES ('23', 'WebSocket');
INSERT INTO `topic_table` VALUES ('24', 'Android 开发');
INSERT INTO `topic_table` VALUES ('25', '网页游戏');
INSERT INTO `topic_table` VALUES ('26', 'H5 广告');
INSERT INTO `topic_table` VALUES ('27', 'HTML 5 游戏');
INSERT INTO `topic_table` VALUES ('28', '算法');
INSERT INTO `topic_table` VALUES ('29', '科技');
INSERT INTO `topic_table` VALUES ('30', '网页');
INSERT INTO `topic_table` VALUES ('31', '视频');
INSERT INTO `topic_table` VALUES ('32', '网页浏览器');
INSERT INTO `topic_table` VALUES ('33', 'ActionScript 3');
INSERT INTO `topic_table` VALUES ('34', 'LayaBox');
INSERT INTO `topic_table` VALUES ('35', '游戏');
INSERT INTO `topic_table` VALUES ('36', '手机游戏');
INSERT INTO `topic_table` VALUES ('37', '独立游戏');
INSERT INTO `topic_table` VALUES ('38', '俄罗斯方块(Tetris)');
INSERT INTO `topic_table` VALUES ('39', '微信营销');
INSERT INTO `topic_table` VALUES ('40', 'HTML5 应用');
INSERT INTO `topic_table` VALUES ('41', 'React Native');
INSERT INTO `topic_table` VALUES ('42', 'CSS3');
INSERT INTO `topic_table` VALUES ('43', '游戏引擎');
INSERT INTO `topic_table` VALUES ('44', 'WebGL');
INSERT INTO `topic_table` VALUES ('45', '4399');
INSERT INTO `topic_table` VALUES ('46', '网页游戏开发');
INSERT INTO `topic_table` VALUES ('47', '网页设计');
INSERT INTO `topic_table` VALUES ('48', 'Adobe Flash');
INSERT INTO `topic_table` VALUES ('49', '互联网产品');
INSERT INTO `topic_table` VALUES ('50', 'Facebook');
INSERT INTO `topic_table` VALUES ('51', 'Google Chrome');
INSERT INTO `topic_table` VALUES ('52', 'Chrome 扩展程序');
INSERT INTO `topic_table` VALUES ('53', 'CoffeeScript');
INSERT INTO `topic_table` VALUES ('54', 'Less');
INSERT INTO `topic_table` VALUES ('55', 'Jade');
INSERT INTO `topic_table` VALUES ('56', '开放平台');
INSERT INTO `topic_table` VALUES ('57', '程序员');
INSERT INTO `topic_table` VALUES ('58', '热门问答');
INSERT INTO `topic_table` VALUES ('59', '模块化');
INSERT INTO `topic_table` VALUES ('60', 'Java');
INSERT INTO `topic_table` VALUES ('61', '大学生就业');
INSERT INTO `topic_table` VALUES ('62', 'C++');
INSERT INTO `topic_table` VALUES ('63', 'IT 行业');
INSERT INTO `topic_table` VALUES ('64', '原生 JavaScript');
INSERT INTO `topic_table` VALUES ('65', '手机移动端');
INSERT INTO `topic_table` VALUES ('66', '移动营销');
INSERT INTO `topic_table` VALUES ('67', 'ASP.NET');
INSERT INTO `topic_table` VALUES ('68', 'iOS Live Blur');
INSERT INTO `topic_table` VALUES ('69', 'HTML+CSS');
INSERT INTO `topic_table` VALUES ('70', '增强现实(AR)');
INSERT INTO `topic_table` VALUES ('71', 'JavaScript权威指南(书籍)');
INSERT INTO `topic_table` VALUES ('72', 'CSS权威指南(书籍)');
INSERT INTO `topic_table` VALUES ('73', '推荐');
INSERT INTO `topic_table` VALUES ('74', '工具');
INSERT INTO `topic_table` VALUES ('75', '开发工具');
INSERT INTO `topic_table` VALUES ('76', '前端开发框架和库');
INSERT INTO `topic_table` VALUES ('77', '网站');
INSERT INTO `topic_table` VALUES ('78', 'PHP 开发');
INSERT INTO `topic_table` VALUES ('79', '软件开发');
INSERT INTO `topic_table` VALUES ('80', '视频直播');