Skip to content

Commit f496694

Browse files
author
AceMood
committed
generate resource map
1 parent 3728c85 commit f496694

File tree

3 files changed

+127
-61
lines changed

3 files changed

+127
-61
lines changed

src/brisk/BriskPage.php

+103-44
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require_once('BriskResourceCollector.php');
44
require_once('BriskConfig.php');
5+
require_once('BriskUtils.php');
56

67
/**
78
* Checks a string for UTF-8 encoding.
@@ -65,7 +66,7 @@ function convertToUtf8($string) {
6566

6667
/**
6768
* Class BriskPage
68-
* 构造pagelet的html以及所需要的静态资源json
69+
* 构造 pagelet 的html以及所需要的静态资源json
6970
*/
7071
class BriskPage {
7172

@@ -79,15 +80,13 @@ class BriskPage {
7980
private static $cdn;
8081
private static $title = '';
8182

82-
/* render mode */
83+
// render mode
8384
private static $mode = null;
8485

85-
/* default render mode */
86+
// default render mode
8687
private static $defaultMode = null;
8788

88-
/**
89-
* save filters
90-
*/
89+
// save filters
9190
private static $filter;
9291

9392
private static $context = array();
@@ -146,9 +145,7 @@ public static function init($defaultMode) {
146145
self::$defaultMode = self::MODE_NOSCRIPT;
147146
}
148147

149-
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH'])
150-
&& (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
151-
148+
$isAjax = BriskUtils::isAjax();
152149
if ($isAjax) {
153150
self::setMode(self::MODE_QUICKLING);
154151
} else {
@@ -262,13 +259,53 @@ public static function getCDN() {
262259
return self::$cdn;
263260
}
264261

262+
// 构建需要打印在页面中的资源表, 这里全部打印
263+
protected static function buildResourceMap($map) {
264+
$ret = array(
265+
BriskConfig::TYPE_CSS => array(),
266+
BriskConfig::TYPE_JS => array()
267+
);
268+
foreach ($map[BriskConfig::TYPE_JS] as $symbol) {
269+
if (preg_match('/^p(\d)+$/', $symbol) !== 1) {
270+
$js = BriskResourceCollector::getResource(BriskConfig::TYPE_JS, $symbol);
271+
$ret[BriskConfig::TYPE_JS][$symbol] = array(
272+
BriskConfig::ATTR_URI => self::getCDN() . $js[BriskConfig::ATTR_URI],
273+
BriskConfig::ATTR_DEP => $js[BriskConfig::ATTR_DEP],
274+
BriskConfig::ATTR_CSS => $js[BriskConfig::ATTR_CSS]
275+
);
276+
}
277+
}
278+
279+
foreach ($map[BriskConfig::TYPE_CSS] as $symbol) {
280+
if (preg_match('/^p(\d)+$/', $symbol) !== 1) {
281+
$css = BriskResourceCollector::getResource(BriskConfig::TYPE_CSS, $symbol);
282+
$ret[BriskConfig::TYPE_CSS][$symbol] = array(
283+
BriskConfig::ATTR_URI => self::getCDN() . $css[BriskConfig::ATTR_URI],
284+
BriskConfig::ATTR_DEP => $css[BriskConfig::ATTR_DEP],
285+
BriskConfig::ATTR_CSS => $css[BriskConfig::ATTR_CSS]
286+
);
287+
}
288+
}
289+
290+
return array(
291+
BriskConfig::TYPE_JS => array_merge(
292+
$ret[BriskConfig::TYPE_JS],
293+
$map[BriskConfig::ATTR_ASYNCLOADED][BriskConfig::TYPE_JS]
294+
),
295+
BriskConfig::TYPE_CSS => array_merge(
296+
$ret[BriskConfig::TYPE_CSS],
297+
$map[BriskConfig::ATTR_ASYNCLOADED][BriskConfig::TYPE_CSS]
298+
)
299+
);
300+
}
301+
265302
/**
266303
* 根据资源表返回页面中的js片段
267304
* @param {array} $res
268305
* @return {string}
269306
*/
270-
private static function genJsFragment($res) {
271-
$resourceMap = $res[BriskConfig::ATTR_ASYNCLOADED];
307+
protected static function genJsFragment($res) {
308+
$resourceMap = self::buildResourceMap($res);
272309
$loadModJs = BriskResourceCollector::getFramework();
273310

274311
$code = '<!-- brisk render js start -->';
@@ -316,7 +353,7 @@ private static function genJsFragment($res) {
316353
* @param {array} $res
317354
* @return {string}
318355
*/
319-
private static function genCssFragment($res) {
356+
protected static function genCssFragment($res) {
320357
$code = '<!-- brisk render css start -->';
321358

322359
if (!empty($res[BriskConfig::TYPE_CSS])) {
@@ -348,10 +385,10 @@ private static function genCssFragment($res) {
348385
* 将资源渲染到页面替换页面中的占位符
349386
* @param {string} $html
350387
* @param {array} $arr
351-
* @param {bool} $clean_hook 是否把页面中的占位符清除
388+
* @param {bool} $cleanHook 是否把页面中的占位符清除
352389
* @return mixed
353390
*/
354-
private static function renderStatic($html, $arr, $clean_hook = false) {
391+
protected static function renderStatic($html, $arr, $cleanHook = false) {
355392
if (!empty($arr)) {
356393
$code = self::genJsFragment($arr);
357394
$html = str_replace(self::JS_HOOK, $code . self::JS_HOOK, $html);
@@ -360,7 +397,7 @@ private static function renderStatic($html, $arr, $clean_hook = false) {
360397
$html = str_replace(self::CSS_HOOK, $code . self::CSS_HOOK, $html);
361398
}
362399

363-
if ($clean_hook) {
400+
if ($cleanHook) {
364401
$html = str_replace(array(self::CSS_HOOK, self::JS_HOOK), '', $html);
365402
}
366403

@@ -372,7 +409,7 @@ private static function renderStatic($html, $arr, $clean_hook = false) {
372409
* @param {string} $html html页面内容
373410
* @return mixed
374411
*/
375-
private static function insertPageletGroup($html) {
412+
protected static function insertPageletGroup($html) {
376413
// 无widget直接返回
377414
if (empty(self::$pageletGroup)) {
378415
return $html;
@@ -458,20 +495,20 @@ public static function render($html) {
458495
$res = array();
459496

460497
// 合并资源
461-
foreach (self::$inner_widget[$mode] as $item) {
462-
$res = self::mergeResource($res, $item);
498+
foreach (self::$inner_widget[$mode] as $widgetResources) {
499+
$res = self::mergeResource($res, $widgetResources);
463500
}
464501

465502
// 为不是普通加载模式的资源添加cdn
466-
if ($mode !== self::MODE_NOSCRIPT) {
467-
foreach ((array)$res['JS'] as $symbol => $js) {
468-
$res['JS'][$symbol]['uri'] = self::getCDN() . $js['uri'];
469-
}
470-
471-
foreach ((array)$res['CSS'] as $symbol => $css) {
472-
$res['CSS'][$symbol]['uri'] = self::getCDN() . $css['uri'];
473-
}
474-
}
503+
// if ($mode !== self::MODE_NOSCRIPT) {
504+
// foreach ((array)$res['JS'] as $symbol => $js) {
505+
// $res['JS'][$symbol]['uri'] = self::getCDN() . $js['uri'];
506+
// }
507+
//
508+
// foreach ((array)$res['CSS'] as $symbol => $css) {
509+
// $res['CSS'][$symbol]['uri'] = self::getCDN() . $css['uri'];
510+
// }
511+
// }
475512

476513
// tpl信息没有必要打到页面
477514
switch($mode) {
@@ -484,7 +521,32 @@ public static function render($html) {
484521
case self::MODE_QUICKLING:
485522
// 返回json
486523
header('Content-Type: text/json; charset=utf-8');
487-
$res = self::mergeResource($res, BriskResourceCollector::getPageStaticResource());
524+
$all_static = BriskResourceCollector::getPageStaticResource();
525+
$res = self::mergeResource($all_static, $res);
526+
527+
foreach ($res[BriskConfig::TYPE_JS] as $index => $symbol) {
528+
if (preg_match('/^p(\d)+$/', $symbol) === 1) {
529+
$js = BriskResourceCollector::getPackage($symbol);
530+
} else {
531+
$js = BriskResourceCollector::getResource(BriskConfig::TYPE_JS, $symbol);
532+
}
533+
534+
$js['uri'] = self::getCDN() . $js['uri'];
535+
$js['id'] = $symbol;
536+
$res[BriskConfig::TYPE_JS][$index] = $js;
537+
}
538+
539+
foreach ($res[BriskConfig::TYPE_CSS] as $index => $symbol) {
540+
if (preg_match('/^p(\d)+$/', $symbol) === 1) {
541+
$css = BriskResourceCollector::getPackage($symbol);
542+
} else {
543+
$css = BriskResourceCollector::getResource(BriskConfig::TYPE_CSS, $symbol);
544+
}
545+
546+
$css['uri'] = self::getCDN() . $css['uri'];
547+
$css['id'] = $symbol;
548+
$res[BriskConfig::TYPE_CSS][$index] = $css;
549+
}
488550

489551
if ($res['script']) {
490552
$res['script'] = convertToUtf8(implode("\n", $res['script']));
@@ -569,8 +631,8 @@ public static function render($html) {
569631

570632
/**
571633
* WIDGET START
572-
* 解析参数收集widget所用到的静态资源
573-
* @param {string} $id pagelet id
634+
* 解析参数, 收集widget所用到的静态资源
635+
* @param {string} $id 分片id
574636
* @param {?string} $mode
575637
* @param {string} $group
576638
* @return {bool}
@@ -584,25 +646,24 @@ public static function widgetStart($id, $mode = null, $group = null) {
584646
$widgetMode = self::$mode;
585647
}
586648

587-
// 记录当前 pagelet id
649+
// 记录当前分片id
588650
self::$pageletId = $id;
589651

590-
$parent_id = $hasParent ? self::$context['id'] : '';
591-
$qk_flag = (self::$mode == self::MODE_QUICKLING ? '_qk_' : '');
652+
$parentId = $hasParent ? self::$context['id'] : '';
653+
$qk_flag = (self::$mode === self::MODE_QUICKLING ? '_qk_' : '');
592654

593655
//
594-
$id = empty($id) ? '__elm_' . $parent_id . '_' . $qk_flag . self::$_session_id ++ : $id;
656+
$id = empty($id) ? '__elm_' . $parentId . '_' . $qk_flag . self::$_session_id ++ : $id;
595657

596658

597659
$parent = self::$context;
598660
$hasParent = !empty($parent);
599661

600662
$hit = true;
601-
602663
$context = array(
603-
'id' => $id, //widget id
604-
'mode' => $widgetMode, //当前widget的mode
605-
'hit' => $hit // 是否命中
664+
'id' => $id, // widget id
665+
'mode' => $widgetMode, // 当前widget的mode
666+
'hit' => $hit // 是否命中
606667
);
607668

608669
if ($hasParent) {
@@ -638,7 +699,7 @@ public static function widgetStart($id, $mode = null, $group = null) {
638699
}
639700
} else if ($widgetMode === self::MODE_QUICKLING) {
640701
// 渲染模式不是quickling时,可以认为是首次渲染
641-
if (self::$pageletId && self::$mode != self::MODE_QUICKLING) {
702+
if (self::$pageletId && self::$mode !== self::MODE_QUICKLING) {
642703
if (!$group) {
643704
echo '<textarea class="g_bigrender" style="display:none;">'
644705
.'BigPipe.asyncLoad({id: "'.$id.'"});'
@@ -676,7 +737,7 @@ public static function widgetStart($id, $mode = null, $group = null) {
676737

677738
/**
678739
* WIDGET END
679-
* 收集html收集静态资源
740+
* 收集html, 收集静态资源
680741
*/
681742
public static function widgetEnd($id = null) {
682743
$ret = true;
@@ -700,7 +761,7 @@ public static function widgetEnd($id = null) {
700761
if (!$hasParent) {
701762
$widget = BriskResourceCollector::widgetEnd();
702763
// end
703-
if ($widgetMode == self::MODE_BIGRENDER) {
764+
if ($widgetMode === self::MODE_BIGRENDER) {
704765
$widget_style = $widget['style'];
705766
$widget_script = $widget['script'];
706767
// 内联css和script放到注释里面, 不需要收集
@@ -722,8 +783,6 @@ public static function widgetEnd($id = null) {
722783
$out
723784
);
724785

725-
$html = '';
726-
727786
echo '--></code></div>';
728787

729788
// 收集外链的js和css
@@ -754,7 +813,7 @@ public static function widgetEnd($id = null) {
754813
}
755814

756815
if ($widgetMode !== self::MODE_BIGRENDER) {
757-
echo '! MODE_BIGRENDER';
816+
//echo '! MODE_BIGRENDER';
758817
echo '</div>';
759818
}
760819
}

src/brisk/BriskResourceCollector.php

+8-17
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ public static function getMap($namespace = '__global__') {
104104
public static function widgetStart() {
105105
self::$isInWidget = true;
106106

107-
// clear all widget relative variables
108107
self::$widgetStaticResource = array();
109108
self::$widgetRequireAsync = array();
110109
self::$widgetScriptPool = array();
@@ -130,8 +129,8 @@ public static function widgetEnd() {
130129
$ret[BriskConfig::ATTR_ASYNCLOADED] = self::getAsyncResourceMap(self::$widgetRequireAsync);
131130
}
132131

133-
foreach (self::$widgetStaticResource as $type => $val) {
134-
foreach ($val as $symbol => $info) {
132+
foreach (self::$widgetStaticResource as $type => $symbols) {
133+
foreach ($symbols as $symbol) {
135134
unset(self::$loadedResources[$type][$symbol]);
136135
unset(self::$asyncDeleted[$type][$symbol]);
137136
}
@@ -276,15 +275,7 @@ public static function getPageStaticResource() {
276275
public static function getAsyncResourceMap($arrAsync, $cdn = '') {
277276
$ret = '';
278277
$arrResourceMap = array();
279-
280-
// var_dump(self::$pageStaticResource);
281-
// echo '<br>';
282-
// echo '<br>';
283-
//
284-
// var_dump($arrAsync);
285-
// echo '<br>';
286-
287-
278+
288279
// js结构
289280
if (isset($arrAsync[BriskConfig::TYPE_JS])) {
290281
foreach ($arrAsync[BriskConfig::TYPE_JS] as $id => $res) {
@@ -344,10 +335,10 @@ public static function getAsyncResourceMap($arrAsync, $cdn = '') {
344335
}
345336

346337
$arrResourceMap[BriskConfig::TYPE_JS][$id] = array(
347-
'uri' => $cdn . $res[BriskConfig::ATTR_URI]
338+
BriskConfig::ATTR_URI => $cdn . $res[BriskConfig::ATTR_URI],
339+
BriskConfig::ATTR_DEP => $deps,
340+
BriskConfig::ATTR_CSS => $css
348341
);
349-
$arrResourceMap[BriskConfig::TYPE_JS][$id][BriskConfig::ATTR_DEP] = $deps;
350-
$arrResourceMap[BriskConfig::TYPE_JS][$id][BriskConfig::ATTR_CSS] = $css;
351342
}
352343
}
353344

@@ -382,9 +373,9 @@ public static function getAsyncResourceMap($arrAsync, $cdn = '') {
382373
}
383374

384375
$arrResourceMap[BriskConfig::TYPE_CSS][$symbol] = array(
385-
'uri' => $cdn . $res[BriskConfig::ATTR_URI],
376+
BriskConfig::ATTR_URI => $cdn . $res[BriskConfig::ATTR_URI],
377+
BriskConfig::ATTR_CSS => $css
386378
);
387-
$arrResourceMap[BriskConfig::TYPE_CSS][$symbol][BriskConfig::ATTR_CSS] = $css;
388379
}
389380
}
390381

src/brisk/BriskUtils.php

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
4+
5+
/**
6+
* @file 常用函数
7+
* @author AceMood
8+
*/
9+
10+
final class BriskUtils {
11+
12+
public static function isAjax () {
13+
return $_GET['ajaxify'] == 1;
14+
}
15+
16+
}

0 commit comments

Comments
 (0)